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 */
|