132 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			3.4 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 UPGRADE_DRIVER_H
 | |
| #define UPGRADE_DRIVER_H
 | |
| 
 | |
| #include "iot_pkt_api.h"
 | |
| #include "iot_queue.h"
 | |
| #include "iot_mem_pool.h"
 | |
| #include "iot_upgrade_api.h"
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| extern "C" {
 | |
| #endif
 | |
| 
 | |
| /** \defgroup Driver_APIs UPGARDE APIs
 | |
|  *  @brief UPGRADE APIs
 | |
|  *
 | |
|  *
 | |
|  */
 | |
| 
 | |
| /** @addtogroup Driver_APIs
 | |
|  * @{
 | |
|  *
 | |
|  */
 | |
| 
 | |
| #define UPGRADE_DEFAULT_BLOCK_SIZE          (400)
 | |
| /*
 | |
|  * upgrade file max size = 700k bytes
 | |
|  * recover block size = 1200 bytes
 | |
|  * bitmap size = 700 * 1024 / 1200 / 8
 | |
|  */
 | |
| #define UPGRADE_RECOVER_BITMAPT_SIZE        (75)
 | |
| 
 | |
| typedef struct node_t {
 | |
|     iot_pkt_t *data;       /* firmware data block */
 | |
|     uint32_t block_num;    /* data block number */
 | |
|     struct node_t *next;   /* next node */
 | |
| } node_t, *node_ptr;
 | |
| 
 | |
| typedef struct {
 | |
|     node_ptr head, tail;
 | |
| } link_queue;
 | |
| 
 | |
| typedef enum {
 | |
|     UPGRADE_TYPE_INVALID = 0x0,
 | |
|     UPGRADE_TYPE_CLI,
 | |
|     UPGRADE_TYPE_SG,
 | |
| } iot_upgrade_type_t;
 | |
| 
 | |
| typedef enum {
 | |
|     STATUS_IDLE = 0x0,
 | |
|     STATUS_INIT,
 | |
|     STATUS_TRANS,
 | |
|     STATUS_FINISH,
 | |
|     STATUS_COMMIT,
 | |
| } iot_upgrade_sts_t;
 | |
| 
 | |
| typedef enum {
 | |
|     QUERY_STA_ID_NUM = 0x0,
 | |
|     QUERY_STA_ID_VER,
 | |
|     QUERY_STA_ID_BOOTLOADER,
 | |
|     QUERY_STA_ID_CRC,
 | |
|     QUERY_STA_ID_LEN,
 | |
|     QUERY_STA_ID_DEV_TYPE,
 | |
|     QUERY_STA_ID_RESERVED
 | |
| } iot_query_sta_info;
 | |
| 
 | |
| #pragma pack(push)
 | |
| #pragma pack (1)
 | |
| /* for recover upgrade when sta power off and on */
 | |
| typedef struct _iot_upgrade_recover_info {
 | |
|     uint8_t  type;       /* upgrade type */
 | |
|     uint32_t id;         /* upgrade id, for sg */
 | |
|     uint32_t size;       /* file size, for sg */
 | |
|     uint32_t version;    /* file version, for cli */
 | |
|     uint32_t header_crc; /* file header crc, for sg */
 | |
|     uint32_t file_crc;   /* file crc, for sg and cli */
 | |
|     /* bitmap for storing block, for sg and cli */
 | |
|     uint8_t  bitmap[UPGRADE_RECOVER_BITMAPT_SIZE];
 | |
| } iot_upgrade_recover_info_t;
 | |
| #pragma pack(pop)
 | |
| 
 | |
| #define UPGRADE_VALUE_CHECK(src, dest, str) \
 | |
|     if ( src != dest ) { \
 | |
|         iot_printf(" %s(%d): %s\n", __FUNCTION__, __LINE__, str); \
 | |
|         return (1); \
 | |
|     }
 | |
| 
 | |
| /**
 | |
|  * @brief iot_upgrade_init(): init uprade module
 | |
|  * @retval: ERR_OK for successful case. ERR_FAIL for failed case.
 | |
|  */
 | |
| uint32_t iot_upgrade_init();
 | |
| 
 | |
| /**
 | |
|  * @brief:  check mode of the file
 | |
|  * @param file_hdr: file header data
 | |
|  * @retval: get mode of the file.
 | |
|  */
 | |
| uint8_t iot_get_file_mode(uint8_t *file_hdr);
 | |
| 
 | |
| /**
 | |
|  * @brief:  get enc mode of the upgrade file
 | |
|  * @param file_hdr: file header data
 | |
|  * @retval: enc mode of the file. see IOT_FILE_MODE_XXX.
 | |
|  *          IOT_FILE_MODE_UNKNOWN if file format is unknown.
 | |
|  */
 | |
| uint8_t iot_pkt_upgrade_get_enc_mode(uint8_t *file_hdr);
 | |
| /**
 | |
|  * @}
 | |
|  */
 | |
| 
 | |
| 
 | |
| #ifdef __cplusplus
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #endif /* UPGRADE_DRIVER_H */
 |