Corrections et développement. V1.01

This commit is contained in:
2023-06-17 12:58:06 -04:00
parent 428cec7c29
commit abc91f1932
37 changed files with 850 additions and 13378 deletions
+105 -84
View File
@@ -1,6 +1,9 @@
#include "CANViewerPage.h"
#include "ui_CANViewerPage.h"
#include "defines.h"
#include "CANDevice.h"
#include "MQTTMessage.h"
#include <QClipboard>
CCANViewerPage::CCANViewerPage(QWidget *parent) :
QWidget(parent),
@@ -21,10 +24,8 @@ CCANViewerPage::CCANViewerPage(QWidget *parent) :
ui->mCANSignalTableWidget->setColumnCount(4);
ui->mCANSignalTableWidget->setHorizontalHeaderLabels(QStringList() << "Nom du signal" << "Val. physique" << "Val. brute" << "Unités");
connect(ui->mCANDataTableWidget,&QTableWidget::itemSelectionChanged,this,&CCANViewerPage::MessageSelectionChanged);
connect(ui->mCopyJSonToClipboardBtn,&QPushButton::pressed,this,&CCANViewerPage::CopyJSONToClipboardButtonPressed);
}
CCANViewerPage::~CCANViewerPage()
@@ -32,60 +33,54 @@ CCANViewerPage::~CCANViewerPage()
delete ui;
}
int CCANViewerPage::InitCANTable(QList<CCANMessage *> *MsgList, QString DeviceName)
int CCANViewerPage::InitCANTable(QList<CCANDevice *> *CANDevicesList)
{
if(MsgList == 0)
//if(MsgList == 0)
if(CANDevicesList == 0)
{
return RET_GENERAL_ERROR;
}
mMsgList.append(MsgList);
ResetPage();
int row = ui->mCANDataTableWidget->rowCount();
ui->mCANDataTableWidget->setRowCount(MsgList->size() + row);
for(int Msg = 0; Msg < MsgList->size(); Msg++)
mCANDevicesList = CANDevicesList;
for(int Dev = 0; Dev < mCANDevicesList->size(); Dev++)
{
QTableWidgetItem *NewItem;
QList<CCANMessage *> *MsgList = mCANDevicesList->at(Dev)->GetCANMessagesList();
NewItem = new QTableWidgetItem(DeviceName);
ui->mCANDataTableWidget->setItem(row,0,NewItem);
int row = ui->mCANDataTableWidget->rowCount();
ui->mCANDataTableWidget->setRowCount(MsgList->size() + row);
for(int Msg = 0; Msg < MsgList->size(); Msg++)
{
QTableWidgetItem *NewItem;
//Set Msg name
NewItem = new QTableWidgetItem(QString("%1").arg(MsgList->at(Msg)->mCANMsgName));
ui->mCANDataTableWidget->setItem(row,1,NewItem);
NewItem = new QTableWidgetItem(mCANDevicesList->at(Dev)->mDeviceConfigInfo.mDeviceName);
ui->mCANDataTableWidget->setItem(row,0,NewItem);
//Set message ID value
NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgID,0,16));
ui->mCANDataTableWidget->setItem(row,2,NewItem);
NewItem->setData(Qt::UserRole,MsgList->at(Msg)->mCANMsgID); //Set message ID as reference to easily find the row when updating...
//Set Msg name
NewItem = new QTableWidgetItem(QString("%1").arg(MsgList->at(Msg)->mCANMsgName));
ui->mCANDataTableWidget->setItem(row,1,NewItem);
//Set message type value
NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgType,0,16));
ui->mCANDataTableWidget->setItem(row,3,NewItem);
//Set message ID value
NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgID,0,16));
ui->mCANDataTableWidget->setItem(row,2,NewItem);
NewItem->setData(Qt::UserRole,MsgList->at(Msg)->mCANMsgID); //Set message ID as reference to easily find the row when updating...
//Set message length value
NewItem = new QTableWidgetItem(QString(" "));
ui->mCANDataTableWidget->setItem(row,4,NewItem);
//Set message type value
NewItem = new QTableWidgetItem(QString("0x%1").arg(MsgList->at(Msg)->mCANMsgType,0,16));
ui->mCANDataTableWidget->setItem(row,3,NewItem);
NewItem = new QTableWidgetItem(QString(" "));
ui->mCANDataTableWidget->setItem(row,5,NewItem);
//Set message length value
NewItem = new QTableWidgetItem(QString(" "));
ui->mCANDataTableWidget->setItem(row,4,NewItem);
row++;
NewItem = new QTableWidgetItem(QString(" "));
ui->mCANDataTableWidget->setItem(row,5,NewItem);
// //Set data value
// QString Data;
// for(unsigned int i = 0; i < MsgList->at(Msg)->mCANMsgLength; i++)
// {
// unsigned char DataByte = MsgList->at(Msg)->mCANMsgData.at(i);
// Data.append(QString("%1 ").arg(DataByte,2,16,QLatin1Char('0')));
// }
// NewItem = new QTableWidgetItem(Data);
// ui->mCANDataTableWidget->setItem(Msg,5,NewItem);
row++;
}
}
// ui->mCANSignalTableWidget->setCurrentItem(ui->mCANDataTableWidget->item(0,0));
// MessageSelectionChanged();
return RET_OK;
}
@@ -124,75 +119,94 @@ int CCANViewerPage::UpdateCANTable(QList<CCANMessage *> *MsgList)
void CCANViewerPage::MessageSelectionChanged()
{
// if(mMsgList == 0)
// {
// return;
// }
if(mMsgList.isEmpty())
if(mCANDevicesList->isEmpty())
{
return;
}
ui->mCANSignalTableWidget->clearContents();
//Find message based on current table selection
int row = ui->mCANDataTableWidget->currentRow();
if(row == -1)
return;
for(int MsgList = 0; MsgList < mMsgList.size(); MsgList++)
for(int Dev = 0; Dev < mCANDevicesList->size(); Dev++)
{
for (int msg = 0; msg < mMsgList.at(MsgList)->size(); msg++)
QString DeviceName = ui->mCANDataTableWidget->item(row,0)->text();
if(mCANDevicesList->at(Dev)->mDeviceConfigInfo.mDeviceName == DeviceName) //Find the device corresponding to the selected line
{
unsigned int ID = ui->mCANDataTableWidget->item(row,2)->data(Qt::UserRole).toUInt();
QString Device = ui->mCANDataTableWidget->item(row,0)->text();
if(Device == mMsgList.at(MsgList)->at(msg)->mOwnerDeviceName &&
ID == mMsgList.at(MsgList)->at(msg)->mCANMsgID)
QList<CCANMessage *> *MsgList = mCANDevicesList->at(Dev)->GetCANMessagesList();
for (int msg = 0; msg < MsgList->size(); msg++)
{
CCANMessage *Msg = mMsgList.at(MsgList)->at(msg);
ui->mCANSignalTableWidget->clearContents();
ui->mCANSignalTableWidget->setRowCount(Msg->mSignalsList.size());
unsigned int ID = ui->mCANDataTableWidget->item(row,2)->data(Qt::UserRole).toUInt();
for(int signal = 0; signal < Msg->mSignalsList.size(); signal++)
if(ID == MsgList->at(msg)->mCANMsgID) //Find the message in the list corresponding to the selected line
{
//Signal name
QTableWidgetItem *NewItem = new QTableWidgetItem(Msg->mSignalsList.at(signal).mSignalName);
ui->mCANSignalTableWidget->setItem(signal,0,NewItem);
CCANMessage *Msg = MsgList->at(msg);
ui->mCANSignalTableWidget->clearContents();
ui->mCANSignalTableWidget->setRowCount(Msg->mSignalsList.size());
//Phys value
for(int signal = 0; signal < Msg->mSignalsList.size(); signal++)
{
//Signal name
QTableWidgetItem *NewItem = new QTableWidgetItem(Msg->mSignalsList.at(signal).mSignalName);
ui->mCANSignalTableWidget->setItem(signal,0,NewItem);
//JFM 2023-06-13 changé pour forcer toujours à float
NewItem = new QTableWidgetItem(QString("%1").arg(Msg->mSignalsList.at(signal).mPhysicalValue,0,'f',1));
//Phys value
#ifdef FORCE_FLOAT_REPRESENTATION
//JFM 2023-06-13 changé pour forcer toujours à float
NewItem = new QTableWidgetItem(QString("%1").arg(Msg->mSignalsList.at(signal).mPhysicalValue,0,'f',1));
#else
if(Msg->mSignalsList.at(signal).mValueType == CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT)
{
NewItem = new QTableWidgetItem(QString("%1").arg((quint64)Msg->mSignalsList.at(signal).mPhysicalValue));
}
else if(Msg->mSignalsList.at(signal).mValueType == CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT)
{
/*
if(Msg->mSignalsList.at(signal).mValueType == CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT)
{
NewItem = new QTableWidgetItem(QString("%1").arg((quint64)Msg->mSignalsList.at(signal).mPhysicalValue));
}
else if(Msg->mSignalsList.at(signal).mValueType == CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT)
{
NewItem = new QTableWidgetItem(QString("%1").arg((qint64)Msg->mSignalsList.at(signal).mPhysicalValue));
}
else if(Msg->mSignalsList.at(signal).mValueType == CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT ||
Msg->mSignalsList.at(signal).mValueType == CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE)
{
NewItem = new QTableWidgetItem(QString("%1").arg(Msg->mSignalsList.at(signal).mPhysicalValue,0,'f',1));
}
#endif
ui->mCANSignalTableWidget->setItem(signal,1,NewItem);
NewItem = new QTableWidgetItem(QString("%1").arg((qint64)Msg->mSignalsList.at(signal).mPhysicalValue));
}
else if(Msg->mSignalsList.at(signal).mValueType == CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT ||
Msg->mSignalsList.at(signal).mValueType == CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE)
{
NewItem = new QTableWidgetItem(QString("%1").arg(Msg->mSignalsList.at(signal).mPhysicalValue,0,'f',1));
}*/
ui->mCANSignalTableWidget->setItem(signal,1,NewItem);
//Raw value
NewItem = new QTableWidgetItem(QString("0x%1").arg(Msg->mSignalsList.at(signal).mRawValue,0,16));
ui->mCANSignalTableWidget->setItem(signal,2,NewItem);
//Raw value
NewItem = new QTableWidgetItem(QString("0x%1").arg(Msg->mSignalsList.at(signal).mRawValue,0,16));
ui->mCANSignalTableWidget->setItem(signal,2,NewItem);
//Units
NewItem = new QTableWidgetItem(Msg->mSignalsList.at(signal).mSignalUnit);
ui->mCANSignalTableWidget->setItem(signal,3,NewItem);
//Units
NewItem = new QTableWidgetItem(Msg->mSignalsList.at(signal).mSignalUnit);
ui->mCANSignalTableWidget->setItem(signal,3,NewItem);
}
ui->mJSonSignalViewTxtEdit->clear();
CMQTTMessage MQTTMsg = mCANDevicesList->at(Dev)->mCANDataLogger.GetMQTTMessage(Msg,true);
QString MQTTMsgDisplay = QString("Topic: %1\n\nPayload:\n%2").arg(MQTTMsg.mMessageTopic).arg(MQTTMsg.mMessagePayload);
ui->mJSonSignalViewTxtEdit->insertPlainText(MQTTMsgDisplay);
}
}
}
}
}
int CCANViewerPage::ResetPage()
{
ui->mCANDataTableWidget->clearContents();
ui->mCANDataTableWidget->setRowCount(0);
ui->mCANSignalTableWidget->clearContents();
ui->mCANSignalTableWidget->setRowCount(0);
return RET_OK;
}
int CCANViewerPage::UpdateSignalsTable()
@@ -245,3 +259,10 @@ int CCANViewerPage::UpdateSignalsTable()
return RET_OK;
}
void CCANViewerPage::CopyJSONToClipboardButtonPressed()
{
// QApplication::clipboard()->setText(ui->mJSonSignalViewTxtEdit->);
ui->mJSonSignalViewTxtEdit->selectAll();
ui->mJSonSignalViewTxtEdit->copy();
}
+17 -3
View File
@@ -5,10 +5,20 @@
#include "CANMessage.h"
#include <QList>
class CCANDevice;
namespace Ui {
class CCANViewerPage;
}
class CCANViewerInfoStructure
{
public:
QList<CCANMessage *> *mMsgList;
CCANDevice *mCANDevice;
};
class CCANViewerPage : public QWidget
{
Q_OBJECT
@@ -19,17 +29,21 @@ public:
int UpdateCANTable(QList<CCANMessage*> *MsgList);
int InitCANTable(QList<CCANMessage*> *MsgList, QString DeviceName);
int InitCANTable(QList<CCANDevice*> *CANDevicesList);
int UpdateSignalsTable();
int ResetPage();
QList<QList<CCANMessage *>*> mMsgList;
QList<CCANViewerInfoStructure> mCANDataStructureList;
QList<CCANDevice*> *mCANDevicesList;
public slots:
void MessageSelectionChanged();
void CopyJSONToClipboardButtonPressed();
private:
Ui::CCANViewerPage *ui;
};
#endif // CANVIEWERPAGE_H
@@ -18,11 +18,15 @@ CLoggingSettingsPage::CLoggingSettingsPage(QWidget *parent) :
ui->mCloudMQTTTopicPrefixEdit->setEnabled(false);
ui->mCloudMQTTUserNameEdit->setEnabled(false);
ui->mCloudMQTTRefreshRateSpinBx->setEnabled(false);
ui->mCloudMQTTClientID->setEnabled(false);
connect(ui->mCancelBtn,&QPushButton::clicked,this,&CLoggingSettingsPage::CancelBtnPressed);
connect(ui->mChangeParamsBtn,&QPushButton::clicked,this,&CLoggingSettingsPage::ModifyParamsBtnPressed);
connect(ui->mLogZoneVerbositySpinBx,QOverload<int>::of(&QSpinBox::valueChanged),this,&CLoggingSettingsPage::VerbosityParamsChanged);
connect(ui->mLogFileVerbositySpinBx,QOverload<int>::of(&QSpinBox::valueChanged),this,&CLoggingSettingsPage::VerbosityParamsChanged);
}
CLoggingSettingsPage::~CLoggingSettingsPage()
@@ -39,7 +43,21 @@ int CLoggingSettingsPage::SetCloudParams(const CCloudParams *CloudParams)
mCloudParams = *CloudParams;
UpdateConfigPage();
UpdateCloudConfig();
return RET_OK;
}
int CLoggingSettingsPage::SetGeneralSettingsParams(const CGeneralSystemParams *GeneralParams)
{
if(GeneralParams == 0)
{
return RET_GENERAL_ERROR;
}
mGeneralSystemParams = *GeneralParams;
UpdateGeneralParams();
return RET_OK;
}
@@ -55,6 +73,7 @@ void CLoggingSettingsPage::ModifyParamsBtnPressed()
ui->mCloudMQTTTopicPrefixEdit->setEnabled(true);
ui->mCloudMQTTUserNameEdit->setEnabled(true);
ui->mCloudMQTTRefreshRateSpinBx->setEnabled(true);
ui->mCloudMQTTClientID->setEnabled(true);
ui->mChangeParamsBtn->setText("Appliquer");
}
else
@@ -68,14 +87,21 @@ void CLoggingSettingsPage::ModifyParamsBtnPressed()
ui->mCloudMQTTTopicPrefixEdit->setEnabled(false);
ui->mCloudMQTTUserNameEdit->setEnabled(false);
ui->mCloudMQTTRefreshRateSpinBx->setEnabled(false);
ui->mCloudMQTTClientID->setEnabled(false);
mCloudParams.mMQTTBrokerHostName = ui->mCloudMQTTHostNameEdit->text();
mCloudParams.mMQTTBrokerPassword = ui->mCloudMQTTPasswordEdit->text();
mCloudParams.mMQTTBrokerPort = (quint32)ui->mCloudMQTTPortSpinBx->value();
mCloudParams.mMQTTTopicPrefix = ui->mCloudMQTTTopicPrefixEdit->text();
if(mCloudParams.mMQTTTopicPrefix.endsWith("/") == false)
{
mCloudParams.mMQTTTopicPrefix.append("/");
ui->mCloudMQTTTopicPrefixEdit->setText(mCloudParams.mMQTTTopicPrefix);
}
mCloudParams.mMQTTBrokerUserName = ui->mCloudMQTTUserNameEdit->text();
mCloudParams.mMQTTTransmitTimeout = (quint32)ui->mCloudMQTTRefreshRateSpinBx->value();
mCloudParams.mMQTTClientID = ui->mCloudMQTTClientID->text();
mProgramHandle->SaveCloudLoggingConfigRequest(&mCloudParams);
@@ -92,11 +118,12 @@ void CLoggingSettingsPage::CancelBtnPressed()
ui->mCloudMQTTTopicPrefixEdit->setEnabled(false);
ui->mCloudMQTTUserNameEdit->setEnabled(false);
ui->mCloudMQTTRefreshRateSpinBx->setEnabled(false);
ui->mCloudMQTTClientID->setEnabled(false);
UpdateConfigPage();
UpdateCloudConfig();
}
int CLoggingSettingsPage::UpdateConfigPage()
int CLoggingSettingsPage::UpdateCloudConfig()
{
ui->mCloudMQTTHostNameEdit->setText(mCloudParams.mMQTTBrokerHostName);
ui->mCloudMQTTPasswordEdit->setText(mCloudParams.mMQTTBrokerPassword);
@@ -104,6 +131,34 @@ int CLoggingSettingsPage::UpdateConfigPage()
ui->mCloudMQTTTopicPrefixEdit->setText(mCloudParams.mMQTTTopicPrefix);
ui->mCloudMQTTUserNameEdit->setText(mCloudParams.mMQTTBrokerUserName);
ui->mCloudMQTTRefreshRateSpinBx->setValue(mCloudParams.mMQTTTransmitTimeout);
ui->mCloudMQTTClientID->setText(mCloudParams.mMQTTClientID);
return RET_OK;
}
int CLoggingSettingsPage::UpdateGeneralParams()
{
disconnect(ui->mLogZoneVerbositySpinBx,QOverload<int>::of(&QSpinBox::valueChanged),this,&CLoggingSettingsPage::VerbosityParamsChanged);
disconnect(ui->mLogFileVerbositySpinBx,QOverload<int>::of(&QSpinBox::valueChanged),this,&CLoggingSettingsPage::VerbosityParamsChanged);
ui->mLogFileVerbositySpinBx->setValue(mGeneralSystemParams.mLogFileVerbosity);
ui->mLogZoneVerbositySpinBx->setValue(mGeneralSystemParams.mLocalLogVerbosity);
connect(ui->mLogZoneVerbositySpinBx,QOverload<int>::of(&QSpinBox::valueChanged),this,&CLoggingSettingsPage::VerbosityParamsChanged);
connect(ui->mLogFileVerbositySpinBx,QOverload<int>::of(&QSpinBox::valueChanged),this,&CLoggingSettingsPage::VerbosityParamsChanged);
return RET_OK;
}
void CLoggingSettingsPage::VerbosityParamsChanged(int value)
{
Q_UNUSED(value)
mGeneralSystemParams.mLocalLogVerbosity = ui->mLogZoneVerbositySpinBx->value();
mGeneralSystemParams.mLogFileVerbosity = ui->mLogFileVerbositySpinBx->value();
mProgramHandle->SaveGeneralParametersSettingsRequest(&mGeneralSystemParams);
qDebug("LogZone: %i, LogFile %i",mGeneralSystemParams.mLocalLogVerbosity,mGeneralSystemParams.mLogFileVerbosity);
}
@@ -3,6 +3,7 @@
#include <QWidget>
#include "CloudParams.h"
#include "GeneralSystemParams.h"
class COtarcikCan;
@@ -20,24 +21,28 @@ public:
~CLoggingSettingsPage();
int SetCloudParams(const CCloudParams *CloudParams);
int SetGeneralSettingsParams(const CGeneralSystemParams *GeneralParams);
COtarcikCan *mProgramHandle;
private:
int UpdateConfigPage();
int UpdateCloudConfig();
int UpdateGeneralParams();
Ui::CLoggingSettingsPage *ui;
bool EditMode;
CCloudParams mCloudParams;
CGeneralSystemParams mGeneralSystemParams;
public slots:
void ModifyParamsBtnPressed();
void CancelBtnPressed();
void VerbosityParamsChanged(int value);
};
+109 -17
View File
@@ -204,7 +204,7 @@
</rect>
</property>
</widget>
<widget class="QLabel" name="mCloudMQTTClientID">
<widget class="QLabel" name="mCloudMQTTClientIDLbl">
<property name="geometry">
<rect>
<x>10</x>
@@ -225,7 +225,7 @@
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
<widget class="QLineEdit" name="mCloudMQTTTopicPrefixEdit_2">
<widget class="QLineEdit" name="mCloudMQTTClientID">
<property name="geometry">
<rect>
<x>90</x>
@@ -279,8 +279,8 @@
<widget class="QLabel" name="mGeneralLogParamsLbl">
<property name="geometry">
<rect>
<x>740</x>
<y>40</y>
<x>590</x>
<y>30</y>
<width>181</width>
<height>31</height>
</rect>
@@ -294,19 +294,6 @@
<string>Paramètres généraux</string>
</property>
</widget>
<widget class="QCheckBox" name="mSaveLocalLogFileChkBx">
<property name="geometry">
<rect>
<x>740</x>
<y>80</y>
<width>261</width>
<height>20</height>
</rect>
</property>
<property name="text">
<string>Sauvegarder fichier log local</string>
</property>
</widget>
<widget class="QPushButton" name="mChangeParamsBtn">
<property name="geometry">
<rect>
@@ -333,6 +320,111 @@
<string>Annuler</string>
</property>
</widget>
<widget class="QGroupBox" name="groupBox_2">
<property name="geometry">
<rect>
<x>590</x>
<y>90</y>
<width>351</width>
<height>121</height>
</rect>
</property>
<property name="title">
<string>Logging (3 = très détaillé)</string>
</property>
<widget class="QSpinBox" name="mLogFileVerbositySpinBx">
<property name="geometry">
<rect>
<x>170</x>
<y>30</y>
<width>51</width>
<height>22</height>
</rect>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>3</number>
</property>
</widget>
<widget class="QSpinBox" name="mLogZoneVerbositySpinBx">
<property name="geometry">
<rect>
<x>220</x>
<y>70</y>
<width>43</width>
<height>22</height>
</rect>
</property>
<property name="minimum">
<number>1</number>
</property>
<property name="maximum">
<number>3</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>10</x>
<y>30</y>
<width>161</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text">
<string>Verbosité du fichier log</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>10</x>
<y>70</y>
<width>211</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>11</pointsize>
</font>
</property>
<property name="text">
<string>Verbosité de la page de statut</string>
</property>
</widget>
<widget class="QLabel" name="label_3">
<property name="geometry">
<rect>
<x>230</x>
<y>30</y>
<width>81</width>
<height>20</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>0 = désactivé</string>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>