135 lines
3.8 KiB
C++
135 lines
3.8 KiB
C++
#include "CANDevice.h"
|
|
#include "OtarcikCan.h"
|
|
|
|
CCANDevice::CCANDevice(QObject *parent)
|
|
{
|
|
mMessageList.clear();
|
|
mMessagesListLoaded = false;
|
|
mCANAnalyzer.mDevicePtr = this;
|
|
mProgramPtr = 0;
|
|
mCANDeviceDatabaseFilename.clear();
|
|
mCANDeviceID = -1;
|
|
mCANDeviceBaudrate = -1;
|
|
mDeviceDescription.clear();
|
|
mDeviceName.clear();
|
|
mDevicePollPeriod = 0;
|
|
}
|
|
|
|
CCANDevice::CCANDevice(CCANDevice &Other)
|
|
{
|
|
mMessageList.clear();
|
|
mMessagesListLoaded = false;
|
|
mCANAnalyzer.mDevicePtr = this;
|
|
mProgramPtr = 0;
|
|
|
|
mCANDeviceID = Other.mCANDeviceID;
|
|
mCANDeviceBaudrate = Other.mCANDeviceBaudrate;
|
|
mCANDeviceDatabaseFilename = Other.mCANDeviceDatabaseFilename;
|
|
mDeviceName = Other.mDeviceName;
|
|
mDeviceDescription = Other.mDeviceDescription;
|
|
}
|
|
|
|
CCANDevice::~CCANDevice()
|
|
{
|
|
while (!mMessageList.isEmpty())
|
|
{
|
|
delete mMessageList.takeFirst();
|
|
}
|
|
}
|
|
|
|
int CCANDevice::Init()
|
|
{
|
|
if(mCANDeviceID < 0 || mCANDeviceBaudrate < 0 || mDevicePollPeriod == 0 || mCANDeviceDatabaseFilename.isEmpty() || mDeviceName.isEmpty())
|
|
{
|
|
qDebug("CCANDevice: trying to initialize a CCANDevice with invalid parameters");
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Initialisation du dispositif [%1]").arg(mDeviceName));
|
|
|
|
if(mCANDatabase.Init(mCANDeviceDatabaseFilename) == RET_OK)
|
|
{
|
|
if(mCANDatabase.BuildMessageList(&mMessageList) == RET_OK)
|
|
{
|
|
mMessagesListLoaded = true;
|
|
mProgramPtr->InitCANViewer(&mMessageList);
|
|
}
|
|
else
|
|
{
|
|
mMessagesListLoaded = false;
|
|
}
|
|
}
|
|
if(mCANAnalyzer.Init(mCANDeviceID,mCANDeviceBaudrate,&mMessageList,mDevicePollPeriod) != RET_OK)
|
|
{
|
|
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Le dispositif [%1] n'a pas pu s'initialiser").arg(mDeviceName),true,CGeneralMessagesLogDispatcher::GEN_MSG_TXT_ERROR_STATUS);
|
|
return RET_GENERAL_ERROR;
|
|
}
|
|
|
|
CGeneralMessagesLogDispatcher::instance()->AddLogMessage(QString("Dispositif [%1] initialisé avec succès!").arg(mDeviceName));
|
|
return RET_OK;
|
|
}
|
|
|
|
int CCANDevice::Init(QString DatabaseFileName, TPCANHandle CANDeviceID, TPCANBaudrate CANDeviceBaudRate, QString DevDescription, QString DeviceName, unsigned int DevicePollPeriod)
|
|
{
|
|
mCANDeviceID = CANDeviceID;
|
|
mCANDeviceBaudrate = CANDeviceBaudRate;
|
|
mCANDeviceDatabaseFilename = DatabaseFileName;
|
|
mDeviceDescription = DevDescription;
|
|
mDeviceName = DeviceName;
|
|
mDevicePollPeriod = DevicePollPeriod;
|
|
|
|
Init();
|
|
|
|
return RET_OK;
|
|
}
|
|
|
|
int CCANDevice::NewMessageParsed()
|
|
{
|
|
mProgramPtr->UpdateCANViewerDataRequest(&mMessageList);
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QDataStream &operator<<(QDataStream &out, const CCANDevice &source)
|
|
{
|
|
out << source.mCANDeviceID
|
|
<< source.mCANDeviceBaudrate
|
|
<< source.mCANDeviceDatabaseFilename
|
|
<< source.mDeviceDescription
|
|
<< source.mDeviceName
|
|
<< source.mDevicePollPeriod;
|
|
return out;
|
|
}
|
|
|
|
QDataStream &operator>>(QDataStream &in, CCANDevice &dest)
|
|
{
|
|
in >> dest.mCANDeviceID
|
|
>> dest.mCANDeviceBaudrate
|
|
>> dest.mCANDeviceDatabaseFilename
|
|
>> dest.mDeviceDescription
|
|
>> dest.mDeviceName
|
|
>> dest.mDevicePollPeriod;
|
|
|
|
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->mCANDeviceID = source->mCANDeviceID;
|
|
this->mCANDeviceBaudrate = source->mCANDeviceBaudrate;
|
|
this->mCANDeviceDatabaseFilename = source->mCANDeviceDatabaseFilename;
|
|
this->mDeviceDescription = source->mDeviceDescription;
|
|
this->mDeviceName = source->mDeviceName;
|
|
this->mDevicePollPeriod = source->mDevicePollPeriod;
|
|
|
|
return *this;
|
|
}
|