Ajout Syslog et début de logging du buffering

This commit is contained in:
2023-12-01 06:34:46 -05:00
parent 454935965f
commit 40093d5acf
27 changed files with 1214 additions and 98 deletions
+8 -8
View File
@@ -47,22 +47,22 @@ int CCANDevice::Init()
}
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Initialisation du dispositif [%1]").arg(mDeviceConfigInfo.mDeviceName));
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Initialisation du dispositif [%1]").arg(mDeviceConfigInfo.mDeviceName),"CCANDevice");
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Démarrage d'un module CAN...");
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Démarrage d'un module CAN...","CCANDevice");
mCANDriverIF = new CPCANInterface;
if(mCANDriverIF->GetDeviceHandle(mDeviceConfigInfo.mCANDeviceID,mDeviceHandle) != RET_OK)
{
QString Log = QString("Impossible de trouver le module CAN sur le channel %1").arg(mDeviceConfigInfo.mCANDeviceID);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(Log,true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(Log,"CCANDevice",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
mIsCANInitialized = false;
return RET_GENERAL_ERROR;
}
if(mCANDriverIF->Init(mDeviceHandle,mDeviceConfigInfo.mCANDeviceBaudrate) != RET_OK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Impossible d'initialiser le matériel CAN",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Impossible d'initialiser le matériel CAN","CCANDevice",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
mIsCANInitialized = false;
return RET_GENERAL_ERROR;
}
@@ -87,7 +87,7 @@ int CCANDevice::Init()
// if(mCANAnalyzer.Init(mDeviceConfigInfo.mCANDeviceID,mDeviceConfigInfo.mCANDeviceBaudrate,&mMessageList,mDeviceConfigInfo.mDevicePollPeriod) != RET_OK)
if(mCANAnalyzer.Init(mCANDriverIF,mDeviceHandle,mDeviceConfigInfo.mCANDeviceID,&mMessageList,mDeviceConfigInfo.mDevicePollPeriod) != RET_OK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Le dispositif [%1] n'a pas pu s'initialiser").arg(mDeviceConfigInfo.mDeviceName),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Le dispositif [%1] n'a pas pu s'initialiser").arg(mDeviceConfigInfo.mDeviceName),"CCANDevice",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
mProgramPtr->SetCANConnectionStatusRequest(false);
mProgramPtr->UpdateCANModuleStatusRequest(mDeviceConfigInfo.mDeviceName,"Déconnecté","NOUPDATE");
return RET_GENERAL_ERROR;
@@ -97,12 +97,12 @@ int CCANDevice::Init()
{
if(mCANWatchdog.Init(mCANDriverIF,mDeviceHandle,mDeviceConfigInfo.mWatchdogPeriod,mDeviceConfigInfo.mWatchdogCANMsgID) != RET_OK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Impossible d'initialiser un watchdog CAN",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Impossible d'initialiser un watchdog CAN","CCANDevice",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
}
mCANWatchdog.StartWDT();
QString Log = QString("Watchdog CAN initialisé pour le module sur le channel %1").arg(mDeviceConfigInfo.mCANDeviceID);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(Log,true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(Log,"CCANDevice",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
}
mIsCANInitialized = true;
@@ -116,7 +116,7 @@ int CCANDevice::Init()
mProgramPtr->SetCANConnectionStatusRequest(true);
mProgramPtr->UpdateCANModuleStatusRequest(mDeviceConfigInfo.mDeviceName,"Connecté","NOUPDATE");
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Dispositif [%1] initialisé avec succès!").arg(mDeviceConfigInfo.mDeviceName),1,true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Dispositif [%1] initialisé avec succès!").arg(mDeviceConfigInfo.mDeviceName),"CCANDevice",1,true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
return RET_OK;
}
+2 -2
View File
@@ -27,7 +27,7 @@ int CCANWatchdog::Init(CPCANInterface *CANDriverIF, TPCANHandle CANDeviceHandle,
mCANDeviceHandle = CANDeviceHandle;
mWDTPeriod = WDTPeriod;
mCANDriverIF = CANDriverIF;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Démarrage du Watchdog CAN...");
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Démarrage du Watchdog CAN...","CCANWatchdog");
mWatchdogTimer->setInterval(mWDTPeriod);
mWatchdogTimer->setSingleShot(false);
@@ -52,7 +52,7 @@ void CCANWatchdog::WatchdogTimeoutTimerExpired()
qDebug("Sending 0x%X to CAN",data);
//QString LogMsg = QString("Écriture du watchdog. CAN ID %1 Payload: 0x%2 0x%3 0x%4 0x%5 0x%6 0x%7 0x%8 0x%9").arg(mWDTCANMsg.mCANMsgID,0,16).arg(mWDTCANMsg.mCANMsgData.at(7),0,16).arg(mWDTCANMsg.mCANMsgData.at(6),0,16).arg(mWDTCANMsg.mCANMsgData.at(5),0,16).arg(mWDTCANMsg.mCANMsgData.at(4),0,16).arg(mWDTCANMsg.mCANMsgData.at(3),0,16).arg(mWDTCANMsg.mCANMsgData.at(2),0,16).arg(mWDTCANMsg.mCANMsgData.at(1),0,16).arg(mWDTCANMsg.mCANMsgData[0],0,16);
QString LogMsg = QString("Écriture du watchdog. CAN ID 0x%1").arg(mWDTCANMsg.mCANMsgID,0,16);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,true,3);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,"CCANWatchdog",true,3);
}
int CCANWatchdog::StartWDT()
@@ -33,18 +33,18 @@ 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,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible d'initialiser la base de données (création du handle impossble"),"CCANDatabase",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
qDebug("Could not create a database handle: %d\n", status);
return RET_GENERAL_ERROR;
}
// Load the database file
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Chargement de la base de données %1").arg(Filename),true);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Chargement de la base de données %1").arg(Filename),"CCANDatabase",true);
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,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Erreur de base de données: impossible de charger le fichier %1").arg(Filename),"CCANDevice",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,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Erreur de base de données: impossible de charger les flags"),"CCANDatabase",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,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Base de données chargée avec succès. Flags: 0x%1").arg(flags),"CCANDatabase",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,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Erreur de base de données: impossible de charger le premier message"),"CCANDatabase",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
qDebug ("kvaDbGetFirstMsg failed: %d\n", status);
return RET_GENERAL_ERROR;
}
@@ -23,6 +23,8 @@ CMQTTClientWrapper::CMQTTClientWrapper()
mMessagesQueueMode = MQTT_DROP_MSG_MODE;
mDisconnectionIsVoluntary = false;
mIsClientConnecting = false;
mCircularBufferStatusText = mBufferingModeText = mUploadTimeText = "";
}
CMQTTClientWrapper::~CMQTTClientWrapper()
@@ -43,6 +45,10 @@ int CMQTTClientWrapper::StartMQTTClient()
mMQTTRefreshTimer->start(mMQTTParams.mMQTTTransmitTimeout);
mMessagesQueueMode = MQTT_QUEUE_MSG_MODE;
ConnectToBroker();
mCircularBufferStatusText = QString("0/%1 messages (0\%)").arg(MQTT_CLIENT_MSG_QUEUE_SIZE);
mBufferingModeText = "Buffering";
UpdateGUIBufferingStatus();
return RET_OK;
}
@@ -114,14 +120,16 @@ void CMQTTClientWrapper::StateChanged()
}
else
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Client MQTT déconnecté.",true,1);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Client MQTT déconnecté.","CMQTTClientWrapper",true,1);
mProgramPtr->SetMQTTConnectionSatusRequest(false);
mMQTTReconnectTimer->start(MQTT_CLIENT_RECONNECT_TIMEOUT);
mMQTTQueueFlushTimer->stop();
if(mDisconnectionIsVoluntary == false)
{
mMessagesQueueMode = MQTT_QUEUE_MSG_MODE; //We're disconnected, queue all the messages.
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Passage en mode buffering des messages MQTT",true,2);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Passage en mode buffering des messages MQTT","CMQTTClientWrapper",true,2);
mBufferingModeText = "Buffering";
UpdateGUIBufferingStatus();
}
}
break;
@@ -131,16 +139,22 @@ void CMQTTClientWrapper::StateChanged()
mProgramPtr->SetMQTTConnectionSatusRequest(true);
mMQTTReconnectTimer->stop();
mIsClientConnecting = false;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Client MQTT connecté.",true,1);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Client MQTT connecté.","CMQTTClientWrapper",true,1);
if(mMQTTMessagesQueue.isEmpty() == false)
{
mMessagesQueueMode = MQTT_QUEUE_MSG_MODE; //Stay in (or enter) queue mode until we empty the buffer
mMQTTQueueFlushTimer->start();
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("FIFO non vide, passage au mode de vidage de la FIFO",true,2);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("FIFO non vide, passage au mode de vidage de la FIFO","CMQTTClientWrapper",true,2);
mBufferingModeText = "Buffering";
mCircularBufferStatusText = QString("%2/%1 messages (0%3\%)").arg(MQTT_CLIENT_MSG_QUEUE_SIZE).arg(mMQTTMessagesQueue.size()).arg((mMQTTMessagesQueue.size()/MQTT_CLIENT_MSG_QUEUE_SIZE)*100);
UpdateGUIBufferingStatus();
}
else
{
mMessagesQueueMode = MQTT_TRANSMIT_MSG_MODE;
mBufferingModeText = "Non-buffering";
UpdateGUIBufferingStatus();
}
break;
}
@@ -192,7 +206,7 @@ void CMQTTClientWrapper::MQTTSendTimerExpired()
{
qint32 res = mMQTTClient.publish(MessagesList->at(i).mMessageTopic,MessagesList->at(i).mMessagePayload.toLocal8Bit(),0,true);
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,true,3);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,"CMQTTClientWrapper",true,3);
}
qDebug("Sent %d MQTT messages",MessagesList->size());
@@ -214,7 +228,11 @@ void CMQTTClientWrapper::MQTTSendTimerExpired()
}
mMQTTMessagesQueue.append(NewMsg);
QString LogMsg = QString("Ajout d'un message MQTT à la FIFO. Topic: %1 Payload: %2 FIFO size: %3").arg(MessagesList->at(i).mMessageTopic).arg(MessagesList->at(i).mMessagePayload).arg(mMQTTMessagesQueue.size());
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,true,3);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,"CMQTTClientWrapper",true,3);
mCircularBufferStatusText = QString("%2/%1 messages (0%3\%)").arg(MQTT_CLIENT_MSG_QUEUE_SIZE).arg(mMQTTMessagesQueue.size()).arg((mMQTTMessagesQueue.size()/MQTT_CLIENT_MSG_QUEUE_SIZE)*100);
UpdateGUIBufferingStatus();
}
}
break;
@@ -243,7 +261,7 @@ void CMQTTClientWrapper::MQTTQueueFlushTimerExipred()
CMQTTMessage *Msg = mMQTTMessagesQueue.takeFirst();
qint32 res = mMQTTClient.publish(Msg->mMessageTopic,Msg->mMessagePayload.toLocal8Bit(),0,true);
QString LogMsg = QString("Envoi d'un message MQTT provenant du buffer. Topic: %1 Payload: %2 Buffer Size: %3").arg(Msg->mMessageTopic).arg(Msg->mMessagePayload).arg(mMQTTMessagesQueue.size());
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,true,3);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(LogMsg,"CMQTTClientWrapper",true,3);
delete Msg; //free memory
@@ -251,7 +269,13 @@ void CMQTTClientWrapper::MQTTQueueFlushTimerExipred()
{
mMQTTQueueFlushTimer->stop();
mMessagesQueueMode = MQTT_TRANSMIT_MSG_MODE;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Tous les messages MQTT de la FIFO ont été envoyés au serveur",true,2);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Tous les messages MQTT de la FIFO ont été envoyés au serveur","CMQTTClientWrapper",true,2);
}
}
int CMQTTClientWrapper::UpdateGUIBufferingStatus()
{
//mProgramPtr->UpdateMQTTBufferingStatusRequest(mBufferingModeText,mCircularBufferStatusText,mRemainingBufferingTimeText);
}
@@ -48,6 +48,10 @@ private:
QList<CCANDevice*> *mCANDevicesList;
QList<CMQTTMessage*> mMQTTMessagesQueue;
bool mIsClientConnecting;
QString mCircularBufferStatusText, mBufferingModeText, mUploadTimeText;
int UpdateGUIBufferingStatus();
public slots:
void StateChanged();
@@ -14,13 +14,13 @@ int CComputerBoardInterface::Init()
{
if(LoadLibrary() == RET_OK)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Librairie Axiomtek chargée avec succès"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Librairie Axiomtek chargée avec succès"),"CComputerBoardInterface",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
StopCPUWatchdog();
return RET_OK;
}
else
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible de charger la librairie Axiomtek"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible de charger la librairie Axiomtek"),"CComputerBoardInterface",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
}
return RET_OK;
@@ -81,7 +81,7 @@ int CComputerBoardInterface::StartCPUWatchdog()
{
if(AxWDTexec(bWDT_ENABLE) == true)
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Watchdog CPU démarré. Timeout: %1 secondes").arg(mWatchdogTimeout));
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Watchdog CPU démarré. Timeout: %1 secondes").arg(mWatchdogTimeout),"CComputerBoardInterface");
Ret = RET_OK;
}
else
@@ -103,7 +103,7 @@ int CComputerBoardInterface::StopCPUWatchdog()
}
else
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Watchdog CPU arrêté"));
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Watchdog CPU arrêté"),"CComputerBoardInterface");
}
return Ret;
}
@@ -20,7 +20,7 @@
#include "GeneralMessagesLogDispatcher.h"
#include <QDateTime>
#include <SysLogger.h>
//singleton instantiation
CGeneralMessagesLogDispatcher CGeneralMessagesLogDispatcher::mSingleton;
@@ -43,8 +43,10 @@ CGeneralMessagesLogDispatcher::~CGeneralMessagesLogDispatcher()
}
}
int CGeneralMessagesLogDispatcher::Init()
int CGeneralMessagesLogDispatcher::Init(CSysLogger *SysLoggerPtr)
{
mSysLoggerHandle = SysLoggerPtr;
QString FileName;
FileName = "./Logs/SystemLog.txt";
@@ -63,31 +65,34 @@ int CGeneralMessagesLogDispatcher::Init()
mLogFileVerbosity = 3;
mGuiLogVerbosity = 3;
mSysLoggerHandle->SysLog("Dispatcher de message démarré","CGeneralMessageLogDispatcher");
return RET_OK;
}
int CGeneralMessagesLogDispatcher::AddLogMessage(QString LogLine, bool AddToGUILogPanel, int MsgVerbosity, eGenMsgTextErrorStatus TxtErrStatus)
int CGeneralMessagesLogDispatcher::AddLogMessage(QString LogLine, QString Module, bool AddToGUILogPanel, int MsgVerbosity, eGenMsgTextErrorStatus TxtErrStatus)
{
//TODO: Add text to log file...
LogLine.remove('\n');
LogLine.remove('\r');
LogLine.append('\n');
mSysLoggerHandle->SysLog(LogLine,Module);
LogLine.remove('\n');
LogLine.remove('\r');
LogLine.append('\n');
LogLine.prepend(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss "));
LogLine.prepend(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss "));
if(mSystemLogFile == NULL)
{
qDebug("GeneralMessagesLogDispatcher : Trying to add log to invalid system log file pointer ");
return RET_GENERAL_ERROR;
}
if(mSystemLogFile == NULL)
{
qDebug("GeneralMessagesLogDispatcher : Trying to add log to invalid system log file pointer ");
return RET_GENERAL_ERROR;
}
if(mSystemLogFile->isOpen() == false)
{
qDebug("GeneralMessagesLogDispatcher : Trying to add log to unopened system log file");
return RET_GENERAL_ERROR;
}
if(mSystemLogFile->isOpen() == false)
{
qDebug("GeneralMessagesLogDispatcher : Trying to add log to unopened system log file");
return RET_GENERAL_ERROR;
}
#ifdef GENERAL_MESSAGES_SEND_TO_STDOUT
qDebug("%s",qPrintable(LogLine));
@@ -7,6 +7,7 @@
#include <QFile>
#include <QStringList>
class CSysLogger;
class CGeneralMessagesLogDispatcher
{
@@ -30,10 +31,10 @@ public:
CGeneralMessagesLogDispatcher();
~CGeneralMessagesLogDispatcher();
int AddLogMessage(QString LogLine, bool AddToGUILogPanel = true, int MsgVerbosity = 1, eGenMsgTextErrorStatus TxtErrStatus = GEN_MSG_TXT_NO_ERROR_STATUS);
int AddLogMessage(QString LogLine, QString Module, bool AddToGUILogPanel = true, int MsgVerbosity = 1, eGenMsgTextErrorStatus TxtErrStatus = GEN_MSG_TXT_NO_ERROR_STATUS);
CGeneralStatusPage *mGeneralStatusPageHandle;
int BindGuiPageHandle(CGeneralStatusPage *Handle);
int Init();
int Init(CSysLogger *SysLoggerPtr);
int SetLogVerbosities(int LogFileVerbosity, int GuiLogVerbosity);
private:
@@ -41,6 +42,7 @@ private:
QFile *mSystemLogFile;
int mLogFileVerbosity;
int mGuiLogVerbosity;
CSysLogger *mSysLoggerHandle;
};
@@ -154,6 +154,15 @@ int CGeneralStatusPage::ClearCANModuleStatusTable()
return RET_OK;
}
int CGeneralStatusPage::UpdateMQTTBufferingStatus(QString Mode, QString FIFOSize, QString RemainingTime)
{
ui->mBufferingMode->setText(Mode);
ui->mBufferSizeValue->setText(FIFOSize);
ui->mBufferTimeRemaining->setText(RemainingTime);
return RET_OK;
}
int CGeneralStatusPage::UpdateCANModuleStatus(QString ModuleName, QString ModuleStatus, QString Buffer)
{
QList<QTableWidgetItem *> Items = ui->mCANModuleStatusTableWdgt->findItems(ModuleName,Qt::MatchFixedString);
@@ -38,6 +38,7 @@ public:
int SetCANConnectionStatus(bool Connected);
int UpdateCANModuleStatus(QString ModuleName, QString ModuleStatus, QString Buffer);
int ClearCANModuleStatusTable();
int UpdateMQTTBufferingStatus(QString Mode, QString FIFOSize, QString RemainingTime);
private:
+162 -3
View File
@@ -150,14 +150,14 @@
</font>
</property>
<property name="text">
<string>Statut des module CAN </string>
<string>Statut des modules CAN </string>
</property>
</widget>
<widget class="QPushButton" name="mQuitAppBtn">
<property name="geometry">
<rect>
<x>1230</x>
<y>310</y>
<x>1470</x>
<y>550</y>
<width>131</width>
<height>22</height>
</rect>
@@ -166,6 +166,165 @@
<string>Quitter l'application</string>
</property>
</widget>
<widget class="QLabel" name="mInternetConnectedLbl">
<property name="geometry">
<rect>
<x>1230</x>
<y>270</y>
<width>61</width>
<height>16</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>Internet:</string>
</property>
</widget>
<widget class="QLabel" name="mInternetPresentStatLbl">
<property name="geometry">
<rect>
<x>1300</x>
<y>270</y>
<width>121</width>
<height>16</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Détecté</string>
</property>
</widget>
<widget class="QGroupBox" name="MQTTBufferingGrpBx">
<property name="geometry">
<rect>
<x>1210</x>
<y>320</y>
<width>391</width>
<height>141</height>
</rect>
</property>
<property name="title">
<string>Buffering MQTT</string>
</property>
<widget class="QLabel" name="mBufferingModeLbl">
<property name="geometry">
<rect>
<x>50</x>
<y>30</y>
<width>91</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Mode buffering:</string>
</property>
</widget>
<widget class="QLabel" name="mBufferSizeLbl">
<property name="geometry">
<rect>
<x>10</x>
<y>60</y>
<width>131</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Taille buffer circulaire:</string>
</property>
</widget>
<widget class="QLabel" name="mBufferTimeRemainingLbl">
<property name="geometry">
<rect>
<x>50</x>
<y>90</y>
<width>91</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Durée restante:</string>
</property>
</widget>
<widget class="QLabel" name="mBufferingMode">
<property name="geometry">
<rect>
<x>150</x>
<y>30</y>
<width>111</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>Inactif</string>
</property>
</widget>
<widget class="QLabel" name="mBufferSizeValue">
<property name="geometry">
<rect>
<x>150</x>
<y>60</y>
<width>131</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>0/5000</string>
</property>
</widget>
<widget class="QLabel" name="mBufferTimeRemaining">
<property name="geometry">
<rect>
<x>150</x>
<y>90</y>
<width>91</width>
<height>21</height>
</rect>
</property>
<property name="font">
<font>
<pointsize>10</pointsize>
</font>
</property>
<property name="text">
<string>xxx minutes</string>
</property>
</widget>
</widget>
</widget>
<resources/>
<connections/>
+10 -6
View File
@@ -57,17 +57,16 @@ int COtarcikCan::Start()
mMainWindow.show();
mSysLogger.Start("logs4.papertrailapp.com",27817);
CGeneralMessagesLogDispatcher::instance()->BindGuiPageHandle(mMainWindow.mGeneralStatusPage);
CGeneralMessagesLogDispatcher::instance()->Init();
// CGeneralMessagesLogDispatcher::instance()->Init();
// CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"));
CGeneralMessagesLogDispatcher::instance()->Init(&mSysLogger);
mCPUInterface.Init();
if(mSystemConfig.LoadConfig() == RET_OK)
{
QList<CCANDeviceConfig*> *CANDeviceConfigList;
CANDeviceConfigList = mSystemConfig.GetCANDevicesConfigList();
if(CANDeviceConfigList != 0)
@@ -106,7 +105,7 @@ int COtarcikCan::Start()
}
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"));
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Démarrage du logiciel OtarcikCAN"),"CPCANInterface");
// mCANBusMQTTClient.ConnectToBroker();
mCANBusMQTTClient.StartMQTTClient();
@@ -261,6 +260,11 @@ int COtarcikCan::UpdateCANModuleStatusRequest(QString ModuleName, QString Module
return mMainWindow.mGeneralStatusPage->UpdateCANModuleStatus(ModuleName,ModuleStatus,Buffer);
}
int COtarcikCan::UpdateMQTTBufferingStatusRequest(QString BufferingMode, QString FIFOSize, QString RemainingTime)
{
mMainWindow.mGeneralStatusPage->UpdateMQTTBufferingStatus(BufferingMode,FIFOSize,RemainingTime);
return RET_OK;
}
int COtarcikCan::SaveCANWatchdogSettingsRequest(CCANWatchdogConfig *CANWatchdogConfig)
{
+4
View File
@@ -10,6 +10,7 @@
#include "SystemConfig.h"
#include "MQTTClientWrapper.h"
#include "ComputerBoardInterface.h"
#include "SysLogger.h"
class COtarcikCan : public QObject
@@ -24,6 +25,7 @@ public:
QTimer *mGPTimer;
CComputerBoardInterface mCPUInterface;
QTimer *mWatchdogTimer;
CSysLogger mSysLogger;
int Start();
@@ -40,6 +42,8 @@ public:
int SetMQTTConnectionSatusRequest(bool Connected);
int UpdateCANModuleStatusRequest(QString ModuleName, QString ModuleStatus, QString Buffer);
int UpdateMQTTBufferingStatusRequest(QString BufferingMode, QString FIFOSize,QString RemainingTime);
int SaveCANWatchdogSettingsRequest(CCANWatchdogConfig *CANWatchdogConfig);
void QuitApplicationRequest();
+7 -7
View File
@@ -39,7 +39,7 @@ int CPCANInterface::GetDeviceHandle(quint8 DeviceID, TPCANHandle &Handle)
}
Handle = TempHandle;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Module PCAN trouvé à l'adresse %1 avec le handle 0x%2").arg(DeviceID).arg(Handle,0,16));
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Module PCAN trouvé à l'adresse %1 avec le handle 0x%2").arg(DeviceID).arg(Handle,0,16),"CPCANInterface");
return RET_OK;
}
@@ -51,7 +51,7 @@ int CPCANInterface::Init(TPCANHandle CANDeviceHandle, TPCANBaudrate CANBaudRate)
TPCANStatus Result;
Result = CAN_Initialize(CANDeviceHandle, CANBaudRate);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Initialisation d'un module PCAN. Handle:0x%1, Baudrate:%2").arg(CANDeviceHandle,0,16).arg(CANBaudRate));
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Initialisation d'un module PCAN. Handle:0x%1, Baudrate:%2").arg(CANDeviceHandle,0,16).arg(CANBaudRate),"CPCANInterface");
if(Result != PCAN_ERROR_OK)
{
@@ -60,14 +60,14 @@ 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,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible d'initialiser un module USB PCAN. Erreur:%1").arg(strMsg),"CPCANInterface",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CANInterfaceOpened = false;
return RET_GENERAL_ERROR;
}
else
{
CANInterfaceOpened = true;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Module PCAN USB initialisé avec succès",true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Module PCAN USB initialisé avec succès","CPCANInterface",true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
}
return RET_OK;
}
@@ -75,17 +75,17 @@ int CPCANInterface::Init(TPCANHandle CANDeviceHandle, TPCANBaudrate CANBaudRate)
int CPCANInterface::DeInit()
{
TPCANStatus Result;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Déinitialisation du module PCAN USB ID %1").arg(mInterfaceCANHandle));
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Déinitialisation du module PCAN USB ID %1").arg(mInterfaceCANHandle),"CPCANInterface");
Result = CAN_Uninitialize(mInterfaceCANHandle) != PCAN_ERROR_OK;
if(Result)
{
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,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Impossible de déinitialiser un module USB PCAN.. Error:%1").arg(strMsg),"CPCANInterface",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
}
else
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Module PCAN USB déinitialisé avec succès...",true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Module PCAN USB déinitialisé avec succès...","CPCANInterface",true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
}
return RET_OK;
+75
View File
@@ -0,0 +1,75 @@
#include "SysLogger.h"
#include "defines.h"
#include <QDateTime>
#include <QString>
CSysLogger::CSysLogger(QObject *parent) : QObject(parent)
{
connect(&mSyslogSocket,&QAbstractSocket::stateChanged,this,&CSysLogger::SocketStateChanged);
}
int CSysLogger::Start(QString SyslogServerAddress, int SyslogServerPort)
{
mSyslogServerAddress = SyslogServerAddress;
mSyslogServerPort = SyslogServerPort;
mSyslogSocket.connectToHost(SyslogServerAddress,SyslogServerPort);
return RET_OK;
}
void CSysLogger::SocketStateChanged(QAbstractSocket::SocketState socketState)
{
qDebug("Syslog socked state : %d",socketState);
switch (socketState)
{
case QAbstractSocket::ConnectedState:
{
qDebug("Syslogger connected...");
SysLog("Syslogger connected","CSysLogger");
break;
}
case QAbstractSocket::UnconnectedState:
{
break;
}
default:
{
qDebug("Syslogger Disconnected...");
break;
}
}
}
bool CSysLogger::IsSyslogServerConnected()
{
int strate = mSyslogSocket.state();
if(mSyslogSocket.state() == QAbstractSocket::ConnectedState || mSyslogSocket.state() == QAbstractSocket::BoundState)
return true;
return false;
}
int CSysLogger::SysLog(QString Message, QString Module)
{
if(IsSyslogServerConnected() == false)
return RET_GENERAL_ERROR;
QString MsgString;
//ISO date timestamp format
QDateTime datetime(QDateTime::currentDateTime());
datetime.setOffsetFromUtc(datetime.offsetFromUtc()); //this makes no sense but it's to circumvent a bug in QT
MsgString = datetime.toString(Qt::ISODate);
MsgString.append(" Station_OT2301 OtarcikCAN");
if(Module.isEmpty() == false)
{
MsgString.append(QString("[%1]").arg(Module));
}
MsgString.append(QString(":%1").arg(Message));
MsgString.append("\n\r");
mSyslogSocket.write(MsgString.toUtf8());
return RET_OK;
}
+31
View File
@@ -0,0 +1,31 @@
#ifndef SYSLOGGER_H
#define SYSLOGGER_H
#include <QObject>
#include <QTcpSocket>
#include <QUdpSocket>
class CSysLogger : public QObject
{
Q_OBJECT
public:
explicit CSysLogger(QObject *parent = 0);
int Start(QString SyslogServerAddress,int SyslogServerPort);
bool IsSyslogServerConnected();
int SysLog(QString Message, QString Module = "");
QTcpSocket mSyslogSocket;
private:
QString mSyslogServerAddress;
int mSyslogServerPort;
signals:
public slots:
void SocketStateChanged(QAbstractSocket::SocketState socketState);
};
#endif // SYSLOGGER_H
+9 -9
View File
@@ -16,7 +16,7 @@ CSystemConfig::~CSystemConfig()
int CSystemConfig::LoadConfig()
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Chargement de la configuration système..."));
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Chargement de la configuration système..."),"CPCANInterface");
// if(DevicesList == 0)
// {
// qDebug("CSystemConfig: Trying to load a config into an invalid devices list");
@@ -30,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,1,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"),"CPCANInterface",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,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Pointeur vers QFile invalide !!!"),"CPCANInterface",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
qDebug("CSystemConfig: Invalid QFile pointer in config loading...");
return RET_GENERAL_ERROR;
}
@@ -50,7 +50,7 @@ int CSystemConfig::LoadConfig()
*InputStream >> MagicNbr;
if(MagicNbr != OTARCIK_CONFIG_FILE_MAGIC_NBR)
{
// CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Fichier /Config/Station.cfg corrompu. Création d'une config vide"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_WARNING_STATUS);
// CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Fichier /Config/Station.cfg corrompu. Création d'une config vide"),"CPCANInterface",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_WARNING_STATUS);
ConfigFile->close();
// CreateEmptyConfig();
return RET_GENERAL_ERROR;
@@ -90,26 +90,26 @@ int CSystemConfig::LoadConfig()
delete ConfigFile;
delete InputStream;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système chargée avec succès!"),true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système chargée avec succès!"),"CPCANInterface",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
return RET_OK;
}
int CSystemConfig::SaveConfig()
{
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Sauvegarde de la configuration système..."));
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Sauvegarde de la configuration système..."),"CPCANInterface");
QFile *ConfigFile = new QFile("./Config/Station.cfg");
if(ConfigFile)
{
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,1,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"),"CPCANInterface",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,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Échec de sauvegarde de la config système. Pointeur vers QFile invalide !!!"),"CPCANInterface",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
return RET_GENERAL_ERROR;
}
@@ -148,7 +148,7 @@ int CSystemConfig::SaveConfig()
delete ConfigFile;
delete OutputStream;
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système sauvegardée avec succès."),true,3,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Configuration système sauvegardée avec succès."),"CPCANInterface",true,3,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
return RET_OK;
}