/*! * * Copyright (c) 2019-2020 Diality Inc. - All Rights Reserved. * copyright * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, * IN PART OR IN WHOLE, * WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER. * * file messageinterpreter.cpp * date 12/11/2019 * author Behrouz NematiPour * */ #include "messageinterpreter.h" using namespace Can; MessageInterpreter::MessageInterpreter(QObject *parent) : QObject(parent) { } bool MessageInterpreter::interpretMessage(const Can_Id vCan_Id, const Message &vMessage, GuiActionType &vActionId, QVariantList &vData) { bool ok = false; switch (vCan_Id) { case eChlid_HD: case eChlid_HD_Alarm: case eChlid_HD_Sync: ok = interpretMessage_HD(vMessage, vActionId, vData); default: break; } return ok; } bool MessageInterpreter::interpretAction(const GuiActionType &vActionId, const QVariantList &vData, QByteArray &vPayload) { bool ok = true; vPayload.clear(); int l = vData.length(); quint8 ix = 0; switch (vActionId) { // notice we are in transmit mode case GuiActionType::PowerOff: ix = static_cast(GuiActionIndx::PowerOff_Response); if (l >= ix + 1) { quint8 tmp = vData[ix].toUInt(); vPayload += tmp; } break; case GuiActionType::KeepAlive: break; case GuiActionType::String: vPayload = fromVariant(vData[0]); break; default: qDebug() << "ERROR :" << "Unknown Message ID"; ok = false; break; } return ok; } QByteArray MessageInterpreter::fromVariant(const QVariant &vData) { QByteArray mData; if(vData.type() == QVariant::String) { mData += vData.toByteArray(); } else { mData += vData.toUInt(); } return mData; } bool MessageInterpreter::interpretMessage_HD(const Message &vMessage, GuiActionType &vActionId, QVariantList &vData) { bool ok = true; int l = vMessage.data.length(); quint8 ix = 0; quint16 id = static_cast(vActionId); vActionId = vMessage.actionId; vData.clear(); switch (vActionId) { // notice we are in receive mode case GuiActionType::PowerOff: ix = static_cast(GuiActionIndx::PowerOff_ShowHide); if (l >= ix + 1) { quint8 tmp = vMessage.data[ix]; vData += tmp; } else { qDebug() << "ERROR :" << tr("Incorrect data for MessageId %1").arg(id); ok = false; } break; case GuiActionType::BloodFlow: ok = false; break; default: qDebug() << "ERROR :" << "Unknown Message ID"; ok = false; break; } return ok; } bool MessageInterpreter::interpretMessage_DG(const Message &vMessage, GuiActionType &vActionId, QVariantList &vData) { Q_UNUSED(vMessage ); Q_UNUSED(vActionId); Q_UNUSED(vData ); // No data have been interpreted from GD yet return false; }