void UnconditionalFrameEditDlg::onMapSignal(bool)
{
    UID_ELEMENT uidECU = ui.comboPublisher->itemData(ui.comboPublisher->currentIndex()).value<UID_ELEMENT>();
    std::map<UID_ELEMENT, SignalInstanse> mapSignalInstance;

    SignalInstanse ouSignalInstanse;
    ouSignalInstanse.m_nStartBit = INVALID_DATA;
    ouSignalInstanse.m_nUpdateBitPos = INVALID_DATA;
    for( unsigned int unIndex = 0; unIndex < ui.tableSignals->rowCount(); unIndex++)
    {

        ouSignalInstanse.m_nStartBit = GetUnsignedInt(ui.tableSignals->item(unIndex, 1)->text(), 10);
        mapSignalInstance[ui.tableSignals->item(unIndex, 0)->data(Qt::UserRole).value<UID_ELEMENT>()] = ouSignalInstanse;
    }

    if(uidECU != INVALID_UID_ELEMENT)
    {
        unsigned int nId = GetUnsignedInt(ui.comboFrameLength->currentText());
        MapSignalsDlg ouMapSignalsDlg(uidECU, nId, mapSignalInstance);
        if(ouMapSignalsDlg.exec() == QDialog::Accepted)
        {
            ouMapSignalsDlg.vGetSelectedSignals(mapSignalInstance);
            vUpdateFrameSignalList(mapSignalInstance);
        }
    }
}
Exemplo n.º 2
0
int CodingDlg::FillPhysicalValues(CompuMethodProps& ouCompuMethods)
{
    ouCompuMethods.m_ouLinCompuMethods.m_ouPhysicalValueList.clear();
    PhysicalValue ouPhysicalValue;
    int nRowCount = ui.tablePhysicalValues->rowCount();
    for ( int i = 0 ; i < nRowCount; i++ )
    {
        LineEditWidget* pOffsetWidget = (LineEditWidget*)ui.tablePhysicalValues->cellWidget( i, 0 );
        LineEditWidget* pFactorWidget = (LineEditWidget*)ui.tablePhysicalValues->cellWidget( i, 1 );
        LineEditWidget* pMinWidget = (LineEditWidget*)ui.tablePhysicalValues->cellWidget( i, 2 );
        LineEditWidget* pMaxWidget = (LineEditWidget*)ui.tablePhysicalValues->cellWidget( i, 3 );
        LineEditWidget* pUnitWidget = (LineEditWidget*)ui.tablePhysicalValues->cellWidget( i, 4 );

        ouPhysicalValue.m_dOffset = pOffsetWidget->text().toDouble();
        ouPhysicalValue.m_dFactor = pFactorWidget->text().toDouble();
        ouPhysicalValue.m_unMin = GetUnsignedInt(pMinWidget->text());
        ouPhysicalValue.m_unMax = GetUnsignedInt(pMaxWidget->text());
        if ( ouPhysicalValue.m_unMax < ouPhysicalValue.m_unMin )
        {
            QString strErr;
            strErr.sprintf("Maximum value should be greater than minimum value (in row %d)", nRowCount+1);
            QMessageBox::critical(this, "Error", strErr, QMessageBox::Ok);
            return -1;
        }

        ouPhysicalValue.m_strTextInfo = pUnitWidget->text().toStdString();
        ouCompuMethods.m_ouLinCompuMethods.m_ouPhysicalValueList.push_back(ouPhysicalValue);
    }
    return 0;
}
Exemplo n.º 3
0
void CodingDlg::FillLogicalValues(CompuMethodProps& ouCompuMethods)
{
    ouCompuMethods.m_ouLinCompuMethods.m_ouLogicalValueList.clear();
    int nRowCount = ui.tableLogicalValues->rowCount();
    unsigned int unRawVal = 0;
    std::string strDesc;
    for ( int i = 0 ; i < nRowCount; i++ )
    {
        LineEditWidget* pWidget = (LineEditWidget*)ui.tableLogicalValues->cellWidget( i, 0 );
        if ( nullptr != pWidget )
        {
            if ( pWidget->text().length() == 0 )
            {
                continue;
            }
            unRawVal = GetUnsignedInt(pWidget->text());
            pWidget = (LineEditWidget*)ui.tableLogicalValues->cellWidget( i, 1 );
            if ( nullptr != pWidget )
            {
                strDesc = pWidget->text().toStdString();
                ouCompuMethods.m_ouLinCompuMethods.m_ouLogicalValueList[unRawVal] = strDesc;
            }
        }
    }
}
ERRORCODE UnconditionalFrameEditDlg::nValidateValues()
{
    std::string omStrName = ui.editFrameName->text().toStdString();
    QMessageBox msgBox;
    std::string omstrCurrFrame = "";
    LinFrameProps ouFrameProps;
    ouFrameProps.m_eLinFrameType = eLinInvalidFrame;
    unsigned int unExistingFrameID;
    if(nullptr != (*m_pouFrame))
    {
        (*m_pouFrame)->GetName(omstrCurrFrame);
        (*m_pouFrame)->GetProperties(ouFrameProps);
        unExistingFrameID =  ouFrameProps.m_nMsgId;
        vExistingFrameDetails(unExistingFrameID);
    }

    // Validate Frame Name
    if ( omStrName == "" )
    {
        msgBox.setText("Invalid Frame Name (Empty Name).");
        msgBox.exec();
        return EC_FAILURE;
    }
    if( ui.comboFrameId->currentText() == defNONE)
    {
        msgBox.setText("Frame Id cannot be empty.");
        msgBox.exec();
        return EC_FAILURE;
    }
    if( m_mapFrameNames.find(omStrName) != m_mapFrameNames.end() && omStrName != omstrCurrFrame)
    {
        msgBox.setText("Frame Name Already Exists.");
        msgBox.exec();
        return EC_FAILURE;
    }

    // Validate Frame Id
    if(ui.chkDynFrame->isChecked() == false)
    {
        QString strFrameId = ui.comboFrameId->currentText();
        unsigned int nFrameId = GetUnsignedInt(strFrameId);

        int nCount = bIsDynamicFrame(nFrameId);
        if((m_mapFrameIds.find(nFrameId) != m_mapFrameIds.end()) || nCount > 1)
        {
            msgBox.setText("Frame Id Already Exists.");
            msgBox.exec();
            return EC_FAILURE;
        }
    }

    if(ui.comboPublisher->currentText().toStdString() == defNONE)
    {
        msgBox.setText("Invalid Publisher (Empty).");
        msgBox.exec();
        return EC_FAILURE;
    }
    return 0;
}
Exemplo n.º 5
0
ERRORCODE MapSignalsDlg::nValidateSignalOverlapping(int nFrameLength, std::string& ouErrorString)
{
    int nArrSignalBit[64];
    int nSignalEndBit;
    UID_ELEMENT uidSignal;
    memset(nArrSignalBit, 0, sizeof(nArrSignalBit));
    std::ostringstream omStringStrm;
    std::string omSignalName;
    QLineEdit* pItem = nullptr;
    QString omSigName = "";
    int nCount = ui.tableSignals->rowCount();
    for(int nIndex = 0; nIndex < nCount; nIndex++)
    {
        pItem = (QLineEdit*)ui.tableSignals->cellWidget(nIndex, defCOL_START_BIT);

        if(ui.tableSignals->item(nIndex, defCOL_SIGNAL_NAME)->checkState() == Qt::Checked)
        {
            uidSignal = ui.tableSignals->item(nIndex, defCOL_SIGNAL_NAME)->data(Qt::UserRole).value<UID_ELEMENT>();
            omSigName = ui.tableSignals->item(nIndex, defCOL_SIGNAL_NAME)->text();
            int nStartBit = GetUnsignedInt(pItem->text(), 10);

            std::string strName = omSigName.toStdString();
            int nLength = GetUnsignedInt(ui.tableSignals->item(nIndex, defCOL_LENGTH)->text(), 10);

            // Signal End bit
            nSignalEndBit = nStartBit + (nLength-1);

            for(int nStartIndex = nStartBit; nStartIndex <= nSignalEndBit; nStartIndex++)
            {
                if(nArrSignalBit[nStartIndex] == 1)
                {
                    omStringStrm << defSIGNAL << "<B>" << omSigName.toStdString() << "</B>" << defSIGNAL_OVERLAPPING;
                    ouErrorString =  omStringStrm.str();
                    return EC_FAILURE;
                }

                nArrSignalBit[nStartIndex] = 1;
            }
        }
    }

    return EC_SUCCESS;
}
Exemplo n.º 6
0
ERRORCODE MapSignalsDlg::vCollectSelectedSignals(std::string& ouErrorString)
{
    ouErrorString = "";
    m_mapSignalUIDSigInst.clear();
    //QTableWidgetItem *pItem = nullptr;
    QLineEdit*  pStartBit = nullptr;
    QVariant qVariant;
    SignalInstanse ouSigInstance;
    UID_ELEMENT uidSig;
    //FrameProps ouFrameProps;
    int nFrameLengthInBits;
    std::string strSB;

    nFrameLengthInBits = (m_nFrameLen * 8);
    for(unsigned int unIndex = 0; unIndex < ui.tableSignals->rowCount(); unIndex++)
    {
        //pItem = ui.tableSignals->item(0,0);
        pStartBit = (QLineEdit*)ui.tableSignals->cellWidget(unIndex, defCOL_START_BIT);

        if(nullptr != pStartBit)
        {
            if(ui.tableSignals->item(unIndex, defCOL_SIGNAL_NAME)->checkState() == Qt::Checked)
            {
                qVariant = ui.tableSignals->item(unIndex, defCOL_SIGNAL_NAME)->data(Qt::UserRole);
                ouSigInstance.m_nStartBit =  GetUnsignedInt(pStartBit->text(), 10);
                uidSig = qVariant.value<UID_ELEMENT>();
                m_mapSignalUIDSigInst[uidSig] = ouSigInstance;

                // Validate Signal Start Bit
                if(EC_FAILURE == vValidateSignalStartBit(uidSig, nFrameLengthInBits,  pStartBit->text(), ouErrorString))
                {
                    return EC_FAILURE;
                }
            }
        }
    }

    ouErrorString = "";
    // Validate if Signal overlapping exists
    if(EC_FAILURE == nValidateSignalOverlapping(nFrameLengthInBits, ouErrorString))
    {
        return EC_FAILURE;
    }

    return EC_SUCCESS;
}
void UnconditionalFrameEditDlg::onChangeFrameLength(QString omCurrFrameLen)
{
    if(m_omFrameLength == omCurrFrameLen.toStdString())
    {
        return;
    }

    int nCurrLen = GetUnsignedInt(omCurrFrameLen);
    int nSignalLength = 0, nStartBit = 0, nEndBit = 0;
    //QTreeWidgetItem *pItem = nullptr;
    int nCount = ui.tableSignals->rowCount();
    std::list<std::string> lstSignals;
    std::list<int> lstSignalIndex;
    for(int nIndex = 0; nIndex < nCount; nIndex++)
    {
        nStartBit = GetUnsignedInt(ui.tableSignals->item(nIndex, 1)->text(), 10);               //Always dec
        nSignalLength = GetUnsignedInt(ui.tableSignals->item(nIndex, 3)->text());
        nEndBit = nStartBit + nSignalLength;

        if(nEndBit > (nCurrLen*8))
        {
            lstSignals.push_back(ui.tableSignals->item(nIndex, 0)->text().toStdString());
            lstSignalIndex.push_back(nIndex);
        }
    }

    std::string strSignals = "";
    std::list<std::string>::iterator itr = lstSignals.begin();
    while(itr != lstSignals.end())
    {
        if(itr == lstSignals.begin())
        {
            strSignals = *itr;
        }
        else
        {
            strSignals += defCOMMA + *itr;
        }

        itr++;
    }

    if(strSignals.empty() == false)
    {
        QMessageBox msgBox;
        std::ostringstream omStringStrm;

        omStringStrm << "Signal(s) [" << strSignals.c_str() << "] exceeding frame length will be unmapped.";
        msgBox.setText(QString::fromStdString(omStringStrm.str()));
        msgBox.setInformativeText("Do you want to Proceed?");
        msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
        int nResult = msgBox.exec();

        if(nResult == QMessageBox::Ok)
        {
            int nSigCount = ui.tableSignals->rowCount();
            int nSigIndex = 0;
            while(nSigIndex < nSigCount)
            {
                if(lstSignals.end() != std::find(lstSignals.begin(), lstSignals.end(), ui.tableSignals->item(nSigIndex, 0)->text().toStdString()))
                {
                    ui.tableSignals->removeRow(nSigIndex);
                    nSigIndex = 0;
                    nSigCount = ui.tableSignals->rowCount();
                }
                else
                {
                    nSigIndex++;
                }
            }
        }
        else
        {
            ui.comboFrameLength->setCurrentText(QString::fromStdString(m_omFrameLength));
        }
    }
    m_omFrameLength = ui.comboFrameLength->currentText().toStdString();

    if(ui.tableSignals->rowCount() <= 0)
    {
        ui.listSubscribers->clear();
    }
}
void UnconditionalFrameEditDlg::SetUpUi()
{
    IFrame* pFrame = *m_pouFrame;
    m_bIsDynFrame = false;
    std::string strName, strECUName;
    QString strValue;
    LinFrameProps ouFrameProps;
    ouFrameProps.m_eLinFrameType = eLinInvalidFrame;
    std::map<std::string, std::string> maSubscribers;
    std::list<IEcu*> lstTxECUs, lstRxECUs;
    ui.editFrameName->setValidator(new QRegExpValidator(QRegExp(defIdentifier_RegExp)));
    PopulateFrameIdCombo();
    PopulateFrameLengthCombo();
    vPopulatePublishers();
    vEnableDynamicFrame();

    if(m_eUIMode == eNew)
    {
        ui.comboFrameLength->setCurrentText("4");
        ui.comboFrameId->setCurrentText(defNONE);
        ui.comboPublisher->setCurrentText(defNONE);
        ui.tableSignals->setRowCount(0);
        setWindowTitle("Create Unconditional Frame");
    }
    else if(m_eUIMode == eEdit)
    {
        if (pFrame == nullptr)
        {
            return;
        }

        pFrame->GetName(strName);
        pFrame->GetProperties(ouFrameProps);

        QString strTitle = "Edit Unconditional Frame - ";
        strTitle+= + strName.c_str();
        setWindowTitle(strTitle);

        // Set FrameId
        strValue = GetString(ouFrameProps.m_nMsgId);
        ui.comboFrameId->setCurrentText(strValue);

        // Set Frame Length
        strValue = GetString(ouFrameProps.m_unMsgSize, 10);          //Always Dec
        ui.comboFrameLength->setCurrentText(strValue);
        m_omFrameLength = strValue.toStdString();

        pFrame->GetEcus(eTx, lstTxECUs);
        pFrame->GetEcus(eRx, lstRxECUs);

        // Set Frame Name
        ui.editFrameName->setText(QString::fromStdString(strName));

        // Adding ECUs to Publisherlst and Subscriberlst
        vAddSubscribers(lstRxECUs);

        // Set Publisher
        if(lstTxECUs.size() > 0)
        {
            std::list<IEcu*>::iterator itrTxECU = lstTxECUs.begin();
            ((IEcu*)*itrTxECU)->GetName(strECUName);
            ui.comboPublisher->setCurrentText(QString::fromStdString(strECUName));
            m_omStrPublisher = strECUName;
        }

        PopulateFrameSignals();

        // Dynamic Frame
        std::list<unsigned int> ouDyanamicFramelist;
        void* pDynFrameList;
        m_pouLDFCluster->GetProperties(eLdfDyanmicFrameList, &ouDyanamicFramelist);

        auto itr = std::find(ouDyanamicFramelist.begin(), ouDyanamicFramelist.end(), ouFrameProps.m_nMsgId);
        if(ouDyanamicFramelist.end() != itr)
        {
            ui.chkDynFrame->setChecked(true);
            m_bIsDynFrame = true;
        }

        //Store Rx Ecus;

        pFrame->GetEcus(eRx, m_ouRxEcus);


    }
    m_unFrameId = GetUnsignedInt(ui.comboFrameId->currentText());
    vExistingFrameDetails(GetUnsignedInt(ui.comboFrameId->currentText()));
}
void UnconditionalFrameEditDlg::vUpdateEditFrameDetails()
{
    LinFrameProps ouFrameProps;
    ouFrameProps.m_eLinFrameType = eLinInvalidFrame;
    UID_ELEMENT uidFrame;
    IFrame* pFrame = *m_pouFrame;
    uidFrame = pFrame->GetUniqueId();
    pFrame->GetProperties(ouFrameProps);

    //2. Set Frame Props

    ouFrameProps.m_unMsgSize = GetUnsignedInt(ui.comboFrameLength->currentText(), 10);
    ouFrameProps.m_nMsgId = GetUnsignedInt(ui.comboFrameId->currentText());
    ouFrameProps.m_eLinFrameType = eLinUnconditionalFrame;

    pFrame->SetProperties(ouFrameProps);

    std::list<IEcu*> lstECUs;
    pFrame->GetEcus(eTx, lstECUs);

    UID_ELEMENT uidECU;
    for(auto itrECU : lstECUs)
    {
        uidECU = itrECU->GetUniqueId();
        itrECU->UnMapFrame(eTx, uidFrame);
        pFrame->UnMapNode(eTx, uidECU);
    }
    lstECUs.clear();

    for(auto itrECU : m_ouRxEcus)
    {
        uidECU = itrECU->GetUniqueId();
        itrECU->UnMapFrame(eRx, uidFrame);
        pFrame->UnMapNode(eRx, uidECU);
    }

    //3. Map Tx ECU and Map Tx Frame to Ecu
    IEcu* pouEcu = nullptr;
    UID_ELEMENT unEcuID = INVALID_UID_ELEMENT;
    std::string strPublisher = ui.comboPublisher->currentText().toStdString();
    m_pouLDFCluster->GetEcu(strPublisher, &pouEcu);
    if ( pouEcu != nullptr )
    {
        pouEcu->GetUniqueId(unEcuID);
        pFrame->MapNode(eTx, unEcuID);
        pouEcu->MapFrame(eTx, uidFrame);
    }

    //4. Map Signals and Map RX frames TO ecu




    SignalInstanse ouSignalInstance;
    ouSignalInstance.m_nStartBit = INVALID_DATA;
    ouSignalInstance.m_nUpdateBitPos = INVALID_DATA;
    ISignal* pSignal = nullptr;
    std::list<IEcu*> ecuList;
    UID_ELEMENT uidSignal;
    for( unsigned int unIndex = 0; unIndex < ui.tableSignals->rowCount(); unIndex++)
    {
        //QTreeWidgetItem *treeItem = ui.treeSignals->topLevelItem(unIndex);
        uidSignal = ui.tableSignals->item(unIndex, 0)->data(Qt::UserRole).value<UID_ELEMENT>();
        m_pouLDFCluster->GetElement(eSignalElement, uidSignal,  (IElement**)&pSignal);

        ecuList.clear();

        if(nullptr != pSignal)
        {
            pSignal->GetEcus(eTx, ecuList);
        }

        //Ldf contains one Ecu so take First Ecu only;
        auto itrTxEcu =  ecuList.begin();

        if ( itrTxEcu != ecuList.end() )
        {
            UID_ELEMENT unTempEcuId = INVALID_UID_ELEMENT;
            (*itrTxEcu)->GetUniqueId(unTempEcuId);
            if ( unTempEcuId == unEcuID )
            {
                ouSignalInstance.m_nStartBit = GetUnsignedInt(ui.tableSignals->item(unIndex, 1)->text(), 10);
                pFrame->MapSignal(uidSignal, ouSignalInstance);
                ecuList.clear();
                if(nullptr != pSignal)
                {
                    pSignal->GetEcus(eRx, ecuList);
                }
                for ( auto itrEcu : ecuList )
                {
                    itrEcu->MapFrame(eRx, uidFrame);
                }
            }
        }
    }

    //1. Set Frame Name
    pFrame->SetName(ui.editFrameName->text().toStdString());

}
void UnconditionalFrameEditDlg::vUpdateNewFrameDetails()
{
    FrameProps ouFrameProps;
    UID_ELEMENT uidFrame;
    IFrame* pFrame = nullptr;
    m_pouLDFCluster->CreateElement(eFrameElement, (IElement**)&pFrame);


    //2. Set Frame Props
    unsigned int nLength = GetUnsignedInt(ui.comboFrameLength->currentText(), 10);      //Always Dec
    ouFrameProps.m_ouLINUnConditionFrameProps.m_nLength = nLength;
    ouFrameProps.m_ouLINUnConditionFrameProps.m_unId = GetUnsignedInt(ui.comboFrameId->currentText());
    ouFrameProps.m_eFrameType = eLIN_Unconditional;

    pFrame->SetProperties(ouFrameProps);

    //3. Map Tx ECU and Map Tx Frame to Ecu
    IEcu* pouEcu = nullptr;
    UID_ELEMENT unEcuID = INVALID_UID_ELEMENT;
    m_pouLDFCluster->GetEcu(ui.comboPublisher->currentText().toStdString(), &pouEcu);
    if ( pouEcu != nullptr )
    {
        pouEcu->GetUniqueId(unEcuID);
        pFrame->MapNode(eTx, unEcuID);
        uidFrame = pFrame->GetUniqueId();
        pouEcu->MapFrame(eTx, uidFrame);
    }

    //4. Map Signals and Map RX frames TO ecu
    SignalInstanse ouSignalInstance;
    ISignal* pSignal = nullptr;
    std::list<IEcu*> ecuList;
    UID_ELEMENT uidSignal;
    for( unsigned int unIndex = 0; unIndex < ui.tableSignals->rowCount(); unIndex++)
    {
        //QTreeWidgetItem *treeItem = ui.treeSignals->topLevelItem(unIndex);
        uidSignal = ui.tableSignals->item(unIndex, 0)->data(Qt::UserRole).value<UID_ELEMENT>();
        m_pouLDFCluster->GetElement(eSignalElement, uidSignal,  (IElement**)&pSignal);

        ecuList.clear();
        if(nullptr != pSignal)
        {
            pSignal->GetEcus(eTx, ecuList);
        }

        //Ldf contains one Ecu so take First Ecu only;
        auto itrTxEcu =  ecuList.begin();
        if ( itrTxEcu != ecuList.end() )
        {
            UID_ELEMENT unTempEcuId = INVALID_UID_ELEMENT;
            (*itrTxEcu)->GetUniqueId(unTempEcuId);
            if ( unTempEcuId == unEcuID )
            {
                unsigned int unStartBit = GetUnsignedInt(ui.tableSignals->item(unIndex, 1)->text(), 10);
                ouSignalInstance.m_nStartBit =unStartBit;
                //ouSignalInstance.m_nStartBit = treeItem->text(1).toInt();
                pFrame->MapSignal(uidSignal, ouSignalInstance);
                ecuList.clear();
                if(nullptr != pSignal)
                {
                    pSignal->GetEcus(eRx, ecuList);
                }
for ( auto itrEcu : ecuList )
                {
                    itrEcu->MapFrame(eRx, uidFrame);
                }
            }
        }
    }
    //1. Set Frame Name
    pFrame->SetName(ui.editFrameName->text().toStdString());

    *m_pouFrame = pFrame;
}