YULTek/Otarcik_CAN/Sources/CANBus/CANDataLogger.cpp
2023-02-19 17:03:43 -05:00

75 lines
2.3 KiB
C++

#include "CANDataLogger.h"
#include "defines.h"
CCANDataLogger::CCANDataLogger():
mTopicDeviceString("")
{
}
int CCANDataLogger::LogNewData(const QList<CCANMessage *> *MsgList)
{
//MQTT
//For each message in the list, we create a CCANMessage
//First, clear the current list
mMQTTMsgList.clear();
qDebug("\n\n\n");
for(int i = 0; i < MsgList->size(); i++)
{
if(MsgList->at(i)->mPendingData == true)
{
CCANMessage *Msg = MsgList->at(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(NewMessage);
} //if(MsgList->at(i)->mPendingData == true)
}
return RET_OK;
}
int CCANDataLogger::SetMQTTTopicDevice(QString DeviceString)
{
mTopicDeviceString = DeviceString;
return RET_OK;
}