580 lines
21 KiB
C++
580 lines
21 KiB
C++
#include "CANbusSettingsPage.h"
|
|
#include "ui_CANbusSettingsPage.h"
|
|
|
|
#include "CANDevice.h"
|
|
#include <QFileDialog>
|
|
#include <QFileInfo>
|
|
#include "SystemConfig.h"
|
|
#include "OtarcikCan.h"
|
|
|
|
|
|
CCANbusSettingsPage::CCANbusSettingsPage(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::CCANbusSettingsPage)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
mProgramPtr = 0;
|
|
mDevicesList = 0;
|
|
mCurModifiedDevConfig = 0;
|
|
mDeviceChangeModeEnabled = false;
|
|
|
|
ui->mDBSignalDetailsTable->setColumnCount(11);
|
|
ui->mDBSignalDetailsTable->setHorizontalHeaderLabels(QStringList() << "Signal" << "Bit No" << "Length" << "Type" << "Max Val" << "Min Val" << "Offset" << "Scale factor" << "Unit" << "Byte order" << "Comment");
|
|
|
|
ui->mDevicePollPeriodSpinBx->setRange(200,60000);
|
|
|
|
|
|
ui->mCANBaudrateComboBx->clear();
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_1M",QVariant(PCAN_BAUD_1M));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_800K",QVariant(PCAN_BAUD_800K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_500K",QVariant(PCAN_BAUD_500K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_250K",QVariant(PCAN_BAUD_250K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_125K",QVariant(PCAN_BAUD_125K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_100K",QVariant(PCAN_BAUD_100K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_95K",QVariant(PCAN_BAUD_95K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_83K",QVariant(PCAN_BAUD_83K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_50K",QVariant(PCAN_BAUD_50K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_47K",QVariant(PCAN_BAUD_47K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_33K",QVariant(PCAN_BAUD_33K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_20K",QVariant(PCAN_BAUD_20K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_10K",QVariant(PCAN_BAUD_10K));
|
|
ui->mCANBaudrateComboBx->addItem("PCAN_BAUD_5K",QVariant(PCAN_BAUD_5K));
|
|
|
|
|
|
/* ui->mCANIDComboBx->addItem("PCAN_USBBUS1",QVariant(PCAN_USBBUS1));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS2",QVariant(PCAN_USBBUS2));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS3",QVariant(PCAN_USBBUS3));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS4",QVariant(PCAN_USBBUS4));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS5",QVariant(PCAN_USBBUS5));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS6",QVariant(PCAN_USBBUS6));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS7",QVariant(PCAN_USBBUS7));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS8",QVariant(PCAN_USBBUS8));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS9",QVariant(PCAN_USBBUS9));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS10",QVariant(PCAN_USBBUS10));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS11",QVariant(PCAN_USBBUS11));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS12",QVariant(PCAN_USBBUS12));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS13",QVariant(PCAN_USBBUS13));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS14",QVariant(PCAN_USBBUS14));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS15",QVariant(PCAN_USBBUS15));
|
|
ui->mCANIDComboBx->addItem("PCAN_USBBUS16",QVariant(PCAN_USBBUS16));*/
|
|
|
|
|
|
ui->mDeviceDescriptionTxtEdit->setEnabled(false);
|
|
ui->mDatabaseFileSelectBtn->hide();
|
|
ui->mCANBaudrateComboBx->setEnabled(false);
|
|
//ui->mCANIDComboBx->setEnabled(false);
|
|
ui->mCANDeviceIDSpinBx->setValue(1);
|
|
ui->mCANDeviceIDSpinBx->setEnabled(false); //JFM 2023-06-02
|
|
ui->mDevicePollPeriodSpinBx->setEnabled(false);
|
|
ui->mCancelModifyParamsBtn->hide();
|
|
ui->mDeviceNameEditBx->setEnabled(false);
|
|
ui->mWatchdogPollPeriodSpinBx->setEnabled(false);
|
|
ui->mWatchdogMsgIDSpinBx->setEnabled(false);
|
|
ui->mCANDeviceWatchdogActivateChkBx->setEnabled(false);
|
|
|
|
|
|
connect(ui->mDevicesList,&QListWidget::itemSelectionChanged,this,&CCANbusSettingsPage::DeviceSelectionChanged);
|
|
connect(ui->mDBMessagesListWidget,&QListWidget::itemSelectionChanged,this,&CCANbusSettingsPage::MessageSelectionChanged);
|
|
connect(ui->mModifyDevParamsBtn,&QPushButton::clicked,this,&CCANbusSettingsPage::ModifyDeviceBtnPressed);
|
|
connect(ui->mCancelModifyParamsBtn,&QPushButton::clicked,this,&CCANbusSettingsPage::CancelModifyDevBtnPressed);
|
|
connect(ui->mDatabaseFileSelectBtn,&QPushButton::clicked,this,&CCANbusSettingsPage::SelectDBFileBtnPressed);
|
|
connect(ui->mAddDeviceBtn,&QPushButton::clicked,this,&CCANbusSettingsPage::AddDeviceBtnPressed);
|
|
connect(ui->mDeleteDeviceBtn,&QPushButton::clicked,this,&CCANbusSettingsPage::DeleteDeviceBtnPressed);
|
|
connect(ui->mCANDeviceWatchdogActivateChkBx,&QCheckBox::stateChanged,this,&CCANbusSettingsPage::WatchdogActivationBoxChanged);
|
|
|
|
|
|
}
|
|
|
|
CCANbusSettingsPage::~CCANbusSettingsPage()
|
|
{
|
|
while(!mDeviceConfigList.isEmpty())
|
|
{
|
|
delete mDeviceConfigList.takeFirst();
|
|
}
|
|
|
|
delete ui;
|
|
}
|
|
|
|
int CCANbusSettingsPage::SetDevicesList(QList<CCANDevice *> *DevicesList)
|
|
{
|
|
if(DevicesList == 0)
|
|
{
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
mDevicesList = DevicesList;
|
|
|
|
if(mDevicesList == 0)
|
|
{
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
ui->mDevicesList->clear();
|
|
for(int i = 0; i < mDevicesList->size(); i++)
|
|
{
|
|
QString name = mDevicesList->at(i)->mDeviceConfigInfo.mDeviceName;
|
|
if(name.isEmpty())
|
|
{
|
|
name = QString("Device %1").arg(i+1);
|
|
}
|
|
ui->mDevicesList->addItem(name);
|
|
}
|
|
ui->mDevicesList->setCurrentRow(0);
|
|
|
|
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
int CCANbusSettingsPage::ClearDatabaseData()
|
|
{
|
|
ui->mDBMessagesListWidget->clear();
|
|
return RET_OK;
|
|
}
|
|
|
|
int CCANbusSettingsPage::UpdatePage()
|
|
{
|
|
int index = ui->mDevicesList->currentRow();
|
|
|
|
if(index < 0 || index >= mDevicesList->size())
|
|
{
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
CCANDevice *Device = mDevicesList->at(index);
|
|
|
|
|
|
if(Device != 0)
|
|
{
|
|
CCANDeviceConfig *DevConfigInfo = &Device->mDeviceConfigInfo;
|
|
//Update device name in the list (it might have just changed)
|
|
ui->mDevicesList->item(ui->mDevicesList->currentRow())->setText(DevConfigInfo->mDeviceName);
|
|
//update device information
|
|
ui->mDeviceNameEditBx->setPlainText(DevConfigInfo->mDeviceName);
|
|
ui->mCANBaudrateComboBx->setCurrentIndex(ui->mCANBaudrateComboBx->findData(DevConfigInfo->mCANDeviceBaudrate));
|
|
|
|
//ui->mCANIDComboBx->setCurrentIndex(ui->mCANIDComboBx->findData(DevConfigInfo->mCANDeviceID)); //JFM 2023-06-02
|
|
ui->mCANDeviceIDSpinBx->setValue(DevConfigInfo->mCANDeviceID);
|
|
|
|
ui->mDeviceDescriptionTxtEdit->setPlainText(DevConfigInfo->mDeviceDescription);
|
|
|
|
QFileInfo FileInfo(DevConfigInfo->mCANDeviceDatabaseFilename);
|
|
ui->mDatabaseFileNameLbl->setText(FileInfo.fileName());
|
|
ui->mDatabaseFileNameLbl->setToolTip(DevConfigInfo->mCANDeviceDatabaseFilename);
|
|
// ui->mDatabaseFileNameLbl->setText(QString("%1").arg(Device->mCANDeviceDatabaseFilename));
|
|
|
|
ui->mDevicePollPeriodSpinBx->setValue(DevConfigInfo->mDevicePollPeriod);
|
|
|
|
if(DevConfigInfo->mDeviceWatchdogActivated == true)
|
|
{
|
|
disconnect(ui->mCANDeviceWatchdogActivateChkBx,&QCheckBox::stateChanged,this,&CCANbusSettingsPage::WatchdogActivationBoxChanged);
|
|
ui->mCANDeviceWatchdogActivateChkBx->setCheckState(Qt::Checked);
|
|
connect(ui->mCANDeviceWatchdogActivateChkBx,&QCheckBox::stateChanged,this,&CCANbusSettingsPage::WatchdogActivationBoxChanged);
|
|
ui->mWatchdogMsgIDSpinBx->setValue(DevConfigInfo->mWatchdogCANMsgID);
|
|
ui->mWatchdogPollPeriodSpinBx->setValue(DevConfigInfo->mWatchdogPeriod);
|
|
}
|
|
else
|
|
{
|
|
disconnect(ui->mCANDeviceWatchdogActivateChkBx,&QCheckBox::stateChanged,this,&CCANbusSettingsPage::WatchdogActivationBoxChanged);
|
|
ui->mCANDeviceWatchdogActivateChkBx->setCheckState(Qt::Unchecked);
|
|
connect(ui->mCANDeviceWatchdogActivateChkBx,&QCheckBox::stateChanged,this,&CCANbusSettingsPage::WatchdogActivationBoxChanged);
|
|
ui->mWatchdogMsgIDSpinBx->setValue(1);
|
|
ui->mWatchdogPollPeriodSpinBx->setValue(100);
|
|
}
|
|
|
|
//update device database information
|
|
ui->mDBMessagesListWidget->clear();
|
|
ui->mDBSignalDetailsTable->clearContents();
|
|
ui->mDBSignalDetailsTable->setRowCount(0);
|
|
if(Device->mMessageList.isEmpty())
|
|
{
|
|
ui->mDBMessagesListWidget->insertItem(0,"Aucun message");
|
|
ui->mDBMessageIDLbl->setText("Message ID: ");
|
|
ui->mDBMessageLengthLbl->setText("Message Length: ");
|
|
ui->mDBMessageNameLbl->setText("Message Name: ");
|
|
ui->mDBMessageNbSignalsLbl->setText("Number of signals: ");
|
|
ui->mDBMessageCommentLbl->setText("Comment: ");
|
|
}
|
|
else
|
|
{
|
|
ui->mDBMessagesListWidget->clear();
|
|
for(int msg = 0; msg < Device->mMessageList.size(); msg++)
|
|
{
|
|
ui->mDBMessagesListWidget->insertItem(msg,Device->mMessageList.at(msg)->mCANMsgName);
|
|
}
|
|
|
|
ui->mDBMessagesListWidget->setCurrentRow(0);
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
int CCANbusSettingsPage::UpdateMessageInformation()
|
|
{
|
|
int index = ui->mDevicesList->currentRow();
|
|
|
|
if(index < 0 || index >= mDevicesList->size())
|
|
{
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
CCANDevice *Device = mDevicesList->at(index);
|
|
|
|
|
|
if(Device != 0)
|
|
{
|
|
int MsgIndex = ui->mDBMessagesListWidget->currentRow();
|
|
|
|
if(MsgIndex < 0 || MsgIndex >= Device->mMessageList.size())
|
|
{
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
CCANMessage *Message = Device->mMessageList.at(MsgIndex);
|
|
|
|
ui->mDBMessageIDLbl->setText(QString("Message ID: 0x%1").arg(Message->mCANMsgID,0,16));
|
|
ui->mDBMessageLengthLbl->setText(QString("Message Length: %1").arg(Message->mCANMsgLength));
|
|
ui->mDBMessageNameLbl->setText(QString("Message Name: %1").arg(Message->mCANMsgName));
|
|
ui->mDBMessageNbSignalsLbl->setText(QString("Number of signals: %1").arg(Message->mSignalsList.size()));
|
|
ui->mDBMessageCommentLbl->setText(QString("Comment: %1").arg(Message->mCANMsgComment));
|
|
|
|
ui->mDBSignalDetailsTable->clearContents();
|
|
ui->mDBSignalDetailsTable->setRowCount(0);
|
|
|
|
ui->mDBSignalDetailsTable->setRowCount(Message->mSignalsList.size());
|
|
for(int Sig = 0; Sig < Message->mSignalsList.size(); Sig++)
|
|
{
|
|
CCANSignal Signal = Message->mSignalsList.at(Sig);
|
|
QTableWidgetItem *NewItem;
|
|
|
|
//Signal name
|
|
NewItem = new QTableWidgetItem(Signal.mSignalName);
|
|
ui->mDBSignalDetailsTable->setItem(Sig,0,NewItem);
|
|
|
|
//Bit No
|
|
NewItem = new QTableWidgetItem(QString("%1").arg(Signal.mStartBit));
|
|
ui->mDBSignalDetailsTable->setItem(Sig,1,NewItem);
|
|
|
|
//Length
|
|
NewItem = new QTableWidgetItem(QString("%1").arg(Signal.mSignalSize));
|
|
ui->mDBSignalDetailsTable->setItem(Sig,2,NewItem);
|
|
|
|
//Type
|
|
switch(Signal.mValueType)
|
|
{
|
|
case CCANSignal::CAN_SIGNAL_TYPE_INVALID:
|
|
{
|
|
NewItem = new QTableWidgetItem(QString("INVALIDE"));
|
|
break;
|
|
}
|
|
case CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT:
|
|
{
|
|
NewItem = new QTableWidgetItem(QString("int"));
|
|
break;
|
|
}
|
|
case CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT:
|
|
{
|
|
NewItem = new QTableWidgetItem(QString("uint"));
|
|
break;
|
|
}
|
|
case CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT:
|
|
{
|
|
NewItem = new QTableWidgetItem(QString("Float_32"));
|
|
break;
|
|
}
|
|
case CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE:
|
|
{
|
|
NewItem = new QTableWidgetItem(QString("Double"));
|
|
break;
|
|
}
|
|
}
|
|
ui->mDBSignalDetailsTable->setItem(Sig,3,NewItem);
|
|
|
|
//Max Val
|
|
NewItem = new QTableWidgetItem(QString("%1").arg(Signal.mMaxValue));
|
|
ui->mDBSignalDetailsTable->setItem(Sig,4,NewItem);
|
|
|
|
//Min Val
|
|
NewItem = new QTableWidgetItem(QString("%1").arg(Signal.mMinValue));
|
|
ui->mDBSignalDetailsTable->setItem(Sig,5,NewItem);
|
|
|
|
//Offset
|
|
NewItem = new QTableWidgetItem(QString("%1").arg(Signal.mValueOffset));
|
|
ui->mDBSignalDetailsTable->setItem(Sig,6,NewItem);
|
|
|
|
//Scale Factor
|
|
NewItem = new QTableWidgetItem(QString("%1").arg(Signal.mValueFactor,0,'f',1));
|
|
ui->mDBSignalDetailsTable->setItem(Sig,7,NewItem);
|
|
|
|
//Unit
|
|
NewItem = new QTableWidgetItem(Signal.mSignalUnit);
|
|
ui->mDBSignalDetailsTable->setItem(Sig,8,NewItem);
|
|
|
|
//Endian
|
|
switch(Signal.mEncoding)
|
|
{
|
|
case CCANSignal::CAN_SIGNAL_ENCODING_INTEL:
|
|
{
|
|
NewItem = new QTableWidgetItem(QString("Intel"));
|
|
break;
|
|
}
|
|
case CCANSignal::CAN_SIGNAL_ENCODING_MOTOROLA:
|
|
{
|
|
NewItem = new QTableWidgetItem(QString("Motorola"));
|
|
break;
|
|
}
|
|
case CCANSignal::CAN_SIGNAL_ENCODING_INVALID:
|
|
{
|
|
NewItem = new QTableWidgetItem(QString("INVALID"));
|
|
break;
|
|
}
|
|
}
|
|
|
|
ui->mDBSignalDetailsTable->setItem(Sig,9,NewItem);
|
|
|
|
//Comment
|
|
NewItem = new QTableWidgetItem(Signal.mSignalComment);
|
|
ui->mDBSignalDetailsTable->setItem(Sig,10,NewItem);
|
|
|
|
}
|
|
ui->mDBSignalDetailsTable->resizeColumnsToContents();
|
|
}
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
void CCANbusSettingsPage::DeviceSelectionChanged()
|
|
{
|
|
UpdatePage();
|
|
}
|
|
|
|
void CCANbusSettingsPage::SignalSelectionChanged()
|
|
{
|
|
|
|
}
|
|
|
|
void CCANbusSettingsPage::MessageSelectionChanged()
|
|
{
|
|
UpdateMessageInformation();
|
|
}
|
|
void CCANbusSettingsPage::ModifyDeviceBtnPressed()
|
|
{
|
|
if(mDeviceChangeModeEnabled == false)
|
|
{
|
|
//Populate the devices config list with present devices
|
|
PopulateDevicesConfigList();
|
|
|
|
//Find the selected device index
|
|
int index = ui->mDevicesList->currentRow();
|
|
if(index >=0 && index < mDeviceConfigList.size())
|
|
{
|
|
mCurModifiedDevConfig = mDeviceConfigList.at(index);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
ModifyDeviceConfig();
|
|
}
|
|
|
|
int CCANbusSettingsPage::ModifyDeviceConfig()
|
|
{
|
|
if(mDeviceChangeModeEnabled)
|
|
{
|
|
//Save Data
|
|
if(mCurModifiedDevConfig != 0)
|
|
{
|
|
CCANDeviceConfig *ModifiedDevice = mCurModifiedDevConfig; //mDeviceConfigList.at(index);
|
|
|
|
ModifiedDevice->mCANDeviceBaudrate = ui->mCANBaudrateComboBx->currentData().toInt();
|
|
|
|
ModifiedDevice->mCANDeviceID = ui->mCANIDComboBx->currentData().toInt();
|
|
ModifiedDevice->mCANDeviceID = ui->mCANDeviceIDSpinBx->value(); //JFM 2023-06-02
|
|
|
|
ModifiedDevice->mCANDeviceDatabaseFilename = ui->mDatabaseFileNameLbl->toolTip(); //The full path is stored in the tooltip!
|
|
ModifiedDevice->mDeviceDescription = ui->mDeviceDescriptionTxtEdit->toPlainText();
|
|
ModifiedDevice->mDeviceName = ui->mDeviceNameEditBx->toPlainText();
|
|
ModifiedDevice->mDevicePollPeriod = ui->mDevicePollPeriodSpinBx->value();
|
|
ModifiedDevice->mDeviceWatchdogActivated = ui->mCANDeviceWatchdogActivateChkBx->isChecked();
|
|
ModifiedDevice->mWatchdogCANMsgID = ui->mWatchdogMsgIDSpinBx->value();
|
|
ModifiedDevice->mWatchdogPeriod = ui->mWatchdogPollPeriodSpinBx->value();
|
|
|
|
mProgramPtr->SaveCANDevicesConfigRequest(&mDeviceConfigList);
|
|
}
|
|
|
|
|
|
|
|
ui->mDeviceDescriptionTxtEdit->setEnabled(false);
|
|
ui->mDatabaseFileSelectBtn->hide();
|
|
ui->mCANBaudrateComboBx->setEnabled(false);
|
|
// ui->mCANIDComboBx->setEnabled(false); //JFM 2023-06-02
|
|
ui->mCANDeviceIDSpinBx->setEnabled(false);
|
|
ui->mDevicesList->setEnabled(true);
|
|
ui->mDevicePollPeriodSpinBx->setEnabled(false);
|
|
ui->mModifyDevParamsBtn->setText("Modifier");
|
|
ui->mCancelModifyParamsBtn->hide();
|
|
ui->mDeviceNameEditBx->setEnabled(false);
|
|
mDeviceChangeModeEnabled = false;
|
|
ui->mWatchdogPollPeriodSpinBx->setEnabled(false);
|
|
ui->mWatchdogMsgIDSpinBx->setEnabled(false);
|
|
ui->mCANDeviceWatchdogActivateChkBx->setEnabled(false);
|
|
ui->mAddDeviceBtn->setEnabled(true);
|
|
|
|
|
|
|
|
}
|
|
else
|
|
{
|
|
|
|
//Modify data
|
|
ui->mDeviceDescriptionTxtEdit->setEnabled(true);
|
|
ui->mDatabaseFileSelectBtn->show();
|
|
ui->mCANBaudrateComboBx->setEnabled(true);
|
|
// ui->mCANIDComboBx->setEnabled(true); //JFM 2023-06-02
|
|
ui->mCANDeviceIDSpinBx->setEnabled(true);
|
|
|
|
ui->mDevicesList->setEnabled(false);
|
|
ui->mDevicePollPeriodSpinBx->setEnabled(true);
|
|
ui->mModifyDevParamsBtn->setText("Sauvegarder");
|
|
ui->mCancelModifyParamsBtn->show();
|
|
ui->mDeviceNameEditBx->setEnabled(true);
|
|
ui->mAddDeviceBtn->setEnabled(true);
|
|
ui->mCANDeviceWatchdogActivateChkBx->setEnabled(true);
|
|
if(ui->mCANDeviceWatchdogActivateChkBx->isChecked())
|
|
{
|
|
ui->mWatchdogPollPeriodSpinBx->setEnabled(true);
|
|
ui->mWatchdogMsgIDSpinBx->setEnabled(true);
|
|
}
|
|
|
|
|
|
mDeviceChangeModeEnabled = true;
|
|
}
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
void CCANbusSettingsPage::CancelModifyDevBtnPressed()
|
|
{
|
|
ui->mDeviceDescriptionTxtEdit->setEnabled(false);
|
|
ui->mDatabaseFileSelectBtn->hide();
|
|
ui->mCANBaudrateComboBx->setEnabled(false);
|
|
//ui->mCANIDComboBx->setEnabled(false);
|
|
ui->mCANDeviceIDSpinBx->setEnabled(false);
|
|
|
|
ui->mDevicesList->setEnabled(true);
|
|
ui->mDevicePollPeriodSpinBx->setEnabled(false);
|
|
ui->mModifyDevParamsBtn->setText("Modifier");
|
|
ui->mCancelModifyParamsBtn->hide();
|
|
ui->mDeviceNameEditBx->setEnabled(false);
|
|
ui->mAddDeviceBtn->setEnabled(true);
|
|
ui->mWatchdogPollPeriodSpinBx->setEnabled(false);
|
|
ui->mWatchdogMsgIDSpinBx->setEnabled(false);
|
|
ui->mCANDeviceWatchdogActivateChkBx->setEnabled(false);
|
|
mDeviceChangeModeEnabled = false;
|
|
|
|
UpdatePage();
|
|
|
|
}
|
|
|
|
void CCANbusSettingsPage::SelectDBFileBtnPressed()
|
|
{
|
|
QString FileName;
|
|
FileName = QFileDialog::getOpenFileName(this,tr("Fichier database"), "./", tr("Fichiers dbc (*.dbc)"));
|
|
|
|
if(!FileName.isEmpty())
|
|
{
|
|
QFileInfo FileInfo(FileName);
|
|
|
|
ui->mDatabaseFileNameLbl->setText(FileInfo.fileName());
|
|
ui->mDatabaseFileNameLbl->setToolTip(FileName);
|
|
}
|
|
|
|
}
|
|
|
|
void CCANbusSettingsPage::AddDeviceBtnPressed()
|
|
{
|
|
//Populate the devices config list with present devices
|
|
PopulateDevicesConfigList();
|
|
//add an empty config and enable modification
|
|
CCANDeviceConfig *NewDevConfig = new CCANDeviceConfig;
|
|
mDeviceConfigList.append(NewDevConfig);
|
|
//update device information
|
|
ui->mDeviceNameEditBx->setPlainText(NewDevConfig->mDeviceName);
|
|
ui->mCANBaudrateComboBx->setCurrentIndex(ui->mCANBaudrateComboBx->findData(NewDevConfig->mCANDeviceBaudrate));
|
|
|
|
ui->mCANIDComboBx->setCurrentIndex(ui->mCANIDComboBx->findData(NewDevConfig->mCANDeviceID)); //JFM 2023-06-02
|
|
ui->mCANDeviceIDSpinBx->setValue(NewDevConfig->mCANDeviceID);
|
|
|
|
ui->mDeviceDescriptionTxtEdit->setPlainText(NewDevConfig->mDeviceDescription);
|
|
ui->mDatabaseFileNameLbl->setText(NewDevConfig->mCANDeviceDatabaseFilename);
|
|
ui->mDatabaseFileNameLbl->setToolTip(NewDevConfig->mCANDeviceDatabaseFilename);
|
|
|
|
ui->mDevicePollPeriodSpinBx->setValue(NewDevConfig->mDevicePollPeriod);
|
|
//update device database information
|
|
ui->mDBMessagesListWidget->clear();
|
|
ui->mDBSignalDetailsTable->clearContents();
|
|
ui->mDBSignalDetailsTable->setRowCount(0);
|
|
|
|
mCurModifiedDevConfig = NewDevConfig;
|
|
ModifyDeviceConfig();
|
|
|
|
ui->mAddDeviceBtn->setEnabled(false);
|
|
}
|
|
|
|
void CCANbusSettingsPage::DeleteDeviceBtnPressed()
|
|
{
|
|
|
|
//Populate the devices config list with present devices
|
|
PopulateDevicesConfigList();
|
|
|
|
//Find the selected device index
|
|
int index = ui->mDevicesList->currentRow();
|
|
if(index >=0 && index < mDeviceConfigList.size())
|
|
{
|
|
delete mDeviceConfigList.takeAt(index);
|
|
}
|
|
mProgramPtr->SaveCANDevicesConfigRequest(&mDeviceConfigList);
|
|
|
|
}
|
|
|
|
int CCANbusSettingsPage::PopulateDevicesConfigList()
|
|
{
|
|
while(!mDeviceConfigList.isEmpty())
|
|
{
|
|
delete mDeviceConfigList.takeFirst();
|
|
}
|
|
|
|
//Gather the actual data in the change buffer.
|
|
for(int device = 0; device < mDevicesList->size(); device++)
|
|
{
|
|
const CCANDevice *CurDevice = mDevicesList->at(device);
|
|
CCANDeviceConfig *DevConfig = new CCANDeviceConfig;
|
|
*DevConfig = CurDevice->mDeviceConfigInfo;
|
|
mDeviceConfigList.append(DevConfig);
|
|
}
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
void CCANbusSettingsPage::WatchdogActivationBoxChanged()
|
|
{
|
|
if(ui->mCANDeviceWatchdogActivateChkBx->isChecked())
|
|
{
|
|
ui->mWatchdogMsgIDSpinBx->setEnabled(true);
|
|
ui->mWatchdogPollPeriodSpinBx->setEnabled(true);
|
|
}
|
|
else
|
|
{
|
|
ui->mWatchdogMsgIDSpinBx->setValue(1);
|
|
ui->mWatchdogPollPeriodSpinBx->setValue(100);
|
|
ui->mWatchdogMsgIDSpinBx->setEnabled(false);
|
|
ui->mWatchdogPollPeriodSpinBx->setEnabled(false);
|
|
}
|
|
}
|