Index: sources/canbus/messagehandler.h =================================================================== diff -u -rf37a92ae779a27d59fa26d91f0656bd55852c6e1 -rf36dd9c29f633b54bf7f0232093ecaefa5452ca8 --- sources/canbus/messagehandler.h (.../messagehandler.h) (revision f37a92ae779a27d59fa26d91f0656bd55852c6e1) +++ sources/canbus/messagehandler.h (.../messagehandler.h) (revision f36dd9c29f633b54bf7f0232093ecaefa5452ca8) @@ -43,17 +43,20 @@ * * \brief The MessageHandler class * \details This class is handling the can message by building and striping it. - * // -- CAN MESSAGE STRUCTURE -- + * + * // -- CAN PAYLOAD STRUCTURE -- * #0 #1 #2 #3 #4 #5 #6 #7 * +---+---+---+---+---+---+---+---+--.......--+ - * | A5| MsgId |Len| Payload |CRC|..padding..| + * | A5| MsgId |Len| Data |CRC|..padding..| * +---+---+---+---+---+---+---+---+--.......--+ + * * Header Frame: * 1 - CRC is last after payload * Ex1 - If Len=0 then CRC is #4 * Ex2 - If Len=1 then CRC is #5 and payload is #4 * 2 - If CRC is not the last by in the frame * then there is padding 0x00 to make the frame 8 byte fix + * * Tail Frame: * 3 - Partial frames only have Payload and CRC ( and padded) * @@ -124,15 +127,17 @@ // Singleton SINGLETON_DECL(MessageHandler) - public: +public: void init(); private: void initConnections(); - void checked_in(); // TODO : needs to be renamed and called from the main timer to tell HD, UI is alive + void checked_in(); void transmitFrame(MessageHandler::Can_Id vCan_Id, GuiActionType vAction, GuiActionData vData = GuiActionData::NoData); + bool ignoreChannel(const QCanBusFrame &vFrame); + // build message to be sent QByteArray buildMessage (GuiActionType vAction , GuiActionData vData); void addSyncByte (QByteArray &vPayload); @@ -142,23 +147,26 @@ void addCRC (QByteArray &vPayload); void addPadding (QByteArray &vPayload); + // CRC tools quint8 calcCRC (const QByteArray &vData); bool checkCRC (const QByteArray &vData, quint8 vCRC); // strip message to its parts - QByteArray stripMessage (const QCanBusFrame &vFrame ); + bool stripMessage(const QCanBusFrame &vFrame, Message &vMessage); bool hasSyncByte (QByteArray &vPayload); GuiActionType getActionId (QByteArray &vPayload); quint8 getLength (QByteArray &vPayload); - QByteArray getData (QByteArray &vPayload, quint8 vLen , bool *ok = nullptr ); + QByteArray getData (QByteArray &vPayload, quint8 vLen, bool *ok = nullptr); -protected: - virtual void timerEvent(QTimerEvent *event) override; + // interpret the data into GUI understandable Actions/Data + bool interpretData(const Message &vMessage, GuiActionType &vActionId, GuiActionData &vData); private slots: // Should be private for thread safety and is connected internally. void onActionTransmit(GuiActionType vAction, GuiActionData vData); // UI => HD/DG void onFrameReceive (const QCanBusFrame &vFrame ); // UI <= HD/DG + void onMainTimerTimeout(); + signals: void didActionReceive (GuiActionType vAction, GuiActionData vData); // UI <= HD/DG void didFrameTransmit (const QCanBusFrame &vFrame ); // UI => HD/DG