#ifndef BOOTLOADERPROTOCOL_H #define BOOTLOADERPROTOCOL_H #include #include "ProtocolDefs.h" #include "CRC32.h" class CPICUploader; #define BOOTLOADER_FRAME_HEADER 0xDEADBEEF #define BOOTLOADER_FRAME_HEADER_1 0xDE #define BOOTLOADER_FRAME_HEADER_2 0xAD #define BOOTLOADER_FRAME_HEADER_3 0xBE #define BOOTLOADER_FRAME_HEADER_4 0xEF #define MAX_BOOTLOADER_PAYLOAD_SIZE 200 enum eProtocolBootloaderStates { Initialization, RxHeader1, RxHeader2, RxHeader3, RxHeader4, RxCmd, RxPayloadSize1, RxPayloadSize2, RxPayloadSize3, RxPayloadSize4, RxPayload, RxCRC1, RxCRC2, RxCRC3, RxCRC4 }; class CBootloaderProtocol : public QObject { Q_OBJECT public: explicit CBootloaderProtocol(QObject *parent = 0); ~CBootloaderProtocol(); int BootloaderProtocolInit(); int BootloaderProtocolResetStateMachine(); int BooloaderProtocolRxFrame(QByteArray Frame); void BootloaderProtocolStateMachine(unsigned char data); QByteArray BootloaderProtocolGetFrame(char Cmd, QByteArray Data); CPICUploader *mProgramHandle; private: unsigned int mBootloaderHeader; unsigned int mBootloaderDataSize; unsigned int mBootloaderDataCtr; unsigned int mBootloaderBufPtr; unsigned int mBootloaderCRC; unsigned int mBootloaderComputedCRC; QByteArray mBootloaderDataBuffer; unsigned char mBootloaderCommand; unsigned char mBootloaderState; CCRC32 mCRCEngine; signals: public slots: }; #endif // BOOTLOADERPROTOCOL_H