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
+2 -2
View File
@@ -49,14 +49,14 @@ int CCANAnalyzer::Init(quint8 CANDeviceChannel, TPCANBaudrate CANDeviceBaudrate,
if(mCANDriverIF->GetDeviceHandle(mCANDeviceChannel,mCANDeviceHandle) != RET_OK)
{
QString Log = QString("Impossible de trouver le module CAN sur le channel %1").arg(mCANDeviceChannel);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(Log,true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(Log,true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
mIsCANInitialized = false;
return RET_GENERAL_ERROR;
}
if(mCANDriverIF->Init(mCANDeviceHandle,CANDeviceBaudrate) != RET_OK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Impossible d'initialiser le matériel CAN",true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Impossible d'initialiser le matériel CAN",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
mIsCANInitialized = false;
return RET_GENERAL_ERROR;
}
+9 -4
View File
@@ -19,7 +19,7 @@ CCANDevice::CCANDevice(QObject *parent)
// mDevicePollPeriod = 0;
}
CCANDevice::CCANDevice(CCANDeviceConfig &SysConfig, CMQTTClientWrapper *MQTTClient)
CCANDevice::CCANDevice(CCANDeviceConfig &SysConfig, CMQTTClientWrapper *MQTTClient, QString DeviceTopicPrefix)
{
mMessageList.clear();
mMessagesListLoaded = false;
@@ -28,6 +28,7 @@ CCANDevice::CCANDevice(CCANDeviceConfig &SysConfig, CMQTTClientWrapper *MQTTClie
mDeviceConfigInfo = SysConfig;
mCANMQTTClient = MQTTClient;
mDeviceTopicPrefix = DeviceTopicPrefix;
// mCANDeviceID = SysConfig.mCANDeviceID;
// mCANDeviceBaudrate = SysConfig.mCANDeviceBaudrate;
@@ -60,7 +61,7 @@ int CCANDevice::Init()
if(mCANDatabase.BuildMessageList(&mMessageList,mDeviceConfigInfo.mDeviceName) == RET_OK)
{
mMessagesListLoaded = true;
mProgramPtr->InitCANViewer(&mMessageList,mDeviceConfigInfo.mDeviceName);
mProgramPtr->InitCANViewer(&mMessageList,this);
}
else
{
@@ -70,18 +71,22 @@ int CCANDevice::Init()
if(mCANAnalyzer.Init(mDeviceConfigInfo.mCANDeviceID,mDeviceConfigInfo.mCANDeviceBaudrate,&mMessageList,mDeviceConfigInfo.mDevicePollPeriod) != RET_OK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Le dispositif [%1] n'a pas pu s'initialiser").arg(mDeviceConfigInfo.mDeviceName),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Le dispositif [%1] n'a pas pu s'initialiser").arg(mDeviceConfigInfo.mDeviceName),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
mProgramPtr->SetCANConnectionStatusRequest(false);
mProgramPtr->UpdateCANModuleStatusRequest(mDeviceConfigInfo.mDeviceName,"Déconnecté","NOUPDATE");
return RET_GENERAL_ERROR;
}
#ifdef USE_TOPIC_PREFIX
mCANDataLogger.SetMQTTTopicDevice(QString("%2CANBus/%1/").arg(mDeviceConfigInfo.mDeviceName).arg(mDeviceTopicPrefix));
#else
mCANDataLogger.SetMQTTTopicDevice(QString("CANBus/%1/").arg(mDeviceConfigInfo.mDeviceName));
#endif
mCANDataLogger.SetMQTTClient(mCANMQTTClient);
mProgramPtr->SetCANConnectionStatusRequest(true);
mProgramPtr->UpdateCANModuleStatusRequest(mDeviceConfigInfo.mDeviceName,"Connecté","NOUPDATE");
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Dispositif [%1] initialisé avec succès!").arg(mDeviceConfigInfo.mDeviceName),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Dispositif [%1] initialisé avec succès!").arg(mDeviceConfigInfo.mDeviceName),1,true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
return RET_OK;
}
+3 -1
View File
@@ -22,11 +22,12 @@ class CCANDevice : public QObject
Q_OBJECT
public:
explicit CCANDevice(QObject *parent = 0);
CCANDevice(CCANDeviceConfig &SysConfig, CMQTTClientWrapper* MQTTClient = 0);
CCANDevice(CCANDeviceConfig &SysConfig, CMQTTClientWrapper* MQTTClient = 0, QString DeviceTopicPrefix="");
~CCANDevice();
int Init(QString DatabaseFileName, TPCANHandle CANDeviceID, TPCANBaudrate CANDeviceBaudRate, QString DevDescription, QString DeviceName, unsigned int DevicePollPeriod);
int Init();
QList<CCANMessage*> *GetCANMessagesList(){return &mMessageList;}
public:
CCANDeviceConfig mDeviceConfigInfo;
@@ -37,6 +38,7 @@ public:
CCANDatabase mCANDatabase; //The device's database loaded from dbc file
CCANDataLogger mCANDataLogger;
CMQTTClientWrapper *mCANMQTTClient;
QString mDeviceTopicPrefix;
QList<CCANMessage*> mMessageList;
QList<CMQTTMessage> *GetMQTTMessagesList();
+2 -2
View File
@@ -29,14 +29,14 @@ int CCANWatchdog::Init(quint8 CANDeviceID, WORD CANDeviceBaudrate, unsigned int
if(mCANDriverIF->GetDeviceHandle(mCANDeviceID,mCANDeviceHandle) != RET_OK)
{
QString Log = QString("Impossible de trouver le module CAN Watchdog sur le channel %1").arg(mCANDeviceID);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(Log,true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(Log,true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
mIsCANInitialized = false;
return RET_GENERAL_ERROR;
}
if(mCANDriverIF->Init(mCANDeviceHandle,mCANDeviceBaudrate) != RET_OK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Impossible d'initialiser la puck CAN du Watchdog",true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Impossible d'initialiser la puck CAN du Watchdog",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
mIsCANInitialized = false;
return RET_GENERAL_ERROR;
}
@@ -33,7 +33,7 @@ int CCANDatabase::LoadDatabaseFile(QString Filename)
status = kvaDbOpen(&mDatabaseDriverHandle);
if (status != kvaDbOK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible d'initialiser la base de données (création du handle impossble"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible d'initialiser la base de données (création du handle impossble"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
qDebug("Could not create a database handle: %d\n", status);
return RET_GENERAL_ERROR;
}
@@ -44,7 +44,7 @@ int CCANDatabase::LoadDatabaseFile(QString Filename)
status = kvaDbReadFile(mDatabaseDriverHandle, Filename.toLocal8Bit().data());
if (status != kvaDbOK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Erreur de base de données: impossible de charger le fichier %1").arg(Filename),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Erreur de base de données: impossible de charger le fichier %1").arg(Filename),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
qDebug("Could not load '%s': %d\n", Filename.toLocal8Bit().data(), status);
return RET_GENERAL_ERROR;
}
@@ -52,11 +52,11 @@ int CCANDatabase::LoadDatabaseFile(QString Filename)
status = kvaDbGetFlags(mDatabaseDriverHandle, &flags);
if (status != kvaDbOK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Erreur de base de données: impossible de charger les flags"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Erreur de base de données: impossible de charger les flags"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
qDebug("kvaDbGetFlags failed: %d\n", status);
return RET_GENERAL_ERROR;
}
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Base de données chargée avec succès. Flags: 0x%1").arg(flags),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Base de données chargée avec succès. Flags: 0x%1").arg(flags),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
qDebug(" Database: flags=0x%x\n", flags);
mDatabaseFileLoaded = true;
@@ -85,7 +85,7 @@ int CCANDatabase::BuildMessageList(QList<CCANMessage *> *MsgListPtr, QString Own
status = kvaDbGetFirstMsg (mDatabaseDriverHandle, &mh);
if (status != kvaDbOK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Erreur de base de données: impossible de charger le premier message"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Erreur de base de données: impossible de charger le premier message"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
qDebug ("kvaDbGetFirstMsg failed: %d\n", status);
return RET_GENERAL_ERROR;
}
@@ -13,7 +13,8 @@ QDataStream &operator>>(QDataStream &in, CCloudParams &dest)
>> dest.mMQTTBrokerPort
>> dest.mMQTTBrokerUserName
>> dest.mMQTTTopicPrefix
>> dest.mMQTTTransmitTimeout;
>> dest.mMQTTTransmitTimeout
>> dest.mMQTTClientID;
return in;
}
@@ -24,7 +25,8 @@ QDataStream &operator<<(QDataStream &out, const CCloudParams &source)
<< source.mMQTTBrokerPort
<< source.mMQTTBrokerUserName
<< source.mMQTTTopicPrefix
<< source.mMQTTTransmitTimeout;
<< source.mMQTTTransmitTimeout
<< source.mMQTTClientID;
return out;
}
@@ -41,6 +43,7 @@ CCloudParams& CCloudParams::operator=(const CCloudParams &source)
this->mMQTTBrokerUserName = source.mMQTTBrokerUserName;
this->mMQTTTopicPrefix = source.mMQTTTopicPrefix;
this->mMQTTTransmitTimeout = source.mMQTTTransmitTimeout;
this->mMQTTClientID = source.mMQTTClientID;
return *this;
}
@@ -13,6 +13,7 @@ public:
QString mMQTTTopicPrefix;
quint32 mMQTTBrokerPort;
quint32 mMQTTTransmitTimeout;
QString mMQTTClientID;
CCloudParams &operator=(const CCloudParams &source);
};
@@ -23,7 +23,7 @@ CMQTTClientWrapper::~CMQTTClientWrapper()
int CMQTTClientWrapper::SetMQTTParams(CCloudParams *Params)
{
mMQTTParams = *Params;
mMQTTClientID = "Otarcik_Station_Ville_Emard";
// mMQTTClientID = "Otarcik_Station_Ville_Emard";
return RET_OK;
}
@@ -32,7 +32,7 @@ int CMQTTClientWrapper::ConnectToBroker()
{
//Setup the client before connecting.
mMQTTClient.setAutoKeepAlive(true);
mMQTTClient.setClientId(mMQTTClientID);
mMQTTClient.setClientId(mMQTTParams.mMQTTClientID);
mMQTTClient.setHostname(mMQTTParams.mMQTTBrokerHostName);
mMQTTClient.setPort(mMQTTParams.mMQTTBrokerPort);
mMQTTClient.setPassword(mMQTTParams.mMQTTBrokerPassword);
@@ -143,7 +143,7 @@ void CMQTTClientWrapper::MQTTSendTimerExpired()
qint32 res = mMQTTClient.publish(MessagesList->at(i).mMessageTopic,MessagesList->at(i).mMessagePayload.toLocal8Bit(),0,true);
qDebug("%s : %s",qPrintable(MessagesList->at(i).mMessageTopic), qPrintable(MessagesList->at(i).mMessagePayload));
QString LogMsg = QString("Envoi d'un message MQTT. Topic: %1 Payload: %2").arg(MessagesList->at(i).mMessageTopic).arg(MessagesList->at(i).mMessagePayload);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,false);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,true,3);
}
qDebug("Sent %d MQTT messages",MessagesList->size());
@@ -27,7 +27,7 @@ public:
int SetCANDevicesList(QList<CCANDevice*> *List);
COtarcikCan *mProgramPtr;
QString mMQTTClientID;
// QString mMQTTClientID;
QTimer *mMQTTRefreshTimer;
QTimer *mMQTTReconnectTimer;
@@ -59,10 +59,14 @@ int CGeneralMessagesLogDispatcher::Init()
mSystemLogFile->write(QString("Démarrage du logiciel Otarcik CAN le %1 à %2\n").arg(QDateTime::currentDateTime().date().toString("yyyy-MM-dd")).arg(QDateTime::currentDateTime().time().toString("hh:mm:ss")).toUtf8());
mSystemLogFile->write(QString("********************************************************************\n").toUtf8());
}
mLogFileVerbosity = 3;
mGuiLogVerbosity = 3;
return RET_OK;
}
int CGeneralMessagesLogDispatcher::AddLogMessage(QString LogLine, bool AddToGUILogPanel, eGenMsgTextErrorStatus TxtErrStatus)
int CGeneralMessagesLogDispatcher::AddLogMessage(QString LogLine, bool AddToGUILogPanel, int MsgVerbosity, eGenMsgTextErrorStatus TxtErrStatus)
{
//TODO: Add text to log file...
@@ -86,31 +90,37 @@ int CGeneralMessagesLogDispatcher::AddLogMessage(QString LogLine, bool AddToGUIL
}
mSystemLogFile->write(LogLine.toUtf8());
if(AddToGUILogPanel == true)
if(MsgVerbosity <= mLogFileVerbosity)
{
if(TxtErrStatus == GEN_MSG_TXT_ERROR_STATUS)
{
LogLine.prepend("%E");
}
else if(TxtErrStatus == GEN_MSG_TXT_WARNING_STATUS)
{
LogLine.prepend("%W");
}
else if(TxtErrStatus == GEN_MSG_TXT_SUCCESS_STATUS)
{
LogLine.prepend("%S");
}
mSystemLogFile->write(LogLine.toUtf8());
}
if(mGeneralStatusPageHandle != 0)
if(MsgVerbosity <= mGuiLogVerbosity)
{
if(AddToGUILogPanel == true)
{
mGeneralStatusPageHandle->AddGeneralMsgBoxLineEntry(LogLine);
}
else
{
qDebug("Someone forgot to assing their pointers in CGeneralMessagesLogDispatch::AddLogMessage!! This needs to be fixed");
return RET_GENERAL_ERROR;
if(TxtErrStatus == GEN_MSG_TXT_ERROR_STATUS)
{
LogLine.prepend("%E");
}
else if(TxtErrStatus == GEN_MSG_TXT_WARNING_STATUS)
{
LogLine.prepend("%W");
}
else if(TxtErrStatus == GEN_MSG_TXT_SUCCESS_STATUS)
{
LogLine.prepend("%S");
}
if(mGeneralStatusPageHandle != 0)
{
mGeneralStatusPageHandle->AddGeneralMsgBoxLineEntry(LogLine);
}
else
{
qDebug("Someone forgot to assing their pointers in CGeneralMessagesLogDispatch::AddLogMessage!! This needs to be fixed");
return RET_GENERAL_ERROR;
}
}
}
@@ -135,3 +145,10 @@ int CGeneralMessagesLogDispatcher::BindGuiPageHandle(CGeneralStatusPage *Handle)
return RET_OK;
}
int CGeneralMessagesLogDispatcher::SetLogVerbosities(int LogFileVerbosity, int GuiLogVerbosity)
{
mGuiLogVerbosity = GuiLogVerbosity;
mLogFileVerbosity = LogFileVerbosity;
return RET_OK;
}
@@ -30,14 +30,17 @@ public:
CGeneralMessagesLogDispatcher();
~CGeneralMessagesLogDispatcher();
int AddLogMessage(QString LogLine, bool AddToGUILogPanel = true, eGenMsgTextErrorStatus TxtErrStatus = GEN_MSG_TXT_NO_ERROR_STATUS);
int AddLogMessage(QString LogLine, bool AddToGUILogPanel = true, int MsgVerbosity = 1, eGenMsgTextErrorStatus TxtErrStatus = GEN_MSG_TXT_NO_ERROR_STATUS);
CGeneralStatusPage *mGeneralStatusPageHandle;
int BindGuiPageHandle(CGeneralStatusPage *Handle);
int Init();
int SetLogVerbosities(int LogFileVerbosity, int GuiLogVerbosity);
private:
QStringList mGeneralMsgGUILog;
QFile *mSystemLogFile;
int mLogFileVerbosity;
int mGuiLogVerbosity;
};
@@ -0,0 +1,36 @@
#include "GeneralSystemParams.h"
CGeneralSystemParams::CGeneralSystemParams()
{
mLocalLogVerbosity = 1;
mLogFileVerbosity = 0;
}
QDataStream &operator>>(QDataStream &in, CGeneralSystemParams &dest)
{
in >> dest.mLocalLogVerbosity
>> dest.mLogFileVerbosity;
return in;
}
QDataStream &operator<<(QDataStream &out, const CGeneralSystemParams &source)
{
out << source.mLocalLogVerbosity
<< source.mLogFileVerbosity;
return out;
}
CGeneralSystemParams& CGeneralSystemParams::operator=(const CGeneralSystemParams &source)
{
if(&source == this)
{
return *this;
}
this->mLocalLogVerbosity = source.mLocalLogVerbosity;
this->mLogFileVerbosity = source.mLogFileVerbosity;
return *this;
}
+21
View File
@@ -0,0 +1,21 @@
#ifndef GENERALSYSTEMPARAMS_H
#define GENERALSYSTEMPARAMS_H
#include <QDataStream>
class CGeneralSystemParams
{
public:
CGeneralSystemParams();
int mLocalLogVerbosity;
int mLogFileVerbosity;
CGeneralSystemParams &operator=(const CGeneralSystemParams &source);
};
QDataStream &operator<<(QDataStream &out, const CGeneralSystemParams &source);
QDataStream &operator>>(QDataStream &in, CGeneralSystemParams &dest);
#endif // GENERALSYSTEMPARAMS_H
+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/>
+1
View File
@@ -22,6 +22,7 @@ CMainWindow::CMainWindow(QWidget *parent) :
ui(new Ui::CMainWindow)
{
ui->setupUi(this);
QMainWindow::statusBar()->showMessage("V1.00");
mGeneralStatusPage = new CGeneralStatusPage(this);
mMainWindowWidget = new QTabWidget(this);
+38 -24
View File
@@ -54,8 +54,9 @@ int COtarcikCan::Start()
CGeneralMessagesLogDispatcher::instance()->BindGuiPageHandle(mMainWindow.mGeneralStatusPage);
CGeneralMessagesLogDispatcher::instance()->Init();
// CGeneralMessagesLogDispatcher::instance()->Init();
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"));
// CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"));
if(mSystemConfig.LoadConfig() == RET_OK)
{
@@ -66,50 +67,41 @@ int COtarcikCan::Start()
PopulateCANDevicesList(CANDeviceConfigList);
}
mMainWindow.mCANbusSettingsPage->SetDevicesList(&mCANDevicesList);
mMainWindow.mCANViewerPage->InitCANTable(&mCANDevicesList);
mCloudLoggingParams = *mSystemConfig.GetCloudParams();
mMainWindow.mDataLoggingSettingsPage->SetCloudParams(&mCloudLoggingParams);
mCANBusMQTTClient.SetMQTTParams(&mCloudLoggingParams);
mCANBusMQTTClient.ConnectToBroker();
mCANBusMQTTClient.SetCANDevicesList(&mCANDevicesList);
mGeneralSystemParams = *mSystemConfig.GetGeneralSystemSettings();
mMainWindow.mDataLoggingSettingsPage->SetGeneralSettingsParams(&mGeneralSystemParams);
CGeneralMessagesLogDispatcher::instance()->SetLogVerbosities(mGeneralSystemParams.mLogFileVerbosity,mGeneralSystemParams.mLocalLogVerbosity);
mMainWindow.mCANWatchdogSettingsPage->SetCANWatchdogConfig(mSystemConfig.GetCANWatchdogConfig());
mGPTimer->setSingleShot(false);
mGPTimer->start(5000);
// mGPTimer->setSingleShot(false);
// mGPTimer->start(5000);
}
// CCANDevice *NewCANDevice = new CCANDevice();
// mCANDevicesList.append(NewCANDevice);
// NewCANDevice->mProgramPtr = this;
// NewCANDevice->Init("IVT-S_all-variations_12082020.dbc",PCAN_USBBUS1,PCAN_BAUD_500K,"Puck CAN USB branchée sur le module Parker qui contrôle la patente", "Module Parker",1000);
// SaveSystemConfigRequest();
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"));
mCANBusMQTTClient.ConnectToBroker();
mMainWindow.mCANbusSettingsPage->SetDevicesList(&mCANDevicesList);
// NewCANDevice = new CCANDevice();
// mCANDevicesList.append(NewCANDevice);
// NewCANDevice->mProgramPtr = this;
// NewCANDevice->Init("mazda_3_2019.dbc",PCAN_USBBUS3,PCAN_BAUD_800K,"Puck CAN USB branchée sur une autre patente", "Module Cossin",200);
return 0;
}
int COtarcikCan::UpdateCANViewerDataRequest(QList<CCANMessage *> *MsgList, QString DeviceName)
int COtarcikCan::UpdateCANViewerDataRequest(QList<CCANMessage *> *MsgList)
{
return mMainWindow.mCANViewerPage->UpdateCANTable(MsgList);
}
int COtarcikCan::InitCANViewer(QList<CCANMessage *> *MsgList, QString DeviceName)
{
return mMainWindow.mCANViewerPage->InitCANTable(MsgList, DeviceName);
}
@@ -132,8 +124,11 @@ int COtarcikCan::SaveCANDevicesConfigRequest(QList<CCANDeviceConfig *> *DevicesC
{
//Config saving is successful. To apply changes we need to reload the devices.
//The easiest way is to delete everything and reload.
mMainWindow.mGeneralStatusPage->ClearCANModuleStatusTable();
PopulateCANDevicesList(DevicesConfigList);
mMainWindow.mCANbusSettingsPage->SetDevicesList(&mCANDevicesList);
mMainWindow.mCANViewerPage->InitCANTable(&mCANDevicesList);
}
else
{
@@ -158,12 +153,14 @@ int COtarcikCan::PopulateCANDevicesList(QList<CCANDeviceConfig *> *CANDeviceConf
for(int i = 0; i < CANDeviceConfigList->size(); i++)
{
CCANDevice *NewDevice = new CCANDevice(*CANDeviceConfigList->at(i),&mCANBusMQTTClient);
CCANDevice *NewDevice = new CCANDevice(*CANDeviceConfigList->at(i),&mCANBusMQTTClient,mSystemConfig.mCloudLoggingParams.mMQTTTopicPrefix);
NewDevice->mProgramPtr = this;
NewDevice->Init();
mCANDevicesList.append(NewDevice);
}
return RET_OK;
}
@@ -192,6 +189,23 @@ int COtarcikCan::SaveCloudLoggingConfigRequest(CCloudParams *CloudParams)
return RET_OK;
}
int COtarcikCan::SaveGeneralParametersSettingsRequest(CGeneralSystemParams *GeneralParams)
{
mGeneralSystemParams = *GeneralParams;
mSystemConfig.SetGeneralSystemParams(&mGeneralSystemParams);
if(mSystemConfig.SaveConfig() == RET_OK)
{
}
else
{
return RET_GENERAL_ERROR;
}
CGeneralMessagesLogDispatcher::instance()->SetLogVerbosities(mGeneralSystemParams.mLogFileVerbosity,mGeneralSystemParams.mLocalLogVerbosity);
return RET_OK;
}
void COtarcikCan::GPTimerExpired()
{
// mCANBusMQTTClient.SendMQTTTestMessage();
+3 -1
View File
@@ -25,12 +25,13 @@ public:
int Start();
int InitCANViewer(QList<CCANMessage *> *MsgList, QString DeviceName);
int InitCANViewer(QList<CCANMessage *> *MsgList, CCANDevice *Device);
int UpdateCANViewerDataRequest(QList<CCANMessage *> *MsgList, QString DeviceName);
int SaveCANDevicesConfigRequest(QList<CCANDeviceConfig*> *DevicesConfigList);
int SaveCloudLoggingConfigRequest(CCloudParams *CloudParams);
int SaveGeneralParametersSettingsRequest(CGeneralSystemParams *GeneralParams);
int SetCANConnectionStatusRequest(bool Connected);
int SetMQTTConnectionSatusRequest(bool Connected);
@@ -41,6 +42,7 @@ public:
private:
QList<CCANDevice*> mCANDevicesList;
CCloudParams mCloudLoggingParams;
CGeneralSystemParams mGeneralSystemParams;
int PopulateCANDevicesList(QList<CCANDeviceConfig*> *DevicesConfigsList);
+2 -2
View File
@@ -60,7 +60,7 @@ int CPCANInterface::Init(TPCANHandle CANDeviceHandle, TPCANBaudrate CANBaudRate)
char strMsg[256];
CAN_GetErrorText(Result, 0, strMsg);
qDebug("%s",strMsg);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible d'initialiser un module USB PCAN. Erreur:%1").arg(strMsg),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible d'initialiser un module USB PCAN. Erreur:%1").arg(strMsg),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CANInterfaceOpened = false;
return RET_GENERAL_ERROR;
}
@@ -81,7 +81,7 @@ int CPCANInterface::DeInit()
{
char strMsg[256];
CAN_GetErrorText(Result, 0, strMsg);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible de déinitialiser un module USB PCAN.. Error:%1").arg(strMsg),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible de déinitialiser un module USB PCAN.. Error:%1").arg(strMsg),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
}
else
{
+25 -10
View File
@@ -1,8 +1,7 @@
#include "SystemConfig.h"
#include "GeneralMessagesLogDispatcher.h"
CSystemConfig::CSystemConfig() :
mSaveLocalLogFile(false)
CSystemConfig::CSystemConfig()
{
}
@@ -31,13 +30,13 @@ int CSystemConfig::LoadConfig()
if(ConfigFile->open(QIODevice::ReadOnly | QIODevice::Unbuffered) == false)
{
qDebug("CSystemConfig: Failed to open config file in config loading");
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Impossible d'ouvrir le fichier /Config/Station.cfg"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Impossible d'ouvrir le fichier /Config/Station.cfg"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
return RET_GENERAL_ERROR;
}
}
else
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Pointeur vers QFile invalide !!!"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Pointeur vers QFile invalide !!!"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
qDebug("CSystemConfig: Invalid QFile pointer in config loading...");
return RET_GENERAL_ERROR;
}
@@ -71,17 +70,18 @@ int CSystemConfig::LoadConfig()
*InputStream >> mCloudLoggingParams;
//Load general program settings
*InputStream >> mSaveLocalLogFile;
*InputStream >> mGeneralSystemParams;
//Load CAN Watchdog parameters
*InputStream >> mCANWatchdogParams;
ConfigFile->close();
delete ConfigFile;
delete InputStream;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système chargée avec succès!"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système chargée avec succès!"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
return RET_OK;
}
@@ -94,13 +94,13 @@ int CSystemConfig::SaveConfig()
{
if(ConfigFile->open(QIODevice::WriteOnly | QIODevice::Unbuffered) == false)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Impossible d'ouvrir le fichier /Config/Station.cfg"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Impossible d'ouvrir le fichier /Config/Station.cfg"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
return RET_GENERAL_ERROR;
}
}
else
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Pointeur vers QFile invalide !!!"),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Pointeur vers QFile invalide !!!"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
return RET_GENERAL_ERROR;
}
@@ -125,7 +125,7 @@ int CSystemConfig::SaveConfig()
*OutputStream << mCloudLoggingParams;
//Save the general system parameters
*OutputStream << mSaveLocalLogFile;
*OutputStream << mGeneralSystemParams;
//Save the CAN Watchdog params
*OutputStream << mCANWatchdogParams;
@@ -136,7 +136,7 @@ int CSystemConfig::SaveConfig()
delete ConfigFile;
delete OutputStream;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système sauvegardée avec succès."),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système sauvegardée avec succès."),true,3,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
return RET_OK;
}
@@ -177,6 +177,12 @@ CCANWatchdogConfig *CSystemConfig::GetCANWatchdogConfig()
return &mCANWatchdogParams;
}
CGeneralSystemParams *CSystemConfig::GetGeneralSystemSettings()
{
return &mGeneralSystemParams;
}
int CSystemConfig::SetCANWatchdogConfig(CCANWatchdogConfig *Config)
{
if(Config == 0)
@@ -193,3 +199,12 @@ int CSystemConfig::SetCloudParams(CCloudParams *CloudParams)
mCloudLoggingParams = *CloudParams;
return RET_OK;
}
int CSystemConfig::SetGeneralSystemParams(CGeneralSystemParams *GeneralParams)
{
if(GeneralParams == 0)
return RET_GENERAL_ERROR;
mGeneralSystemParams = *GeneralParams;
return RET_OK;
}
+6 -1
View File
@@ -8,6 +8,7 @@
#include "CANDeviceConfig.h"
#include "CloudParams.h"
#include "CANWatchdogConfig.h"
#include "GeneralSystemParams.h"
#define OTARCIK_CURRENT_CONFIG_FILE_VERSION 0x01
#define OTARCIK_CONFIG_FILE_MAGIC_NBR 0xDEADBEEF
@@ -28,6 +29,8 @@ public:
CCloudParams *GetCloudParams();
int SetCloudParams(CCloudParams *CloudParams);
CGeneralSystemParams *GetGeneralSystemSettings();
int SetGeneralSystemParams(CGeneralSystemParams *GeneralParams);
@@ -39,13 +42,15 @@ public:
CCloudParams mCloudLoggingParams;
//Misc general system settings
bool mSaveLocalLogFile;
CGeneralSystemParams mGeneralSystemParams;
//CAN Module watchdog settings
CCANWatchdogConfig mCANWatchdogParams;
CCANWatchdogConfig *GetCANWatchdogConfig();
int SetCANWatchdogConfig(CCANWatchdogConfig *Config);
};
+3
View File
@@ -5,6 +5,9 @@
#define GENERAL_MESSAGES_MAX_LOG_LINES 5000 //The number of lines of general status log we keep in the general status window (avoids fucking up because you know.... RAM)
#define MQTT_CLIENT_RECONNECT_TIMEOUT 5000 //Time in ms between reconnect attemps to MQTT broker when connection is lost
//#define USE_TOPIC_PREFIX
enum eOtarcikGeneralReturns
{
RET_OK = 0,