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
 |