#include "CANWatchdog.h" #include "GeneralMessagesLogDispatcher.h" CCANWatchdog::CCANWatchdog() { mCANDriverIF = new CPCANInterface; mIsCANInitialized = false; mWatchdogTimer = new QTimer; mWatchdogTimer->setSingleShot(false); mCANDriverIF = 0; mWDTInitialized = false; connect(mWatchdogTimer,&QTimer::timeout,this,&CCANWatchdog::WatchdogTimeoutTimerExpired); } int CCANWatchdog::Init(CPCANInterface *CANDriverIF, TPCANHandle CANDeviceHandle, unsigned int WDTPeriod, unsigned int CANMsgID) { if(WDTPeriod < 200) { WDTPeriod = 200; qDebug("CANWatchdog:: Trying to init with WDT period lower tan 200ms"); return RET_GENERAL_ERROR; } mCANDeviceHandle = CANDeviceHandle; mWDTPeriod = WDTPeriod; mCANDriverIF = CANDriverIF; CGeneralMessagesLogDispatcher::instance()->AddLogMessage("Démarrage du Watchdog CAN...","CCANWatchdog"); mWatchdogTimer->setInterval(mWDTPeriod); mWatchdogTimer->setSingleShot(false); mWDTCANMsg.mCANMsgID = CANMsgID; mWDTCANMsg.mCANMsgLength = 8; mWDTCANMsg.mCANMsgData.clear(); mWDTCANMsg.mCANMsgData.append(8,(char)0x00); mWDTCANMsg.mCANMsgName = "Watchdog"; mWDTInitialized = true; return RET_OK; } void CCANWatchdog::WatchdogTimeoutTimerExpired() { char data = mWDTCANMsg.mCANMsgData[7]; data ^= (char)0x01; mWDTCANMsg.mCANMsgData[7] = data; mCANDriverIF->SendCANMessage(mCANDeviceHandle,mWDTCANMsg); 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,"CCANWatchdog",true,3); } int CCANWatchdog::StartWDT() { if(mWDTInitialized == false) { return RET_GENERAL_ERROR; } mWatchdogTimer->start(); return RET_OK; } int CCANWatchdog::StopWDT() { if(mWDTInitialized == false) { return RET_GENERAL_ERROR; } mWatchdogTimer->stop(); return RET_OK; }