/**************************************************************************** Copyright(c) 2019 by Aerospace C.Power (Chongqing) Microelectronics. ALL RIGHTS RESERVED. This Information is proprietary to Aerospace C.Power (Chongqing) Microelectronics and MAY NOT be copied by any method or incorporated into another program without the express written consent of Aerospace C.Power. This Information or any portion thereof remains the property of Aerospace C.Power. The Information contained herein is believed to be accurate and Aerospace C.Power assumes no responsibility or liability for its use in any way and conveys no license or title under any patent or copyright and makes no representation or warranty that this Information is free from patent or copyright infringement. ****************************************************************************/ #ifndef _IOT_BT_EXT_DFU_PROTOCOL_H_ #define _IOT_BT_EXT_DFU_PROTOCOL_H_ #ifdef __cplusplus extern "C" { #endif /* dfu protocol notify requst code */ #define IOT_BT_EXT_DFU_NOTIFY_REQ 0x01 /* dfu protocol notify response code */ #define IOT_BT_EXT_DFU_NOTIFY_RSP 0x02 /* dfu error code success */ #define IOT_BT_EXT_DFU_ERR_SUCCESS 0x00 /* dfu error code fail */ #define IOT_BT_EXT_DFU_ERR_FAIL 0x01 /* dfu error packet len */ #define IOT_BT_EXT_DFU_ERR_LENGTH 0x02 /* dfu error prog */ #define IOT_BT_EXT_DFU_ERR_PROG 0x03 /* dfu error erase */ #define IOT_BT_EXT_DFU_ERR_ERASE 0x04 /* dfu error invalid */ #define IOT_BT_EXT_DFU_ERR_INVALID 0x05 /* dfu error notify id */ #define IOT_BT_EXT_DFU_ERR_NOTIFY 0x06 /* dfu error operate code */ #define IOT_BT_EXT_DFU_ERR_OPCODE 0x07 #pragma pack(push) #pragma pack(1) /* bt upgrade operate code */ typedef enum _iot_bt_ext_dfu_opcode { IOT_BT_EXT_DFU_OPCODE_START_DFU = 0x01, IOT_BT_EXT_DFU_OPCODE_WR_IMG, IOT_BT_EXT_DFU_OPCODE_CHK_FW_VLD, IOT_BT_EXT_DFU_OPCODE_IMG_RST, IOT_BT_EXT_DFU_OPCODE_SYS_RST, IOT_BT_EXT_DFU_OPCODE_RPT_TGT_INFO, IOT_BT_EXT_DFU_OPCODE_MAX } iot_bt_ext_dfu_opcode_t; /* upgrade protocol format */ typedef struct _iot_bt_ext_dfu_hdr { /* notify id */ uint8_t notify_id; /* operate code */ uint8_t opcode; /* payload length */ uint16_t payload_len; /* payload data */ uint8_t payload[0]; } iot_bt_ext_dfu_hdr_t; /* request payload of write image */ typedef struct _iot_bt_ext_dfu_req_pld_wr_img { /* send image address */ uint32_t offset; /* send image data */ uint8_t img[0]; } iot_bt_ext_dfu_req_pld_wr_img_t; /* request payload of image control header */ typedef struct _iot_bt_ext_dfu_req_pld_img_ctl_hdr { uint8_t ic_type; uint8_t secure_version; union { uint16_t value; struct { uint16_t xip: 1; // payload is executed on flash uint16_t enc: 1; // all the payload is encrypted uint16_t load_when_boot: 1; // load image when boot uint16_t enc_load: 1; // encrypt load part or not uint16_t enc_key_select: 3; // referenced to ENC_KEY_SELECT uint16_t not_ready : 1; //for copy image in ota uint16_t not_obsolete : 1; //for copy image in ota uint16_t rsvd: 7; }; } ctrl_flag; uint16_t signature; uint16_t crc16; uint32_t image_length; } iot_bt_ext_dfu_req_pld_img_ctl_hdr_t; /* response payload of report target info */ typedef struct _iot_bt_ext_dfu_rsp_pld_tgt_info { /* error number */ uint8_t err_no; /* dfu version */ uint8_t dfu_version; /* current ic type */ uint8_t ic_type; /* dfu bank id */ uint8_t bank_id; /* dfu receive buffer byte size */ uint16_t buffer_size; /* origin version */ uint32_t origin_version; /* vendor version */ uint32_t vendor_version; } iot_bt_ext_dfu_rsp_pld_tgt_info_t; /* response payload of write image */ typedef struct _iot_bt_ext_dfu_rsp_pld_wr_img { /* error number */ uint8_t err_no; /* next receve image offset */ uint32_t next_offset; } iot_bt_ext_dfu_rsp_pld_wr_img_t; /* response payload of normal transport */ typedef struct _iot_bt_ext_dfu_rsp_pld_normal { /* error number */ uint8_t err_no; /* parameter */ uint8_t para[0]; } iot_bt_ext_dfu_rsp_pld_normal_t; #pragma pack(pop) #ifdef __cplusplus } #endif #endif