133 lines
4.1 KiB
C++
133 lines
4.1 KiB
C++
#include "CANDevice.h"
|
|
#include "OtarcikCan.h"
|
|
|
|
|
|
|
|
CCANDevice::CCANDevice(QObject *parent)
|
|
{
|
|
Q_UNUSED(parent)
|
|
|
|
mMessageList.clear();
|
|
mMessagesListLoaded = false;
|
|
mCANAnalyzer.mDevicePtr = this;
|
|
mProgramPtr = 0;
|
|
// mCANDeviceDatabaseFilename.clear();
|
|
// mCANDeviceID = -1;
|
|
// mCANDeviceBaudrate = -1;
|
|
// mDeviceDescription.clear();
|
|
// mDeviceName.clear();
|
|
// mDevicePollPeriod = 0;
|
|
}
|
|
|
|
CCANDevice::CCANDevice(CCANDeviceConfig &SysConfig, CMQTTClientWrapper *MQTTClient)
|
|
{
|
|
mMessageList.clear();
|
|
mMessagesListLoaded = false;
|
|
mCANAnalyzer.mDevicePtr = this;
|
|
mProgramPtr = 0;
|
|
|
|
mDeviceConfigInfo = SysConfig;
|
|
mCANMQTTClient = MQTTClient;
|
|
|
|
// mCANDeviceID = SysConfig.mCANDeviceID;
|
|
// mCANDeviceBaudrate = SysConfig.mCANDeviceBaudrate;
|
|
// mCANDeviceDatabaseFilename = SysConfig.mCANDeviceDatabaseFilename;
|
|
// mDeviceName = SysConfig.mDeviceName;
|
|
// mDeviceDescription = SysConfig.mDeviceDescription;
|
|
// mDevicePollPeriod = SysConfig.mDevicePollPeriod;
|
|
}
|
|
|
|
CCANDevice::~CCANDevice()
|
|
{
|
|
while (!mMessageList.isEmpty())
|
|
{
|
|
delete mMessageList.takeFirst();
|
|
}
|
|
}
|
|
|
|
int CCANDevice::Init()
|
|
{
|
|
if(mDeviceConfigInfo.mCANDeviceID < 0 || mDeviceConfigInfo.mCANDeviceBaudrate < 0 || mDeviceConfigInfo.mDevicePollPeriod == 0 || mDeviceConfigInfo.mCANDeviceDatabaseFilename.isEmpty() == true || mDeviceConfigInfo.mDeviceName.isEmpty() == true)
|
|
{
|
|
qDebug("CCANDevice: trying to initialize a CCANDevice with invalid parameters");
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Initialisation du dispositif [%1]").arg(mDeviceConfigInfo.mDeviceName));
|
|
|
|
if(mCANDatabase.Init(mDeviceConfigInfo.mCANDeviceDatabaseFilename) == RET_OK)
|
|
{
|
|
if(mCANDatabase.BuildMessageList(&mMessageList) == RET_OK)
|
|
{
|
|
mMessagesListLoaded = true;
|
|
mProgramPtr->InitCANViewer(&mMessageList);
|
|
}
|
|
else
|
|
{
|
|
mMessagesListLoaded = false;
|
|
}
|
|
}
|
|
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);
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
mCANDataLogger.SetMQTTTopicDevice(QString("CANBus/%1/").arg(mDeviceConfigInfo.mDeviceName));
|
|
mCANDataLogger.SetMQTTClient(mCANMQTTClient);
|
|
|
|
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Dispositif [%1] initialisé avec succès!").arg(mDeviceConfigInfo.mDeviceName),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_SUCCESS_STATUS);
|
|
return RET_OK;
|
|
}
|
|
|
|
int CCANDevice::Init(QString DatabaseFileName, TPCANHandle CANDeviceID, TPCANBaudrate CANDeviceBaudRate, QString DevDescription, QString DeviceName, unsigned int DevicePollPeriod)
|
|
{
|
|
mDeviceConfigInfo.mCANDeviceID = CANDeviceID;
|
|
mDeviceConfigInfo.mCANDeviceBaudrate = CANDeviceBaudRate;
|
|
mDeviceConfigInfo.mCANDeviceDatabaseFilename = DatabaseFileName;
|
|
mDeviceConfigInfo.mDeviceDescription = DevDescription;
|
|
mDeviceConfigInfo.mDeviceName = DeviceName;
|
|
mDeviceConfigInfo.mDevicePollPeriod = DevicePollPeriod;
|
|
|
|
Init();
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
int CCANDevice::NewMessageParsed()
|
|
{
|
|
mCANDataLogger.LogNewData(&mMessageList);
|
|
mProgramPtr->UpdateCANViewerDataRequest(&mMessageList);
|
|
|
|
for(int i = 0; i < mMessageList.size(); i++)
|
|
mMessageList.at(i)->mPendingData = false;
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
|
|
QDataStream &operator<<(QDataStream &out, const CCANDevice &source)
|
|
{
|
|
out << source.mDeviceConfigInfo;
|
|
return out;
|
|
}
|
|
|
|
QDataStream &operator>>(QDataStream &in, CCANDevice &dest)
|
|
{
|
|
in >> dest.mDeviceConfigInfo;
|
|
return in;
|
|
}
|
|
|
|
////CAREFUL!!! OPERATOR = DOES NOT COPY THE MESSAGES, ONLY THE DEVICE DESCRIPTION !!//
|
|
//CCANDevice& CCANDevice::operator=(const CCANDevice *source)
|
|
//{
|
|
// if(source == this)
|
|
// {
|
|
// return *this;
|
|
// }
|
|
|
|
// this->mDeviceConfigInfo = source->mDeviceConfigInfo;
|
|
|
|
// return *this;
|
|
//}
|