示例#1
0
/**
 * \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);
    }
}
示例#2
0
/**
 * \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;
}
示例#3
0
/**
 * \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;
}