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); } } }
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; }
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; }
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; }
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; }