diff --git a/Otarcik_CAN/Config/Station.cfg b/Otarcik_CAN/Config/Station.cfg index 0cf28b5..6468d68 100644 Binary files a/Otarcik_CAN/Config/Station.cfg and b/Otarcik_CAN/Config/Station.cfg differ diff --git a/Otarcik_CAN/Logs/SystemLog.txt b/Otarcik_CAN/Logs/SystemLog.txt index f6e5190..6b8facf 100644 --- a/Otarcik_CAN/Logs/SystemLog.txt +++ b/Otarcik_CAN/Logs/SystemLog.txt @@ -9594,3 +9594,122 @@ Démarrage du logiciel Otarcik CAN le 2024-03-05 à 16:27:35 2024-03-05 16:27:35 Démarrage du Watchdog CAN... 2024-03-05 16:27:35 Watchdog CAN initialisé pour le module sur le channel 1 2024-03-05 16:27:35 Dispositif [MasterCAN] initialisé avec succès! + + +******************************************************************** +Démarrage du logiciel Otarcik CAN le 2024-03-09 à 11:18:08 +******************************************************************** +2024-03-09 11:18:08 Librairie Axiomtek chargée avec succès +2024-03-09 11:18:08 Watchdog CPU arrêté +2024-03-09 11:18:08 Chargement de la configuration système... +2024-03-09 11:18:08 Configuration système chargée avec succès! +2024-03-09 11:18:08 Initialisation du dispositif [MasterCAN] +2024-03-09 11:18:08 Démarrage d'un module CAN... +2024-03-09 11:18:08 Module PCAN trouvé à l'adresse 1 avec le handle 0x51 +2024-03-09 11:18:08 Initialisation d'un module PCAN. Handle:0x51, Baudrate:28 +2024-03-09 11:18:08 Module PCAN USB initialisé avec succès +2024-03-09 11:18:08 Chargement de la base de données D:/Main/Dev/YULTek/Otarcik_CAN/PCtelemetrie20240118.dbc +2024-03-09 11:18:08 Base de données chargée avec succès. Flags: 0x0 +2024-03-09 11:18:08 Dispositif [MasterCAN] initialisé avec succès! + + +******************************************************************** +Démarrage du logiciel Otarcik CAN le 2024-03-09 à 11:21:09 +******************************************************************** +2024-03-09 11:21:09 Librairie Axiomtek chargée avec succès +2024-03-09 11:21:09 Watchdog CPU arrêté +2024-03-09 11:21:09 Chargement de la configuration système... +2024-03-09 11:21:09 Configuration système chargée avec succès! +2024-03-09 11:21:09 Initialisation du dispositif [MasterCAN] +2024-03-09 11:21:09 Démarrage d'un module CAN... +2024-03-09 11:21:09 Module PCAN trouvé à l'adresse 1 avec le handle 0x51 +2024-03-09 11:21:09 Initialisation d'un module PCAN. Handle:0x51, Baudrate:28 +2024-03-09 11:21:09 Module PCAN USB initialisé avec succès +2024-03-09 11:21:09 Chargement de la base de données D:/Main/Dev/YULTek/Otarcik_CAN/PCtelemetrie20240118.dbc +2024-03-09 11:21:09 Base de données chargée avec succès. Flags: 0x0 +2024-03-09 11:21:09 Dispositif [MasterCAN] initialisé avec succès! + + +******************************************************************** +Démarrage du logiciel Otarcik CAN le 2024-03-09 à 11:34:27 +******************************************************************** +2024-03-09 11:34:27 Librairie Axiomtek chargée avec succès +2024-03-09 11:34:27 Watchdog CPU arrêté +2024-03-09 11:34:27 Chargement de la configuration système... +2024-03-09 11:34:27 Configuration système chargée avec succès! +2024-03-09 11:34:27 Initialisation du dispositif [MasterCAN] +2024-03-09 11:34:27 Démarrage d'un module CAN... +2024-03-09 11:34:27 Module PCAN trouvé à l'adresse 1 avec le handle 0x51 +2024-03-09 11:34:27 Initialisation d'un module PCAN. Handle:0x51, Baudrate:28 +2024-03-09 11:34:27 Module PCAN USB initialisé avec succès +2024-03-09 11:34:27 Chargement de la base de données D:/Main/Dev/YULTek/Otarcik_CAN/PCtelemetrie20240118.dbc +2024-03-09 11:34:27 Base de données chargée avec succès. Flags: 0x0 +2024-03-09 11:34:27 Dispositif [MasterCAN] initialisé avec succès! + + +******************************************************************** +Démarrage du logiciel Otarcik CAN le 2024-03-09 à 11:44:35 +******************************************************************** +2024-03-09 11:44:35 Librairie Axiomtek chargée avec succès +2024-03-09 11:44:35 Watchdog CPU arrêté +2024-03-09 11:44:35 Chargement de la configuration système... +2024-03-09 11:44:35 Configuration système chargée avec succès! +2024-03-09 11:44:35 Initialisation du dispositif [MasterCAN] +2024-03-09 11:44:35 Démarrage d'un module CAN... +2024-03-09 11:44:35 Module PCAN trouvé à l'adresse 1 avec le handle 0x51 +2024-03-09 11:44:35 Initialisation d'un module PCAN. Handle:0x51, Baudrate:28 +2024-03-09 11:44:35 Module PCAN USB initialisé avec succès +2024-03-09 11:44:35 Chargement de la base de données D:/Main/Dev/YULTek/Otarcik_CAN/PCtelemetrie20240118.dbc +2024-03-09 11:44:35 Base de données chargée avec succès. Flags: 0x0 +2024-03-09 11:44:35 Dispositif [MasterCAN] initialisé avec succès! + + +******************************************************************** +Démarrage du logiciel Otarcik CAN le 2024-03-09 à 11:45:34 +******************************************************************** +2024-03-09 11:45:34 Librairie Axiomtek chargée avec succès +2024-03-09 11:45:34 Watchdog CPU arrêté +2024-03-09 11:45:34 Chargement de la configuration système... +2024-03-09 11:45:34 Configuration système chargée avec succès! +2024-03-09 11:45:34 Initialisation du dispositif [MasterCAN] +2024-03-09 11:45:34 Démarrage d'un module CAN... +2024-03-09 11:45:34 Module PCAN trouvé à l'adresse 1 avec le handle 0x51 +2024-03-09 11:45:34 Initialisation d'un module PCAN. Handle:0x51, Baudrate:28 +2024-03-09 11:45:34 Module PCAN USB initialisé avec succès +2024-03-09 11:45:34 Chargement de la base de données D:/Main/Dev/YULTek/Otarcik_CAN/PCtelemetrie20240118.dbc +2024-03-09 11:45:34 Base de données chargée avec succès. Flags: 0x0 +2024-03-09 11:45:34 Dispositif [MasterCAN] initialisé avec succès! + + +******************************************************************** +Démarrage du logiciel Otarcik CAN le 2024-03-09 à 11:47:24 +******************************************************************** +2024-03-09 11:47:24 Librairie Axiomtek chargée avec succès +2024-03-09 11:47:24 Watchdog CPU arrêté +2024-03-09 11:47:24 Chargement de la configuration système... +2024-03-09 11:47:24 Configuration système chargée avec succès! +2024-03-09 11:47:24 Initialisation du dispositif [MasterCAN] +2024-03-09 11:47:24 Démarrage d'un module CAN... +2024-03-09 11:47:24 Module PCAN trouvé à l'adresse 1 avec le handle 0x51 +2024-03-09 11:47:24 Initialisation d'un module PCAN. Handle:0x51, Baudrate:28 +2024-03-09 11:47:24 Module PCAN USB initialisé avec succès +2024-03-09 11:47:24 Chargement de la base de données D:/Main/Dev/YULTek/Otarcik_CAN/PCtelemetrie20240118.dbc +2024-03-09 11:47:24 Base de données chargée avec succès. Flags: 0x0 +2024-03-09 11:47:24 Dispositif [MasterCAN] initialisé avec succès! + + +******************************************************************** +Démarrage du logiciel Otarcik CAN le 2024-03-09 à 11:53:09 +******************************************************************** +2024-03-09 11:53:09 Librairie Axiomtek chargée avec succès +2024-03-09 11:53:09 Watchdog CPU arrêté +2024-03-09 11:53:09 Chargement de la configuration système... +2024-03-09 11:53:09 Configuration système chargée avec succès! +2024-03-09 11:53:09 Initialisation du dispositif [MasterCAN] +2024-03-09 11:53:09 Démarrage d'un module CAN... +2024-03-09 11:53:09 Module PCAN trouvé à l'adresse 1 avec le handle 0x51 +2024-03-09 11:53:09 Initialisation d'un module PCAN. Handle:0x51, Baudrate:28 +2024-03-09 11:53:09 Module PCAN USB initialisé avec succès +2024-03-09 11:53:09 Chargement de la base de données D:/Main/Dev/YULTek/Otarcik_CAN/PCtelemetrie20240118.dbc +2024-03-09 11:53:09 Base de données chargée avec succès. Flags: 0x0 +2024-03-09 11:53:09 Dispositif [MasterCAN] initialisé avec succès! diff --git a/Otarcik_CAN/PCtelemetrie20240118.dbf b/Otarcik_CAN/PCtelemetrie20240118.dbf index c9a06ac..3aacab8 100644 --- a/Otarcik_CAN/PCtelemetrie20240118.dbf +++ b/Otarcik_CAN/PCtelemetrie20240118.dbf @@ -123,8 +123,16 @@ [START_SIGNALS] batt1_high_cell_t,8,1,0,I,127,-128,1,0.000000,1.000000,°C, [END_MSG] -[START_MSG] PC_dateTime,768,8,1,1,S +[START_MSG] PC_dateTime,768,8,9,1,S [START_SIGNALS] internetSeemsDead,1,5,0,B,1,0,1,0.000000,1.000000,, +[START_SIGNALS] MQTTSeemsDead,1,5,1,B,1,0,1,0.000000,1.000000,, +[START_SIGNALS] LANDevice1SeemsDead,1,5,2,B,1,0,1,0.000000,1.000000,, +[START_SIGNALS] LANDevice2SeemsDead,1,5,3,B,1,0,1,0.000000,1.000000,, +[START_SIGNALS] LANDevice3SeemsDead,1,5,4,B,1,0,1,0.000000,1.000000,, +[START_SIGNALS] LANDevice4SeemsDead,1,5,5,B,1,0,1,0.000000,1.000000,, +[START_SIGNALS] LANDevice5SeemsDead,1,5,6,B,1,0,1,0.000000,1.000000,, +[START_SIGNALS] PC_Time,16,3,0,U,65535,0,1,0.000000,0.000100,, +[START_SIGNALS] PC_Date,16,1,0,U,65535,0,1,0.000000,1.000000,d, [END_MSG] [START_MSG] WDT_state,512,8,0,1,S diff --git a/Otarcik_CAN/Sources/CANBus/CANDevice.cpp b/Otarcik_CAN/Sources/CANBus/CANDevice.cpp index cb1bbe5..88693b9 100644 --- a/Otarcik_CAN/Sources/CANBus/CANDevice.cpp +++ b/Otarcik_CAN/Sources/CANBus/CANDevice.cpp @@ -93,17 +93,6 @@ int CCANDevice::Init() return RET_GENERAL_ERROR; } - if(mDeviceConfigInfo.mDeviceWatchdogActivated == true) - { - if(mCANWatchdog.Init(mCANDriverIF,mDeviceHandle,mDeviceConfigInfo.mWatchdogPeriod,mDeviceConfigInfo.mWatchdogCANMsgID) != RET_OK) - { - 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,"CCANDevice",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS); - } mIsCANInitialized = true; @@ -120,6 +109,25 @@ int CCANDevice::Init() return RET_OK; } +int CCANDevice::StartWatchdog(CDeviceDetectionConfig *DeviceMonitorConfig) +{ + if(mDeviceConfigInfo.mDeviceWatchdogActivated == true) + { + if(mCANWatchdog.Init(mCANDriverIF,mDeviceHandle,mDeviceConfigInfo.mWatchdogPeriod,DeviceMonitorConfig) != RET_OK) + { + CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Impossible d'initialiser un watchdog CAN","CCANDevice",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS); + } + else + { + + mCANWatchdog.StartWDT(); + + QString Log = QString("Watchdog CAN initialisé pour le module sur le channel %1").arg(mDeviceConfigInfo.mCANDeviceID); + CGeneralMessagesLogDispatcher::instance()->AddLogMessage(Log,"CCANDevice",true,1,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS); + } + } +} + int CCANDevice::Init(QString DatabaseFileName, TPCANHandle CANDeviceID, TPCANBaudrate CANDeviceBaudRate, QString DevDescription, QString DeviceName, unsigned int DevicePollPeriod) { mDeviceConfigInfo.mCANDeviceID = CANDeviceID; diff --git a/Otarcik_CAN/Sources/CANBus/CANDevice.h b/Otarcik_CAN/Sources/CANBus/CANDevice.h index 500a544..f86e2e6 100644 --- a/Otarcik_CAN/Sources/CANBus/CANDevice.h +++ b/Otarcik_CAN/Sources/CANBus/CANDevice.h @@ -13,10 +13,11 @@ #include "CANDataLogger.h" #include "MQTTMessage.h" #include "CANWatchdog.h" -//#include "MQTTClientWrapper.h" + class CMQTTClientWrapper; class COtarcikCan; +class CDeviceDetectionConfig; class CCANDevice : public QObject { @@ -28,6 +29,7 @@ public: int Init(QString DatabaseFileName, TPCANHandle CANDeviceID, TPCANBaudrate CANDeviceBaudRate, QString DevDescription, QString DeviceName, unsigned int DevicePollPeriod); int Init(); + int StartWatchdog(CDeviceDetectionConfig *DeviceMonitorConfig); QList *GetCANMessagesList(){return &mMessageList;} public: diff --git a/Otarcik_CAN/Sources/CANBus/CANDeviceConfig.h b/Otarcik_CAN/Sources/CANBus/CANDeviceConfig.h index d3b498f..ecfebe2 100644 --- a/Otarcik_CAN/Sources/CANBus/CANDeviceConfig.h +++ b/Otarcik_CAN/Sources/CANBus/CANDeviceConfig.h @@ -23,6 +23,7 @@ public: unsigned int mWatchdogPeriod; CCANDeviceConfig &operator=(const CCANDeviceConfig &source); + }; QDataStream &operator<<(QDataStream &out, const CCANDeviceConfig &source); diff --git a/Otarcik_CAN/Sources/CANBus/CANWatchdog.cpp b/Otarcik_CAN/Sources/CANBus/CANWatchdog.cpp index 9a4bd38..4224004 100644 --- a/Otarcik_CAN/Sources/CANBus/CANWatchdog.cpp +++ b/Otarcik_CAN/Sources/CANBus/CANWatchdog.cpp @@ -4,21 +4,29 @@ #include #include #include +#include "MQTTClientWrapper.h" +#include "InternetMonitor.h" +#include "LANDevicesPresenceMonitor.h" +#include "DeviceDetectionConfig.h" CCANWatchdog::CCANWatchdog() { - mCANDriverIF = new CPCANInterface; + //mCANDriverIF = new CPCANInterface; mIsCANInitialized = false; mWatchdogTimer = new QTimer; mWatchdogTimer->setSingleShot(false); mCANDriverIF = 0; mWDTInitialized = false; +// mMQTTPresenceMonitor = 0; +// mLANDevicesMonitor = 0; +// mInternetMonitor = 0; + mDevicesMonitorConfig = 0; connect(mWatchdogTimer,&QTimer::timeout,this,&CCANWatchdog::WatchdogTimeoutTimerExpired); } -int CCANWatchdog::Init(CPCANInterface *CANDriverIF, TPCANHandle CANDeviceHandle, unsigned int WDTPeriod, unsigned int CANMsgID) +int CCANWatchdog::Init(CPCANInterface *CANDriverIF, TPCANHandle CANDeviceHandle, unsigned int WDTPeriod, CDeviceDetectionConfig *DevicesMonitorConfig) { if(WDTPeriod < 200) { @@ -27,6 +35,7 @@ int CCANWatchdog::Init(CPCANInterface *CANDriverIF, TPCANHandle CANDeviceHandle, return RET_GENERAL_ERROR; } + mDevicesMonitorConfig = DevicesMonitorConfig; mCANDeviceHandle = CANDeviceHandle; mWDTPeriod = WDTPeriod; mCANDriverIF = CANDriverIF; @@ -35,7 +44,7 @@ int CCANWatchdog::Init(CPCANInterface *CANDriverIF, TPCANHandle CANDeviceHandle, mWatchdogTimer->setInterval(mWDTPeriod); mWatchdogTimer->setSingleShot(false); - mWDTCANMsg.mCANMsgID = CANMsgID; + mWDTCANMsg.mCANMsgID = DevicesMonitorConfig->mReportingCANMsgID; mWDTCANMsg.mCANMsgLength = 8; mWDTCANMsg.mCANMsgData.clear(); mWDTCANMsg.mCANMsgData.append(8,(char)0x00); @@ -65,7 +74,30 @@ void CCANWatchdog::WatchdogTimeoutTimerExpired() // BigData |= 0x100000000; BigData = GetCANDateTimeBuffer(); + if(mDevicesMonitorConfig != 0) + { + if(mDevicesMonitorConfig->mInternetMonitor != 0) + { + BigData |= mDevicesMonitorConfig->mInternetMonitor->GetCANInternetStatusMask(); + } + } + if(mDevicesMonitorConfig != 0) + { + if(mDevicesMonitorConfig->mMQTTPresenceMonitor != 0) + { + BigData |= mDevicesMonitorConfig->mMQTTPresenceMonitor->GetMQTTServerPresenceCANMask(); + } + } + if(mDevicesMonitorConfig != 0) + { + if(mDevicesMonitorConfig->mLANDevicesMonitor != 0) + { + BigData |= mDevicesMonitorConfig->mLANDevicesMonitor->GetDevicesPresenceCANMask(); + } + } + + mWDTCANMsg.mCANMsgID = mDevicesMonitorConfig->mReportingCANMsgID; mWDTCANMsg.SetRawData(BigData,CCANSignal::CAN_SIGNAL_ENCODING_INTEL); mCANDriverIF->SendCANMessage(mCANDeviceHandle,mWDTCANMsg); @@ -93,6 +125,11 @@ quint64 CCANWatchdog::GetCANDateTimeBuffer() return OutputBuffer; } +int CCANWatchdog::SetDevicesDetectionConfig(CDeviceDetectionConfig *DeviceMonitoringConfig) +{ + mDevicesMonitorConfig = DeviceMonitoringConfig; +} + int CCANWatchdog::StartWDT() { if(mWDTInitialized == false) diff --git a/Otarcik_CAN/Sources/CANBus/CANWatchdog.h b/Otarcik_CAN/Sources/CANBus/CANWatchdog.h index 84fa7d4..d8f57ba 100644 --- a/Otarcik_CAN/Sources/CANBus/CANWatchdog.h +++ b/Otarcik_CAN/Sources/CANBus/CANWatchdog.h @@ -11,6 +11,11 @@ //Parker controller. This controller uses this update as a watchdog signal, but the register contains //some useful data for the Parker controller as well. +class CMQTTClientWrapper; +class CLANDevicesPresenceMonitor; +class CInternetMonitor; +class CDeviceDetectionConfig; + class CCANWatchdog: public QObject { Q_OBJECT @@ -18,11 +23,12 @@ class CCANWatchdog: public QObject public: CCANWatchdog(); - int Init(CPCANInterface *CANDriverIF, TPCANHandle CANDeviceHandle, unsigned int WDTPeriod,unsigned int CANMsgID); - int StartWDT(); - int StopWDT(); - bool IsInitialized(){return mWDTInitialized;} - quint64 GetCANDateTimeBuffer(); + int Init(CPCANInterface *CANDriverIF, TPCANHandle CANDeviceHandle, unsigned int WDTPeriod, CDeviceDetectionConfig *DevicesMonitorConfig); + int StartWDT(); + int StopWDT(); + bool IsInitialized(){return mWDTInitialized;} + quint64 GetCANDateTimeBuffer(); + int SetDevicesDetectionConfig(CDeviceDetectionConfig *DeviceMonitoringConfig); CPCANInterface *mCANDriverIF; unsigned int mWDTPeriod; @@ -30,10 +36,17 @@ public: bool mWDTInitialized; CCANMessage mWDTCANMsg; + + private: bool mIsCANInitialized; TPCANHandle mCANDeviceHandle; +// CMQTTClientWrapper *mMQTTPresenceMonitor; +// CLANDevicesPresenceMonitor *mLANDevicesMonitor; +// CInternetMonitor *mInternetMonitor; + CDeviceDetectionConfig *mDevicesMonitorConfig; + public slots: void WatchdogTimeoutTimerExpired(); diff --git a/Otarcik_CAN/Sources/CloudLogging/MQTTClientWrapper.cpp b/Otarcik_CAN/Sources/CloudLogging/MQTTClientWrapper.cpp index 851aba0..dc0dbcc 100644 --- a/Otarcik_CAN/Sources/CloudLogging/MQTTClientWrapper.cpp +++ b/Otarcik_CAN/Sources/CloudLogging/MQTTClientWrapper.cpp @@ -25,6 +25,7 @@ CMQTTClientWrapper::CMQTTClientWrapper() mProgramPtr = 0; mCPUInterface = 0; + mMQTTPresenceCANBit = 0; mMessagesQueueMode = MQTT_DROP_MSG_MODE; mDisconnectionIsVoluntary = false; mIsClientConnecting = false; @@ -51,6 +52,12 @@ int CMQTTClientWrapper::SetMQTTParams(CCloudParams *Params) int CMQTTClientWrapper::SetCPUInterface(CComputerBoardInterface *CPUIF) { mCPUInterface = CPUIF; + return RET_OK; +} + +int CMQTTClientWrapper::SetMQTTServerPresenceCANBit(quint64 CANBit) +{ + mMQTTPresenceCANBit = CANBit; } int CMQTTClientWrapper::StartMQTTClient() @@ -120,6 +127,19 @@ int CMQTTClientWrapper::NewMQTTMessages(QList MessagesList) return RET_OK; } +quint64 CMQTTClientWrapper::GetMQTTServerPresenceCANMask() +{ + if(mMQTTClient.state() == QMqttClient::Connected) + { + return 0; + } + + quint64 Mask = 1; + Mask <<= mMQTTPresenceCANBit; + + return Mask; +} + void CMQTTClientWrapper::StateChanged() { switch(mMQTTClient.state()) diff --git a/Otarcik_CAN/Sources/CloudLogging/MQTTClientWrapper.h b/Otarcik_CAN/Sources/CloudLogging/MQTTClientWrapper.h index b89db51..a890486 100644 --- a/Otarcik_CAN/Sources/CloudLogging/MQTTClientWrapper.h +++ b/Otarcik_CAN/Sources/CloudLogging/MQTTClientWrapper.h @@ -30,6 +30,7 @@ public: ~CMQTTClientWrapper(); int SetMQTTParams(CCloudParams *Params); int SetCPUInterface(CComputerBoardInterface *CPUIF); + int SetMQTTServerPresenceCANBit(quint64 CANBit); int ConnectToBroker(); int NewMQTTMessages(QList MessagesList); int DisconnectFromBroker(); @@ -37,6 +38,7 @@ public: int SetCANDevicesList(QList *List); int StartMQTTClient(); int StopMQTTClient(); + quint64 GetMQTTServerPresenceCANMask(); @@ -56,6 +58,7 @@ private: CComputerBoardInterface *mCPUInterface; int SendNextQueueMessage(); + quint64 mMQTTPresenceCANBit; int UpdateGUIBufferingStatus(); diff --git a/Otarcik_CAN/Sources/DeviceDetectionConfig.cpp b/Otarcik_CAN/Sources/DeviceDetectionConfig.cpp index 9c429fc..3757782 100644 --- a/Otarcik_CAN/Sources/DeviceDetectionConfig.cpp +++ b/Otarcik_CAN/Sources/DeviceDetectionConfig.cpp @@ -10,6 +10,10 @@ CDeviceDetectionConfig::CDeviceDetectionConfig() mLANDeviceDetectConfigList.append(CLANDevicePresenceConfig()); } mReportingCANMsgID = 300; + + mMQTTPresenceMonitor = 0; + mLANDevicesMonitor = 0; + mInternetMonitor = 0; } QList *CDeviceDetectionConfig::GetLANDevicesConfigList() @@ -35,6 +39,16 @@ QDataStream &operator>>(QDataStream &in, CDeviceDetectionConfig &dest) return in; } + +int CDeviceDetectionConfig::SetCANPresenceMonitors(CMQTTClientWrapper *MQTTPresenceMonitor, CLANDevicesPresenceMonitor *LANDevicesMonitor, CInternetMonitor *InternetMonitor) +{ + mMQTTPresenceMonitor = MQTTPresenceMonitor; + mLANDevicesMonitor = LANDevicesMonitor; + mInternetMonitor = InternetMonitor; + return RET_OK; + +} + QDataStream &operator<<(QDataStream &out, const CDeviceDetectionConfig &source) { out << source.mInternetDetectionCANStatusBit diff --git a/Otarcik_CAN/Sources/DeviceDetectionConfig.h b/Otarcik_CAN/Sources/DeviceDetectionConfig.h index f6ceb89..04b8921 100644 --- a/Otarcik_CAN/Sources/DeviceDetectionConfig.h +++ b/Otarcik_CAN/Sources/DeviceDetectionConfig.h @@ -4,6 +4,11 @@ #include "LANDevicePresenceConfig.h" #include + +class CMQTTClientWrapper; +class CLANDevicesPresenceMonitor; +class CInternetMonitor; + class CDeviceDetectionConfig { public: @@ -16,8 +21,13 @@ public: quint64 mMQTTDetectionCANStatusBit; QList mLANDeviceDetectConfigList; + CMQTTClientWrapper *mMQTTPresenceMonitor; + CLANDevicesPresenceMonitor *mLANDevicesMonitor; + CInternetMonitor *mInternetMonitor; - CDeviceDetectionConfig &operator=(const CDeviceDetectionConfig &source); + int SetCANPresenceMonitors(CMQTTClientWrapper* MQTTPresenceMonitor, CLANDevicesPresenceMonitor *LANDevicesMonitor, CInternetMonitor *InternetMonitor); + + CDeviceDetectionConfig &operator=(const CDeviceDetectionConfig &source); }; QDataStream &operator<<(QDataStream &out, const CDeviceDetectionConfig &source); diff --git a/Otarcik_CAN/Sources/Gui/CANbusSettingsPage.ui b/Otarcik_CAN/Sources/Gui/CANbusSettingsPage.ui index b5cf6ed..e308561 100644 --- a/Otarcik_CAN/Sources/Gui/CANbusSettingsPage.ui +++ b/Otarcik_CAN/Sources/Gui/CANbusSettingsPage.ui @@ -60,7 +60,7 @@ 270 100 321 - 461 + 431 @@ -119,7 +119,7 @@ 210 - 420 + 390 80 22 @@ -216,7 +216,7 @@ 20 - 420 + 390 80 22 @@ -309,67 +309,6 @@ Période rafraîchissement (ms): - - - - 10 - 380 - 111 - 16 - - - - - 10 - - - - CAN Msg ID (HEX): - - - - - - 110 - 380 - 30 - 20 - - - - - 10 - - - - 0x - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - 140 - 380 - 91 - 20 - - - - 1 - - - 2048 - - - 1 - - - 16 - - @@ -551,6 +490,67 @@ + + + + 370 + 610 + 30 + 20 + + + + + 10 + + + + 0x + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + 400 + 610 + 91 + 20 + + + + 1 + + + 2048 + + + 1 + + + 16 + + + + + + 270 + 610 + 111 + 16 + + + + + 10 + + + + CAN Msg ID (HEX): + + diff --git a/Otarcik_CAN/Sources/InternetMonitor.cpp b/Otarcik_CAN/Sources/InternetMonitor.cpp index 0166aa0..367ae65 100644 --- a/Otarcik_CAN/Sources/InternetMonitor.cpp +++ b/Otarcik_CAN/Sources/InternetMonitor.cpp @@ -45,6 +45,13 @@ int CInternetMonitor::Start(quint64 CANReportingBit) return RET_OK; } +int CInternetMonitor::UpdateCANReportingBit(quint64 CANBit) +{ + mCANReportingMask = 1; + mCANReportingMask <<= CANBit; + return RET_OK; +} + int CInternetMonitor::CheckInternet() { if(mConnectionTimer->isActive()) //are we waiting for a reply?? diff --git a/Otarcik_CAN/Sources/InternetMonitor.h b/Otarcik_CAN/Sources/InternetMonitor.h index a938750..754b007 100644 --- a/Otarcik_CAN/Sources/InternetMonitor.h +++ b/Otarcik_CAN/Sources/InternetMonitor.h @@ -15,6 +15,7 @@ public: explicit CInternetMonitor(QObject *parent = 0); ~CInternetMonitor(); int Start(quint64 CANReportingBit); + int UpdateCANReportingBit(quint64 CANBit); bool IsInternetActive(); quint64 GetCANInternetStatusMask(); diff --git a/Otarcik_CAN/Sources/LANDeviceMonitor.cpp b/Otarcik_CAN/Sources/LANDeviceMonitor.cpp index d7ace42..983f116 100644 --- a/Otarcik_CAN/Sources/LANDeviceMonitor.cpp +++ b/Otarcik_CAN/Sources/LANDeviceMonitor.cpp @@ -44,16 +44,18 @@ int CLANDeviceMonitor::PingDevice() CLANDeviceMonitor::~CLANDeviceMonitor() { - if(mDevMonitorTimer != 0) - { - mDevMonitorTimer->stop(); - delete mDevMonitorTimer; - } if(mPingProcess != 0) { mPingProcess->terminate(); delete mPingProcess; } + if(mDevMonitorTimer != 0) + { + mDevMonitorTimer->stop(); + mDevMonitorTimer = 0; + delete mDevMonitorTimer; + } + } @@ -94,7 +96,8 @@ void CLANDeviceMonitor::PingProcessFinished(int exitCode, QProcess::ExitStatus e } GetDeviceCANStatusMask(); - mDevMonitorTimer->start(LAN_DEVICE_MONITOR_PRESENCE_CHECK_TIMEOUT); + if(mDevMonitorTimer != 0) + mDevMonitorTimer->start(LAN_DEVICE_MONITOR_PRESENCE_CHECK_TIMEOUT); } diff --git a/Otarcik_CAN/Sources/OtarcikCan.cpp b/Otarcik_CAN/Sources/OtarcikCan.cpp index 71be0e5..8b18439 100644 --- a/Otarcik_CAN/Sources/OtarcikCan.cpp +++ b/Otarcik_CAN/Sources/OtarcikCan.cpp @@ -83,6 +83,7 @@ int COtarcikCan::Start() mCANBusMQTTClient.SetMQTTParams(&mCloudLoggingParams); mCANBusMQTTClient.SetCANDevicesList(&mCANDevicesList); mCANBusMQTTClient.SetCPUInterface(&mCPUInterface); + mCANBusMQTTClient.SetMQTTServerPresenceCANBit(mSystemConfig.GetDeviceDetectionConfig()->mMQTTDetectionCANStatusBit); mGeneralSystemParams = *mSystemConfig.GetGeneralSystemSettings(); mMainWindow.mDataLoggingSettingsPage->SetGeneralSettingsParams(&mGeneralSystemParams); @@ -95,9 +96,14 @@ int COtarcikCan::Start() mDeviceDetectionConfigParams = *mSystemConfig.GetDeviceDetectionConfig(); mMainWindow.mDataLoggingSettingsPage->SetDeviceConfigSettings(mSystemConfig.GetDeviceDetectionConfig()); - + mInternetMonitor.Start(mSystemConfig.GetDeviceDetectionConfig()->mInternetDetectionCANStatusBit); mLANDevicesPresenceMonitor.Start(mSystemConfig.GetDeviceDetectionConfig()->GetLANDevicesConfigList()); + mSystemConfig.mDeviceDetectionParams.SetCANPresenceMonitors(&mCANBusMQTTClient,&mLANDevicesPresenceMonitor,&mInternetMonitor); + for(int i = 0; i < mCANDevicesList.size(); i++) + { + mCANDevicesList.at(i)->StartWatchdog(mSystemConfig.GetDeviceDetectionConfig()); + } // mMainWindow.mCANWatchdogSettingsPage->SetCANWatchdogConfig(mSystemConfig.GetCANWatchdogConfig()); // mGPTimer->setSingleShot(false); @@ -261,6 +267,8 @@ int COtarcikCan::SaveDeviceDetectionSettingsRequest(CDeviceDetectionConfig *Devi mSystemConfig.SaveConfig(); mLANDevicesPresenceMonitor.Stop(); mLANDevicesPresenceMonitor.Start(DeviceDetectconfig->GetLANDevicesConfigList()); + mInternetMonitor.UpdateCANReportingBit(DeviceDetectconfig->mInternetDetectionCANStatusBit); + mCANBusMQTTClient.SetMQTTServerPresenceCANBit(DeviceDetectconfig->mMQTTDetectionCANStatusBit); return RET_OK; } @@ -315,5 +323,5 @@ void COtarcikCan::QuitApplicationRequest() mCPUInterface.StopCPUWatchdog(); mCPUInterface.DeInit(); - QCoreApplication::quit(); + QCoreApplication::exit(69); } diff --git a/Otarcik_CAN/debug/Otarcik_CAN.exe b/Otarcik_CAN/debug/Otarcik_CAN.exe index 357d5be..f3d968a 100644 Binary files a/Otarcik_CAN/debug/Otarcik_CAN.exe and b/Otarcik_CAN/debug/Otarcik_CAN.exe differ diff --git a/Otarcik_CAN/ui_CANbusSettingsPage.h b/Otarcik_CAN/ui_CANbusSettingsPage.h index d52d405..e64c5bf 100644 --- a/Otarcik_CAN/ui_CANbusSettingsPage.h +++ b/Otarcik_CAN/ui_CANbusSettingsPage.h @@ -49,9 +49,6 @@ public: QCheckBox *mCANDeviceWatchdogActivateChkBx; QSpinBox *mWatchdogPollPeriodSpinBx; QLabel *mRefreshRateLbl_2; - QLabel *mWatchdogMsgIDLbl; - QLabel *mWatchdogMsgIDPrefixLbl; - QSpinBox *mWatchdogMsgIDSpinBx; QGroupBox *mDatabaseGroupBox; QLabel *mDBMessageNameLbl; QLabel *mDBMessageIDLbl; @@ -64,6 +61,9 @@ public: QPushButton *mAddDeviceBtn; QPushButton *mDeleteDeviceBtn; QComboBox *mCANIDComboBx; + QLabel *mWatchdogMsgIDPrefixLbl; + QSpinBox *mWatchdogMsgIDSpinBx; + QLabel *mWatchdogMsgIDLbl; void setupUi(QWidget *CCANbusSettingsPage) { @@ -84,7 +84,7 @@ public: label_2->setGeometry(QRect(52, 100, 81, 16)); mDeviceParamsGroupBox = new QGroupBox(CCANbusSettingsPage); mDeviceParamsGroupBox->setObjectName(QString::fromUtf8("mDeviceParamsGroupBox")); - mDeviceParamsGroupBox->setGeometry(QRect(270, 100, 321, 461)); + mDeviceParamsGroupBox->setGeometry(QRect(270, 100, 321, 431)); mCANIDLbl = new QLabel(mDeviceParamsGroupBox); mCANIDLbl->setObjectName(QString::fromUtf8("mCANIDLbl")); mCANIDLbl->setGeometry(QRect(10, 66, 121, 16)); @@ -101,7 +101,7 @@ public: mCANBaudrateComboBx->setGeometry(QRect(100, 90, 131, 21)); mModifyDevParamsBtn = new QPushButton(mDeviceParamsGroupBox); mModifyDevParamsBtn->setObjectName(QString::fromUtf8("mModifyDevParamsBtn")); - mModifyDevParamsBtn->setGeometry(QRect(210, 420, 80, 22)); + mModifyDevParamsBtn->setGeometry(QRect(210, 390, 80, 22)); mDeviceDescriptionTxtEdit = new QTextEdit(mDeviceParamsGroupBox); mDeviceDescriptionTxtEdit->setObjectName(QString::fromUtf8("mDeviceDescriptionTxtEdit")); mDeviceDescriptionTxtEdit->setGeometry(QRect(10, 210, 291, 101)); @@ -128,7 +128,7 @@ public: mDevicePollPeriodSpinBx->setGeometry(QRect(200, 180, 91, 22)); mCancelModifyParamsBtn = new QPushButton(mDeviceParamsGroupBox); mCancelModifyParamsBtn->setObjectName(QString::fromUtf8("mCancelModifyParamsBtn")); - mCancelModifyParamsBtn->setGeometry(QRect(20, 420, 80, 22)); + mCancelModifyParamsBtn->setGeometry(QRect(20, 390, 80, 22)); mDeviceNameEditBx = new QPlainTextEdit(mDeviceParamsGroupBox); mDeviceNameEditBx->setObjectName(QString::fromUtf8("mDeviceNameEditBx")); mDeviceNameEditBx->setGeometry(QRect(13, 23, 281, 31)); @@ -152,22 +152,6 @@ public: mRefreshRateLbl_2->setObjectName(QString::fromUtf8("mRefreshRateLbl_2")); mRefreshRateLbl_2->setGeometry(QRect(10, 350, 181, 16)); mRefreshRateLbl_2->setFont(font1); - mWatchdogMsgIDLbl = new QLabel(mDeviceParamsGroupBox); - mWatchdogMsgIDLbl->setObjectName(QString::fromUtf8("mWatchdogMsgIDLbl")); - mWatchdogMsgIDLbl->setGeometry(QRect(10, 380, 111, 16)); - mWatchdogMsgIDLbl->setFont(font1); - mWatchdogMsgIDPrefixLbl = new QLabel(mDeviceParamsGroupBox); - mWatchdogMsgIDPrefixLbl->setObjectName(QString::fromUtf8("mWatchdogMsgIDPrefixLbl")); - mWatchdogMsgIDPrefixLbl->setGeometry(QRect(110, 380, 30, 20)); - mWatchdogMsgIDPrefixLbl->setFont(font1); - mWatchdogMsgIDPrefixLbl->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); - mWatchdogMsgIDSpinBx = new QSpinBox(mDeviceParamsGroupBox); - mWatchdogMsgIDSpinBx->setObjectName(QString::fromUtf8("mWatchdogMsgIDSpinBx")); - mWatchdogMsgIDSpinBx->setGeometry(QRect(140, 380, 91, 20)); - mWatchdogMsgIDSpinBx->setMinimum(1); - mWatchdogMsgIDSpinBx->setMaximum(2048); - mWatchdogMsgIDSpinBx->setValue(1); - mWatchdogMsgIDSpinBx->setDisplayIntegerBase(16); mDatabaseGroupBox = new QGroupBox(CCANbusSettingsPage); mDatabaseGroupBox->setObjectName(QString::fromUtf8("mDatabaseGroupBox")); mDatabaseGroupBox->setGeometry(QRect(620, 100, 711, 491)); @@ -213,6 +197,22 @@ public: mCANIDComboBx->setObjectName(QString::fromUtf8("mCANIDComboBx")); mCANIDComboBx->setEnabled(true); mCANIDComboBx->setGeometry(QRect(790, 20, 131, 20)); + mWatchdogMsgIDPrefixLbl = new QLabel(CCANbusSettingsPage); + mWatchdogMsgIDPrefixLbl->setObjectName(QString::fromUtf8("mWatchdogMsgIDPrefixLbl")); + mWatchdogMsgIDPrefixLbl->setGeometry(QRect(370, 610, 30, 20)); + mWatchdogMsgIDPrefixLbl->setFont(font1); + mWatchdogMsgIDPrefixLbl->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + mWatchdogMsgIDSpinBx = new QSpinBox(CCANbusSettingsPage); + mWatchdogMsgIDSpinBx->setObjectName(QString::fromUtf8("mWatchdogMsgIDSpinBx")); + mWatchdogMsgIDSpinBx->setGeometry(QRect(400, 610, 91, 20)); + mWatchdogMsgIDSpinBx->setMinimum(1); + mWatchdogMsgIDSpinBx->setMaximum(2048); + mWatchdogMsgIDSpinBx->setValue(1); + mWatchdogMsgIDSpinBx->setDisplayIntegerBase(16); + mWatchdogMsgIDLbl = new QLabel(CCANbusSettingsPage); + mWatchdogMsgIDLbl->setObjectName(QString::fromUtf8("mWatchdogMsgIDLbl")); + mWatchdogMsgIDLbl->setGeometry(QRect(270, 610, 111, 16)); + mWatchdogMsgIDLbl->setFont(font1); retranslateUi(CCANbusSettingsPage); @@ -235,8 +235,6 @@ public: mCancelModifyParamsBtn->setText(QCoreApplication::translate("CCANbusSettingsPage", "Annuler", nullptr)); mCANDeviceWatchdogActivateChkBx->setText(QCoreApplication::translate("CCANbusSettingsPage", "Activer Watchdog", nullptr)); mRefreshRateLbl_2->setText(QCoreApplication::translate("CCANbusSettingsPage", "P\303\251riode rafra\303\256chissement (ms):", nullptr)); - mWatchdogMsgIDLbl->setText(QCoreApplication::translate("CCANbusSettingsPage", "CAN Msg ID (HEX):", nullptr)); - mWatchdogMsgIDPrefixLbl->setText(QCoreApplication::translate("CCANbusSettingsPage", "0x", nullptr)); mDatabaseGroupBox->setTitle(QCoreApplication::translate("CCANbusSettingsPage", "Database", nullptr)); mDBMessageNameLbl->setText(QCoreApplication::translate("CCANbusSettingsPage", "Message Name: ", nullptr)); mDBMessageIDLbl->setText(QCoreApplication::translate("CCANbusSettingsPage", "Message ID: ", nullptr)); @@ -246,6 +244,8 @@ public: mDBMessageCommentLbl->setText(QCoreApplication::translate("CCANbusSettingsPage", "Number of signals: ", nullptr)); mAddDeviceBtn->setText(QCoreApplication::translate("CCANbusSettingsPage", "Ajouter", nullptr)); mDeleteDeviceBtn->setText(QCoreApplication::translate("CCANbusSettingsPage", "Supprimer", nullptr)); + mWatchdogMsgIDPrefixLbl->setText(QCoreApplication::translate("CCANbusSettingsPage", "0x", nullptr)); + mWatchdogMsgIDLbl->setText(QCoreApplication::translate("CCANbusSettingsPage", "CAN Msg ID (HEX):", nullptr)); } // retranslateUi };