183 lines
4.2 KiB
C
183 lines
4.2 KiB
C
/*
|
|
* 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 */
|
|
|