#ifndef BSP_BOOT_H_ #define BSP_BOOT_H_ #ifdef __cplusplus extern "C" { #endif #include "kit_macro.h" #include "drv_flash.h" typedef enum { kBootStep_None, kBootStep_WaitErase, kBootStep_RvdData, kBootStep_UpdateEnd, }BootStep; typedef enum { kBootJumpMode_Immediately = 0, kBootJumpMode_ReBoot, kBootJumpMode_End, }BootJumpMode; typedef enum { kBootLoadMode_Serial = 0, kBootLoadMode_Parallel, kBootLoadMode_End, }BootLoadMode; typedef enum { kBootCmd_None = 0, kBootCmd_Reboot, kBootCmd_Erase, kBootCmd_SndFrame, kBootCmd_UpdateEnd, kBootCmd_Quit, kBootCmd_ForceBoot, kBootCmd_HeartBeat, kBootCmd_UpdateRes, kBootCmd_BmuReboot, //批量进入Boot kBootCmd_Token, kBootCmd_End, }BootCmd; struct _BootItem; typedef void(*BootAnswerCall) (struct _BootItem *item, BootCmd cmd, kit_ret_e res); typedef struct _BootItem { BootCmd cmd; BootStep step; bool is_token; uint16_t pack_idx; uint16_t buf_len; uint32_t firmware_len; uint32_t update_time; uint32_t rcv_firmware_len; uint8_t *buf_addr;//注意字节对齐 void * comm_item; BootAnswerCall ans_call; flash_Item_t *flash_item; uint32_t back_up_addr; uint32_t app_start_addr; uint16_t product_num; uint16_t product_num_offset; //产品编号相对于起始地址偏移量 }BootItem; #define BOOT_STATIC_INIT(_name, _comm_item, _ans_call, _flash_item, _back_up_addr, _app_start_addr, _product_num, _product_num_offset) \ BootItem _name = \ { \ kBootCmd_None, \ kBootStep_None, \ false, \ 0, \ 0, \ 0, \ 0, \ 0, \ NULL, \ ((void *)_comm_item), \ _ans_call, \ _flash_item, \ _back_up_addr, \ _app_start_addr, \ _product_num, \ _product_num_offset, \ } void bsp_boot_poll(BootItem *item); void bsp_boot_set_cmd(BootItem *item, BootCmd cmd, uint8_t* buf, uint16_t len); bool bsp_boot_move_firmware(BootItem *item, uint32_t start_addr, uint32_t max_len); uint16_t bsp_boot_get_pack_idx(BootItem *item); uint32_t bsp_boot_get_update_time(BootItem *item); #ifdef __cplusplus } #endif #endif