/** * \brief writes the value tebles in the given list to the output file. * \param[in] fileOutput Pointer to the Output file * \param[in] vTab List of Value tables * * writes the value tebles in the given list to the output file. */ void CValueTable::writeValueTabToFile(fstream& fileOutput,list<CValueTable> &vTab) { list<CValueTable>::iterator tab; //get value table. //repeats till value tables exists in the list. for(tab = vTab.begin(); tab != vTab.end(); ++tab) { //write value table name to the o/p file. fileOutput << "VAL_TABLE_ " << tab->m_TableName << " "; //writes descriptors values to the o/p file. CValueDescriptor desc; desc.writeValueDescToFile(fileOutput, CSignal::SIG_TYPE_INT64, tab->m_values); } }
/** * \brief writes the signals in the given list to the output file * \param[in] fileOutput Pointer to the Output file * \param[in] m_listSignals List of Signals * \param[in] m_ucLength Message length * \param[in] m_cDataFormat If 1 dataformat Intel, 0- Motorola * \param[in] writeErr If true write error signals also else write onlt correct signals * * Writes the signals in the given list to the output file. */ bool CSignal::WriteSignaltofile(fstream &fileOutput, list<CSignal> &m_listSignals, int m_ucLength, int m_cDataFormat, bool writeErr) { bool bResult = true; list<CSignal>::iterator sig; for (sig=m_listSignals.begin(); sig!=m_listSignals.end(); ++sig) { // SIG_NAME,SIG_LENGTH,WHICH_BYTE_IN_MSG,START_BIT,SIG_TYPE,MAX_VAL,MIN_VAL,SIG_DATA_FORMAT,SIG_OFFSET,SIG_FACTOR,SIG_UNIT // write signal only if it is valid if((sig->m_uiError == CSignal::SIG_EC_NO_ERR) || (sig->m_uiError == CSignal::SIG_EC_OVERFLOW) || writeErr) { // For signal having motoroal format, the message length could be less // then eight byte. so in that case the whichByte needs to be shifted // accordingly. fileOutput << T_SIG; fileOutput << " "; fileOutput << sig->m_acName.c_str(); fileOutput << ","; fileOutput << (int) sig->m_ucLength; fileOutput << ","; fileOutput << (int) sig->m_ucWhichByte; fileOutput << ","; fileOutput << (int) sig->m_ucStartBit; fileOutput << ","; switch(sig->m_ucType) { case CSignal::SIG_TYPE_BOOL: case CSignal::SIG_TYPE_UINT: fileOutput << sig->m_ucType; fileOutput << ","; fileOutput << dec << sig->m_MaxValue.uiValue; fileOutput << ","; fileOutput << dec << sig->m_MinValue.uiValue; break; case CSignal::SIG_TYPE_INT: fileOutput << sig->m_ucType; fileOutput << ","; fileOutput << dec << sig->m_MaxValue.iValue; fileOutput << ","; fileOutput << dec << sig->m_MinValue.iValue; break; case CSignal::SIG_TYPE_FLOAT: fileOutput << sig->m_ucType; fileOutput << ","; fileOutput << fixed << sig->m_MaxValue.fValue; fileOutput << ","; fileOutput << fixed << sig->m_MinValue.fValue; break; case CSignal::SIG_TYPE_DOUBLE: fileOutput << sig->m_ucType; fileOutput << ","; fileOutput << fixed << sig->m_MaxValue.dValue; fileOutput << ","; fileOutput << fixed << sig->m_MinValue.dValue; break; case CSignal::SIG_TYPE_INT64: fileOutput << "I"; fileOutput << ","; fileOutput << dec << sig->m_MaxValue.i64Value; fileOutput << ","; fileOutput << dec << sig->m_MinValue.i64Value; break; case CSignal::SIG_TYPE_UINT64: fileOutput << "U"; fileOutput << ","; fileOutput << dec << sig->m_MaxValue.ui64Value; fileOutput << ","; fileOutput << dec << sig->m_MinValue.ui64Value; break; default: break; } fileOutput << ","; fileOutput << sig->m_ucDataFormat; fileOutput << ","; fileOutput << fixed << sig->m_fOffset; fileOutput << ","; fileOutput << fixed << sig->m_fScaleFactor; fileOutput << ","; fileOutput << sig->m_acUnit.c_str(); fileOutput << ","; fileOutput << sig->m_acMultiplex.c_str(); fileOutput << ","; fileOutput << sig->m_rxNode.c_str(); fileOutput << endl; CValueDescriptor val; val.writeValueDescToFile(fileOutput, sig->m_ucType, sig->m_listValueDescriptor); if(sig->m_uiError == CSignal::SIG_EC_OVERFLOW) bResult = false; } else bResult = false; } return bResult; }
/** * \brief Write to Output File * \param[in] fileOutput Output file * \return Status code * * Writes all the data to the output file in CANoe format */ bool CConverter::WriteToOutputFile(fstream& fileOutput) { bool bResult = true; // write to the output file // write header fileOutput << _("VERSION \"\"") << endl; fileOutput << endl; fileOutput << endl; fileOutput << "BS_:" << endl; fileOutput << endl; fileOutput << "BU_:"; //write all nodes list<string>::iterator node; for(node = m_listNode.begin(); node != m_listNode.end(); ++node) { fileOutput << " " << node->c_str(); } fileOutput << endl; fileOutput << endl; //Value Table CValueTable temp_vtab; temp_vtab.writeValueTabToFile(fileOutput, m_vTab); fileOutput << endl; //write messages list<CMessage>::iterator msg; for(msg=m_listMessages.begin(); msg!=m_listMessages.end(); ++msg) { bResult &= msg->writeMessageToFile(fileOutput); } //write environment variables if any list<string>::iterator str; for(str=m_notProcessed.begin(); str!=m_notProcessed.end(); ++str) { if(strcmp(str->substr(0, 3).c_str(), "EV_") == 0) { fileOutput << str->c_str() << endl; } } //Comments ----- Net list<CComment>::iterator cmt; for(cmt=m_listComments[0].begin(); cmt!=m_listComments[0].end(); ++cmt) { fileOutput << "CM_ " << cmt->m_elementName.c_str(); fileOutput << " " << cmt->m_comment.c_str()<<endl; } //Comments ----- Node for (cmt=m_listComments[1].begin(); cmt!=m_listComments[1].end(); ++cmt) { fileOutput << "CM_ BU_ " << cmt->m_elementName.c_str(); fileOutput << " " << cmt->m_comment.c_str()<<endl; } //Comments ----- Mesg for (cmt=m_listComments[2].begin(); cmt!=m_listComments[2].end(); ++cmt) { fileOutput << "CM_ BO_ " << dec << cmt->m_msgID; fileOutput << " " << cmt->m_comment.c_str()<<endl; } //Comments ----- Signal for (cmt=m_listComments[3].begin(); cmt!=m_listComments[3].end(); ++cmt) { fileOutput << "CM_ SG_ " << dec << cmt->m_msgID; fileOutput << " " << cmt->m_elementName.c_str(); fileOutput << " " << cmt->m_comment.c_str()<<endl; } //Param definition WriteParamToFile(fileOutput, m_listParameterArray[0]); WriteParamToFile(fileOutput, m_listParameterArray[1]); WriteParamToFile(fileOutput, m_listParameterArray[2]); WriteParamToFile(fileOutput, m_listParameterArray[3]); WriteParamToFile(fileOutput, m_listParameterArray[4]); WriteParamToFile(fileOutput, m_listParameterArray[5]); //Param Default values Write_DefVal_ToFile(fileOutput, m_listParameterArray[0]); Write_DefVal_ToFile(fileOutput, m_listParameterArray[1]); Write_DefVal_ToFile(fileOutput, m_listParameterArray[2]); Write_DefVal_ToFile(fileOutput, m_listParameterArray[3]); //Param Other values list<CParameter>::iterator rParam; for(rParam=m_listParameterArray[0].begin(); rParam!=m_listParameterArray[0].end(); ++rParam) { list<CParameterValues>::iterator vParam; for(vParam=rParam->m_listParamValues[0].begin(); vParam!=rParam->m_listParamValues[0].end(); ++vParam) { vParam->WriteNetValuesToFile(fileOutput, rParam->m_ParamType, rParam->m_ParamName); } } for(rParam=m_listParameterArray[1].begin(); rParam!=m_listParameterArray[1].end(); ++rParam) { list<CParameterValues>::iterator vParam; for(vParam=rParam->m_listParamValues[1].begin(); vParam!=rParam->m_listParamValues[1].end(); ++vParam) { vParam->WriteNodeValuesToFile(fileOutput, rParam->m_ParamType, rParam->m_ParamName); } } for(rParam=m_listParameterArray[2].begin(); rParam!=m_listParameterArray[2].end(); ++rParam) { list<CParameterValues>::iterator vParam; for(vParam=rParam->m_listParamValues[2].begin(); vParam!=rParam->m_listParamValues[2].end(); ++vParam) { vParam->WriteMesgValuesToFile(fileOutput, rParam->m_ParamType, rParam->m_ParamName); } } for(rParam=m_listParameterArray[3].begin(); rParam!=m_listParameterArray[3].end(); ++rParam) { list<CParameterValues>::iterator vParam; for(vParam=rParam->m_listParamValues[3].begin(); vParam!=rParam->m_listParamValues[3].end(); ++vParam) { list<CMessage>::iterator msg; for(msg=m_listMessages.begin(); msg!=m_listMessages.end(); ++msg) { if(msg->m_uiMsgID == vParam->m_MsgId) { list<CSignal>::iterator sig; for(sig=msg->m_listSignals.begin(); sig!=msg->m_listSignals.end(); ++sig) { if((sig->m_sName == vParam->m_SignalName) && (sig->m_uiError == CSignal::SIG_EC_NO_ERR)) { vParam->WriteSigValuesToFile(fileOutput, rParam->m_ParamType, rParam->m_ParamName); break; } } } } } } fileOutput << endl; fileOutput << endl; //BA_ for(str = m_notProcessed.begin(); str != m_notProcessed.end(); ++str) { if(strcmp(str->substr(0, 3).c_str(), "BA_") == 0) { fileOutput << str->c_str() << endl; } } //VAL_ for(msg=m_listMessages.begin(); msg!=m_listMessages.end(); ++msg) { list<CSignal>::iterator sig; for(sig=msg->m_listSignals.begin(); sig!=msg->m_listSignals.end(); ++sig) { if(sig->m_listValueDescriptor.empty() == 0 && sig->m_uiError == CSignal::SIG_EC_NO_ERR) { fileOutput << " VAL_ " << dec << msg->m_uiMsgID; fileOutput << " " << sig->m_sName.c_str(); fileOutput << " "; CValueDescriptor temp; temp.writeValueDescToFile(fileOutput, sig->m_ucType, sig->m_listValueDescriptor); } } } //write SIG_VALTYPE_ for(msg=m_listMessages.begin(); msg!=m_listMessages.end(); ++msg) { list<CSignal>::iterator sig; for(sig=msg->m_listSignals.begin(); sig!=msg->m_listSignals.end(); ++sig) { if(sig->m_ucType == 'F') { fileOutput << "SIG_VALTYPE_ " << dec << msg->m_uiMsgID; fileOutput << " " << sig->m_sName.c_str(); fileOutput << " : 1;" << endl; } else if(sig->m_ucType == 'D') { fileOutput << "SIG_VALTYPE_ " << dec << msg->m_uiMsgID; fileOutput << " " << sig->m_sName.c_str(); fileOutput << " : 2;" << endl; } } } fileOutput << endl; return bResult; }