YULTek/Otarcik_CAN/Sources/CANBus/CANWatchdog.cpp

78 lines
2.4 KiB
C++

#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;
}