/* * File: ChaletPowerRelay.h * Author: JF * * Created on November 30, 2018, 7:33 PM */ #ifndef BOOTLOADERINTERFACE_H #define BOOTLOADERINTERFACE_H #include "define.h" #define BOOTLOADER_FILE_HEADER_CODE (int)0xBAADBEEF #define BOOTLOADER_RECORD_HEADER_CODE (int)0xDEADBEEF #define BOOTLOADER_FLASH_FIRMWARE_VALIDATOR 0xA8 #define BOOTLOADER_ENTER_UPLOAD_MODE_VALIDATOR 0x5A typedef struct { unsigned char BootloaderAction; unsigned char BootloaderActionValidator; }stBootloaderFlags_t; typedef struct { unsigned int Firmwareflags; unsigned int NbRecords; unsigned int FirmwareSize; unsigned int Versioncode; unsigned int DataCRC32; }stStoredBootloaderInfo; extern stBootloaderFlags_t mBootloaderFlags; stStoredBootloaderInfo mStoredBootloaderInfo; enum eBootloaderFlagsIndex { BOOTLOADER_FLAGS_ACTION_FLAG_INDEX = 0, BOOTLOADER_FLAGS_ACTION_VALIDATOR_INDEX, BOOTLOADER_FLAGS_MAX_INDEX = 12 }; enum eBootloaderActionFlagValues { BOOTLOADER_ACTION_JUMP_TO_APP_VALUE = 0, BOOTLOADER_ACTION_FLASH_FIRMWARE_VALUE = 1, BOOTLOADER_ACTION_ENTER_UPDATE_MODE_VALUE = 2, BOOTLOADER_ACTION_MAX_VALUE }; enum eBootloaderStates { BOOTLOADER_STANDBY_STATE, BOOTLOADER_ACTIVE_STATE, BOOTLOADER_ERASE_FLASH_STATE, BOOTLOADER_RECEIVING_FIRMWARE_STATE, BOOTLOADER_SENDING_FIRMWARE_COPY_STATE, BOOTLOADER_PRINTING_FIRMWARE_STATE, BOOTLOADER_MAX_STATE }; enum eBootloaderStateMachineEvents { BOOTLOADER_TICK_EVENT, BOOTLOADER_NEW_CMD_EVENT, BOOTLOADER_TIMEOUT_EVENT, BOOTLOADER_MAX_EVENT }; enum eBootloaderFlashEraseStates { BOOTLOADER_FLASH_ERASE_SECTOR_STATE, BOOTLOADER_FLASH_ERASE_WAIT_FOR_SECTOR_DONE, BOOTLOADER_FLASH_ERASE_CHECKBACK_STATE, BOOTLOADER_FLASH_ERASE_FINISHED_STATE, BOOTLOADER_FLASH_ERASE_ERROR_STATE, BOOTLOADER_FLASH_ERASE_MAX_STATE }; enum eBootloaderFlashEraseResults { BOOTLOADER_FLASH_ERASE_RUNNING_RES, BOOTLOADER_FLASH_ERASE_FINISHED_RES, BOOTLOADER_FLASH_ERASE_ERROR_RES, BOOTLOADER_FLASH_ERASE_ABORT_RES, BOOTLOADER_FLASH_ERASE_MAX_RES }; enum eBootloaderFlahsEraseSMEvents { BOOTLOADER_FLASH_ERASE_SM_TICK_EVENT, BOOTLOADER_FLASH_ERASE_SM_ABORT_EVENT, BOOTLOADER_FLASH_ERASE_SM_MAX_EVENT }; enum eBootloaderFlashWriteStates { BOOTLOADER_FLASH_WRITE_STANDBY_STATE, BOOTLOADER_FLASH_WRITE_BUFFER_STATE, BOOTLOADER_FLASH_WRITE_WAIT_FOR_BYTE_DONE, BOOTLOADER_FLASH_WRITE_CHECKBACK_STATE, BOOTLOADER_FLASH_WRITE_FINISHED_STATE, BOOTLOADER_FLASH_WRITE_ERROR_STATE, BOOTLOADER_FLASH_WRITE_MAX_STATE }; enum eBootloaderFlashWriteResults { BOOTLOADER_FLASH_WRITING_RES, BOOTLOADER_FLASH_WRITE_FINISHED_RES, BOOTLOADER_FLASH_WRITE_ERROR_RES, BOOTLOADER_FLASH_WRITE_ABORT_RES, BOOTLOADER_FLASH_WRITE_MAX_RES }; enum eBootloaderFlahsWriteSMEvents { BOOTLOADER_FLASH_WRITE_SM_TICK_EVENT, BOOTLOADER_FLASH_WRITE_SM_NEW_BUFFER_EVENT, BOOTLOADER_FLASH_WRITE_SM_ABORT_EVENT, BOOTLOADER_FLASH_WRITE_SM_MAX_EVENT }; enum eBootloaderStateMachineCmds { BOOTLOADER_SM_ACTIVATE_CMD, BOOTLOADER_SM_ABORT_CMD, BOOTLOADER_SM_ERASE_FLASH_CMD, BOOTLOADER_SM_INIT_UPLOAD_CMD, BOOTLOADER_SM_NEW_DATA_CHUNK_CMD, BOOTLOADER_SM_UPLOAD_FINISHED_CMD, BOOTLOADER_SM_EXECUTE_UPGRAGE_CMD, BOOTLOADER_SM_INVALID_CRC_CMD, BOOTLOADER_SM_CHECK_FLASH_CMD, BOOTLOADER_SM_GET_FIRMWARE_DATA_CMD }; extern unsigned char BootloaderBuffer[300]; int BootloaderInterfaceInit(); void BootloaderExecuteCmd(char Cmd,bool CRCValid); void BootloaderCRCError(char Cmd, int RxCRC, int ExpectedCRC); void BootloaderInterfaceTick(); void BootloaderInterfaceStateMachine(int Event, int Param); void BootloaderResetStateMachine(); void BootloaderActivateBootloader(); void BootloaderDeactivateBootloader(); int BootloaderFlashEraseStateMachine(int event); int ResetBootloaderFlashEraseStateMachine(); int BootloaderFlashWriteStateMachine(int event); int ResetBootloaderFlashWriteStateMachine(); int BootloaderCheckFlashBootloaderData(); int BootloaderPrintFlashData(); int BootloaderBytesToInt(unsigned char *Bytes); int BootloaderIntToBytes(unsigned char *Buf, unsigned int Input); #endif /* BOOTLOADERINTERFACE_H */