#ifndef MAIN_H #define MAIN_H #include "stdint.h" #include "cfg.h" //mod bus base addr #define MD_BASE_Addr (1500) //read #define MD_STATUS_Addr (1) //read not used #define MB_Boot_Loader_Version_Addr (1) #define MB_Boot_APP1_Version (2) #define MB_Boot_APP2_Version (3) #define MB_default_Start_Area (4) //defalut start and defalut app1 #define MB_Last_Running_Area (5) #define MB_Last_Running_Error (6) //running error number #define MB_Upload_Status (7) #define MB_APP1_CRC (8) #define MB_APP2_CRC (9) //write #define MD_WRITE_Addr (50) #define MD_WRITE_Reset (51) //modbus register addr #define MD_READ_STATUS (MD_BASE_Addr + MD_STATUS_Addr) #define MD_WRIE_DATA (MD_BASE_Addr + MD_WRITE_Addr) //chache lenth #define MAX_LENTH (128) #define Mb_Wcmd_Width (8) // #define NOERROR (0) #define MAX_ERROR_COUNT (10) #define ERROR_VERSION (0XFFFFFFFF) #define UPGRADE_STATUS_IDE (1) #define UPGRADE_STATUS_ERASE_PROGRAME (2) #define UPGRADE_STATUS_WRITE_PROGRAME (3) #define UPGRADE_STATUS_ERASE_META (4) #define UPGRADE_STATUS_WTITE_META (5) #define UPGRADE_STATUS_FINISH (6) typedef int (*user_code)(void); enum{ ONE = 0x00000001, SECOND }; enum { FAILD = 0, SUCEESS, }; typedef struct { int16_t index; uint16_t lenth; uint8_t recive[MAX_LENTH]; }Flash_Data; typedef struct { uint8_t flag; uint16_t base_addr; Flash_Data flash_Data; }MD_DATA; typedef struct g_MD_Data{ uint8_t count; MD_DATA data[Mb_Wcmd_Width]; }g_MD_Data; typedef struct { char magic[14]; uint16_t size; uint32_t patition; uint32_t version; }md_msg; typedef struct { char magic[14]; uint16_t size; uint32_t patition; uint32_t version; uint32_t md5[8]; }get_md_msg; typedef struct { uint16_t md_status; //current upgrade status uint8_t get_head_sucess_flag; uint8_t meta_erase_flag; uint8_t meta_write_sucesse_flag; uint8_t app_erase_flag; uint8_t app_write_sucessful_flag; uint8_t led_flash_flag; uint32_t start_app_addr; uint32_t erase_size; g_MD_Data md_data; //cache md_msg md_msg_head; META_DATA_S meta; }Upgrade; g_MD_Data* get_md_data(); //md_msg* get_md_msg(Upgrade *upgrade); Upgrade *get_upgrade(); uint8_t operation_ide(Upgrade *upgrade); uint8_t operation_erase_programe(Upgrade *upgrade); uint8_t operation_erase_meta(Upgrade *upgrade); void operation_pro_or_msg(Upgrade *upgrade,Flash_Data *data); uint8_t operation_write_meta(Upgrade *upgrade); void del_modbus_uart(void); void del_md_timer(void); #endif /* MAIN_H */