#include "CANDataLogger.h" #include "defines.h" CCANDataLogger::CCANDataLogger(): mTopicDeviceString("") { mMQTTCLient = 0; mCANMsgList.clear(); CCANMessage toto; toto.mCANMsgID = 234; CCANSignal test; test.mSignalName = "TOTORO"; toto.mSignalsList.append(test); CCANMessage Bleh; Bleh = toto; } int CCANDataLogger::LogNewData(const QList *MsgList) { //Since the MQTT msg timeout is different from the CAN read timeout (much faster), and also each CAN device can have it's own timeout we need //store the messages and update the values until it's ready to send to the MQTT broker. for(int i = 0; i < MsgList->size(); i++) { bool found = false; int j = 0; while(j < mCANMsgList.size() && found == false) { if(MsgList->at(i)->mCANMsgID == mCANMsgList.at(j).mCANMsgID && MsgList->at(i)->mPendingData == true) { //We already had this msg in the list, just update it's value found = true; mCANMsgList[j] = *MsgList->at(i); } j++; } if(found == false && MsgList->at(i)->mPendingData == true) { //Message is not in our list, we must add it. CCANMessage NewMsg = *MsgList->at(i); mCANMsgList.append(NewMsg); } } return RET_OK; } int CCANDataLogger::SetMQTTTopicDevice(QString DeviceString) { mTopicDeviceString = DeviceString; return RET_OK; } int CCANDataLogger::SetMQTTClient(CMQTTClientWrapper *MQTTClient) { mMQTTCLient = MQTTClient; return RET_OK; } QList *CCANDataLogger::GetMQTTMessagesList() { //MQTT //The MQTT client wants to send the messages //For each CAN message in the list, we create a MQTT Message //First, clear the current list mMQTTMsgList.clear(); //qDebug("\n\n\n"); for(int i = 0; i < mCANMsgList.size(); i++) { // if(mCANMsgList.size() != 0) { CCANMessage Msg = mCANMsgList[i]; // QString MsgPayload = "{"; // QString MsgTopic = mTopicDeviceString; // MsgTopic.append(Msg.mCANMsgName); // // MsgTopic.append("/"); // //For each signal with new data, insert an entry in the JSon payload string // for(int signal = 0; signal < Msg.mSignalsList.size(); signal++) // { // QString SignalData; // CCANSignal Signal = Msg.mSignalsList.at(signal); // if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT) // { // SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((quint64)Signal.mPhysicalValue); // } // else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT) // { // SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((qint64)Signal.mPhysicalValue); // } // else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT || // Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE) // { // SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg(Signal.mPhysicalValue,0,'f',1); // } // MsgPayload.append(SignalData); // if(signal < Msg.mSignalsList.size()-1) // { // MsgPayload.append(","); // } // } // MsgPayload.append("}"); // qDebug("%s",qPrintable(MsgPayload)); // CMQTTMessage NewMessage(MsgTopic, MsgPayload); mMQTTMsgList.append(GetMQTTMessage(&Msg)); } //if(MsgList->at(i)->mPendingData == true) } mCANMsgList.clear(); // if(mMQTTCLient != 0) // { // mMQTTCLient->NewMQTTMessages(mMQTTMsgList); // } return &mMQTTMsgList; } CMQTTMessage CCANDataLogger::GetMQTTMessage(CCANMessage *Msg, bool Format ) { QString MsgPayload = "{"; QString MsgTopic = mTopicDeviceString; MsgTopic.append(Msg->mCANMsgName); // MsgTopic.append("/"); //For each signal with new data, insert an entry in the JSon payload string for(int signal = 0; signal < Msg->mSignalsList.size(); signal++) { QString SignalData; CCANSignal Signal = Msg->mSignalsList.at(signal); if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_UNSIGNED_INT) { SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((quint64)Signal.mPhysicalValue); } else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_SIGNED_INT) { SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg((qint64)Signal.mPhysicalValue); } else if(Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_32_BIT_FLOAT || Signal.mValueType == CCANSignal::CAN_SIGNAL_TYPE_64_BIT_DOUBLE) { SignalData = QString("\"%1\":%2").arg(Signal.mSignalName).arg(Signal.mPhysicalValue,0,'f',1); } MsgPayload.append(SignalData); if(signal < Msg->mSignalsList.size()-1) { MsgPayload.append(","); if(Format == true) { MsgPayload.append("\n"); } } } MsgPayload.append("}"); // qDebug("%s",qPrintable(MsgPayload)); CMQTTMessage NewMessage(MsgTopic, MsgPayload); return NewMessage; }