144 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			144 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/****************************************************************************
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								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
							 |