#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),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) { 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; }