#include "CANMessage.h" #include "defines.h" CCANMessage::CCANMessage() { mSignalsList.clear(); } CCANMessage::CCANMessage(const CCANMessage &Src) { *this = Src; } CCANMessage::CCANMessage(const quint32 Channel, const TPCANMsg CANMsg, const TPCANTimestamp CANTimeStamp) { SetDataFromDriver(Channel,CANMsg,CANTimeStamp); } CCANMessage::~CCANMessage() { while (!mSignalsList.isEmpty()) { delete mSignalsList.takeFirst(); } } int CCANMessage::SetDataFromDriver(quint32 Channel, TPCANMsg CANMsg, TPCANTimestamp CANTimeStamp) { mCANChannel = Channel; mCANMsgID = (unsigned long long)CANMsg.ID; mCANMsgLength = (unsigned char)CANMsg.LEN; mCANMsgType = CANMsg.MSGTYPE; //mCANMsgData = QByteArray((const char*)&CANMsg.DATA); for(int i = 0; i < mCANMsgLength; i++) { mCANMsgData.append(CANMsg.DATA[i]); } mCANMsgMicrosecs = CANTimeStamp.micros; mCANMsgMillisecs = CANTimeStamp.millis; mCANMsgMillisecsOverflow = CANTimeStamp.millis_overflow; return 0; } int CCANMessage::AddSignal(CCANSignal *NewSignal) { if(NewSignal == 0) { return RET_GENERAL_ERROR; } mSignalsList.append(NewSignal); } int CCANMessage::UpdateValue(CCANMessage *NewDeviceMessage) { if(NewDeviceMessage->mCANMsgID != mCANMsgID) { qDebug("CCANMEssage error: Trying to update mismatching message ID"); return RET_GENERAL_ERROR; } if(NewDeviceMessage->mCANMsgLength != mCANMsgLength) { qDebug("CCANMessage error: New device message length different than database!!!"); return RET_GENERAL_ERROR; } mCANMsgData = QByteArray(NewDeviceMessage->mCANMsgData); mCANRawDataMotorola = mCANRawDataIntel= 0; for(int i = 0; i < mCANMsgLength; i++) { mCANRawDataIntel += mCANMsgData[i]; mCANRawDataMotorola += mCANMsgData[(mCANMsgLength - 1) - i]; mCANRawDataIntel <<= 8; mCANRawDataMotorola <<= 8; } for(int i = 0; i < mSignalsList.size(); i++) { mSignalsList.at(i)->ComputeNewSignalValue(mCANRawDataMotorola,mCANRawDataIntel); } } QDataStream &operator<<(QDataStream &out, const CCANMessage &source) { out << source.mCANChannel << source.mCANMsgID << source.mCANMsgType << source.mCANMsgLength << source.mCANMsgData << source.mCANMsgMillisecs << source.mCANMsgMillisecsOverflow << source.mCANMsgMicrosecs; return out; } QDataStream &operator>>(QDataStream &in, CCANMessage &dest) { in >> dest.mCANChannel >> dest.mCANMsgID >> dest.mCANMsgType >> dest.mCANMsgLength >> dest.mCANMsgData >> dest.mCANMsgMillisecs >> dest.mCANMsgMillisecsOverflow >> dest.mCANMsgMicrosecs; return in; } CCANMessage& CCANMessage::operator=(const CCANMessage *source) { if(source == this) { return *this; } this->mCANChannel = source->mCANChannel; this->mCANMsgID = source->mCANMsgID; this->mCANMsgType = source->mCANMsgType; this->mCANMsgLength = source->mCANMsgLength; this->mCANMsgData = source->mCANMsgData; this->mCANMsgMillisecs = source->mCANMsgMillisecs; this->mCANMsgMillisecsOverflow = source->mCANMsgMillisecsOverflow; this->mCANMsgMicrosecs = source->mCANMsgMicrosecs; return *this; }