Files
kunlun/export/inc/upgrade/iot_upgrade_api.h
2024-09-28 14:24:04 +08:00

885 lines
26 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_UPGRADE_API_H
#define IOT_UPGRADE_API_H
#include "iot_pkt_api.h"
#include "iot_queue_api.h"
#include "iot_mem_pool_api.h"
#include "iot_config_api.h"
#ifdef __cplusplus
extern "C" {
#endif
/** \defgroup UPGARDE_APIs UPGARDE APIs
* @brief UPGRADE APIs
*
*
*/
/** @addtogroup UPGARDE_APIs
* @{
*
*/
/* define error code from STA. */
/* OK to upgrade */
#define IOT_PLC_UPGRADE_OK (0)
/* receive request in invalid state */
#define IOT_PLC_UPGRADE_STATE_ERR (1)
/* same version. don't upgrade */
#define IOT_PLC_UPGRADE_ERR_SAME_VERSION (2)
/* flash operation error */
#define IOT_PLC_UPGRADE_FLASH_ERROR (3)
/* don't upgrade in trail run state*/
#define IOT_PLC_UPGRADE_TRAIL_RUN_REJ (4)
/* upgrade err because no memory */
#define IOT_PLC_UPGRADE_ERR_NO_MEM (5)
/* block size error */
#define IOT_PLC_UPGRADE_ERR_BLOCK_SIZE (6)
/* unknown error */
#define IOT_PLC_UPGRADE_ERR_UNKNOWN (7)
#define IOT_FILE_HDR_LEN (0x60)
/* file type of the upgrading image */
/* CCo upgrading file */
#define IOT_FILE_TYPE_CCO (0)
/* STA upgrading file */
#define IOT_FILE_TYPE_STA (1)
/* External device upgrading file */
#define IOT_FILE_TYPE_EXT_DEV (2)
/* invalid upgrading file type */
#define IOT_FILE_TYPE_INVALID (0xFFFF)
#define IOT_PLC_UPGRADE_ST_INVALID (0)
#define IOT_PLC_UPGRADE_ST_IDLE (1)
#define IOT_PLC_UPGRADE_ST_RECVING (2)
#define IOT_PLC_UPGRADE_ST_RECV_DONE (3)
#define IOT_PLC_UPGRADE_ST_EXECUTING (4)
#define IOT_PLC_UPGRADE_ST_TRAIL_RUN (5)
#define IOT_PLC_UPGRADE_ST_TRAIL_FAIL (6)
/* device switch part result */
/* none switch part */
#define IOT_PLC_UPGRADE_SWITCH_NONE (0)
/* upgrade switch part successful */
#define IOT_PLC_UPGRADE_SWITCH_SUCC (1)
/* upgrade switch part fail */
#define IOT_PLC_UPGRADE_SWITCH_FAIL (2)
/* other switch part (not upgrade switch part) successful */
#define IOT_PLC_UPGRADE_OTHER_SWITCH_SUCC (3)
/* other switch part (not upgrade switch part) fail */
#define IOT_PLC_UPGRADE_OTHER_SWITCH_FAIL (4)
/* 8 blocks in a upgrade window */
#define IOT_SG_CCO_UPGRADE_BM_SIZE (1)
/* max supported upgrading FW size is 300*8*400 bytes. */
#define IOT_SG_CCO_UPGRADE_BM_SIZE_MAX (300)
#if (IOT_SMART_GRID_ENABLE && PLC_SUPPORT_STA_ROLE)
#define IOT_SG_UPGRADE_BLOCK_CNT (4)
#else
#define IOT_SG_UPGRADE_BLOCK_CNT (0)
#endif
/* the latest state before the restart */
#define UPGRADE_BP_STATE_IDLE (0)
#define UPGRADE_BP_STATE_RECVING (1)
#define UPGRADE_BP_STATE_RECV_DONE (2)
/* get upgrade method */
#define UPGRADE_GET_METHOD_SG (0)
#define UPGRADE_GET_METHOD_CLI (1)
typedef enum {
UPGRADE_DATA_TYPE_FW,
UPGRADE_DATA_TYPE_PIB,
UPGRADE_DATA_TYPE_PKG,
UPGRADE_DATA_TYPE_CUS,
UPGRADE_DATA_TYPE_INVALID = 0xFF,
} iot_upgrade_data_type;
typedef enum {
PART_0,
PART_1,
PART_INVALID = 0xFF,
} iot_upgrade_part_t;
/* callback for crc check */
typedef void (*file_part_crc_check)(uint8_t result);
/**
* @brief falsh_read_end - callback for read a data block to flash
* @param data iot_pkt_t data
* @param result: ERR_OK: success. others: fail
*/
typedef void(*falsh_read_end)(iot_pkt_t *data, uint32_t result);
/**
* @brief flash_write_end - callback for write a data block to flash
* @param block_index flash data block index
* @param result: ERR_OK: success. others: fail
*/
typedef void(*flash_write_end)(uint32_t block_index, uint32_t result);
typedef struct _iot_start_src {
/** upgrade ID, remains the same in single progress */
uint32_t id;
/** upgrade data block size, unit is byte,
valid value: 100 200 300 400 */
uint32_t block_size;
/** firmware size, uint is byte, max size : 444K */
uint32_t fw_size;
/** pib size, uint is byte, now : 32K */
uint32_t pib_size;
/** custom size, uint is byte */
uint32_t cus_size;
/** firmware crc-32 */
uint32_t fw_crc;
/** only for CLI upgrading. */
uint32_t fw_version;
/** pib crc-32 */
uint32_t pib_crc;
/** cus crc-32 */
uint32_t cus_crc;
/** crc check buffer */
iot_pkt_t *crc_check_buf;
/** crc check callback */
file_part_crc_check crc_check_cb;
/** callback of reading a data block to flash */
falsh_read_end read_block_cb;
/** callback of writting a data block to flash */
flash_write_end write_block_cb;
} iot_start_src_t;
typedef struct _iot_start_rst {
/** upgrade ID, remains the same in single progress */
uint32_t id;
/** start to upgrade result code */
uint32_t flags;
} iot_start_rst_t;
typedef struct _iot_trans_cmd {
/** upgrade ID, remains the same in single progress */
uint32_t id;
/** block data use crc or not */
uint32_t crc_flag;
/** data block number */
uint32_t block_num;
/** type of data,PIB or FW,see iot_upgrade_data_type */
uint8_t data_type;
/** iot packet data -- fw block data */
iot_pkt_t *data;
} iot_trans_cmd_t;
typedef struct _iot_upg_sts_src {
/** upgrade ID, remains the same in single progress */
uint32_t id;
/** upgrade data block size, unit is byte */
uint32_t block_size;
/** type of data,PIB or FW,see iot_upgrade_data_type */
uint32_t file_type;
/** bitmap start position, unit is byte */
uint32_t bmp_start;
/** bitmap length, unit is byte */
uint32_t bmp_len;
} iot_upg_sts_src_t;
typedef struct _iot_upg_sts_rst {
/** upgrade ID, remains the same in single progress */
uint32_t id;
/** upgrade data block size */
uint32_t block_size;
/** upgrade current state */
uint32_t state;
/** sign bitmap first zero position */
uint32_t pos_zero;
/** bitmap size: > 444K/100 */
uint8_t *bitmap;
} iot_upg_sts_rst_t;
typedef struct _iot_pkg_upg_sts_src {
/** upgrade ID, remains the same in single progress */
uint32_t id;
/** upgrade data block size, unit is byte */
uint32_t block_size;
/** start block index in bitmap */
uint32_t block_index;
/** block count to query */
uint32_t block_cnt;
} iot_pkg_upg_sts_src_t;
typedef struct _iot_pkg_upg_sts_rst {
/** upgrade ID, remains the same in single progress */
uint32_t id;
/** upgrade current state */
uint32_t state;
/** start block index in bitmap */
uint32_t block_index;
/** block count queried */
uint32_t block_cnt;
/** size of the bitmap buffer in byte */
uint32_t bmp_size;
/** bitmap size: > 444K/100 */
uint8_t *bitmap;
} iot_pkg_upg_sts_rst_t;
typedef struct _iot_sta_info_src {
/** query list id */
uint8_t list;
} iot_sta_info_src_t;
typedef struct _iot_sta_info_rst {
/** query list id */
uint8_t list;
/** upgrade ID, remains the same in single progress */
uint32_t id;
uint32_t info;
} iot_sta_info_rst_t;
typedef struct _iot_upg_block_info_src {
/** upgrade ID, remains the same in single progress */
uint32_t id;
/** start block index in bitmap */
uint32_t block_index;
/** type of data,PIB or FW,see iot_upgrade_data_type */
uint32_t file_type;
}iot_upg_block_info_src;
typedef struct _iot_upg_block_info_rst {
/** upgrade ID, remains the same in single progress */
uint32_t id;
/** is unwritten block */
bool_t blank;
/** type of data,PIB or FW,see iot_upgrade_data_type */
uint32_t file_type;
uint32_t next_blank_block_index;
}iot_upg_block_info_rst;
typedef struct _iot_upg_ext_file_info_rst {
/* start offset */
uint32_t offset;
/* external upgrade file size */
uint32_t file_size;
/* external upgrade file crc */
uint32_t file_crc;
}iot_upg_ext_file_info_rst;
typedef struct _iot_upg_bp_resume_info {
/* upgrade state, see UPGRADE_BP_STATE_XXX */
uint8_t state;
/* upgrade type, see UPGRADE_GET_METHOD_XXX */
uint8_t upgrade_type;
/* external device upgrade flag */
uint8_t ext_upgrade_flag;
/* upgrade pib part flag */
uint8_t upgrade_pib_flag;
/* upgrade fw part flag */
uint8_t upgrade_fw_flag;
/* upgrade cus part flag */
uint8_t upgrade_cus_flag;
/* file crc */
uint32_t file_crc;
/* file len */
uint32_t file_len;
/* fw part checksum */
uint32_t fw_checksum;
/* pib part checksum */
uint32_t pib_checksum;
/* cus part checksum */
uint32_t cus_checksum;
}iot_upg_bp_resume_info_t;
#define UPGRADE_VALUE_CHECK(src, dest, str) \
if ( src != dest ) { \
iot_printf(" %s(%d): %s\n", __FUNCTION__, __LINE__, str); \
return (1); \
}
/**
* @brief - get a random value as the length.
* only when file length from flash is 0.
* @return: file length
*/
uint32_t iot_upgrade_get_backup_len();
/**
* @brief - get a random value as the crc.
* only when CRC from flash is 0.
* @return: file crc
*/
uint32_t iot_upgrade_get_backup_crc();
/**
* @brief: get boot partition id. This mehtod shall be called before calling
* commit method.
* @param boot_part: 0 for part 0. 1 for part 1.
* @retval: 0 for success case. other for failed case.
*/
uint32_t iot_upgrade_get_part(uint32_t *boot_part);
/**
* @brief: get the partition id other than the boot partition.
* @retval: id of the boot partition id. User shall make sure
* this value is valid.
*/
uint32_t iot_upgrade_get_another_part(uint32_t part);
/**
* @brief iot_upgrade_get_fw_crc() - get upgrade firmware crc value
* @param part: firmware partition number
*
* @return 0 - failed case
* @return other value for CRC
*/
uint32_t iot_upgrade_get_fw_crc(uint32_t part);
/**
* @brief iot_upgrade_get_upgrade_status() - get upgrade status
*
* @return 0xff - failed case
* @return other value for upgrade status
*/
uint32_t iot_upgrade_get_upgrade_status();
/**
* @brief iot_upgrade_get_fw_size() - get upgrade firmware size
* @param part: firmware partition number
*
* @return 0 - failed
* @return other - the crc value
*/
uint32_t iot_upgrade_get_fw_size(uint32_t part);
/**
* @brief iot_upgrade_get_fw_sts() - get upgrade firmware status
* @param part: firmware partition number
* @param crc: firmware status
*
* @return 0 - succeed
* @return 1 - fail
*/
uint32_t iot_upgrade_get_fw_sts(uint32_t part, char *sts);
/**
* @brief iot_upgrade_get_trail_run_dur() - get upgrade running period time
* @param part: firmware partition number
* @return: trail run duration
*/
uint32_t iot_upgrade_get_trail_run_dur(uint32_t part);
/**
* @brief iot_upgrade_get_fw_blksize() - get upgrade firmware block size
* @param part: firmware partition number
* @return: firmware block size
*/
uint32_t iot_upgrade_get_fw_blksize(uint32_t part);
/**
* @brief iot_upgrade_save_fw_crc() - save upgrade firmware crc value
* @param part: firmware partition number
* @param crc: firmware crc value to be saved
*/
void iot_upgrade_save_fw_crc(uint32_t part, uint32_t crc);
/**
* @brief iot_upgrade_save_upgrade_status() - save upgrade status
* @param status: upgrade status
*/
void iot_upgrade_save_upgrade_status(uint32_t status);
/**
* @brief iot_upgrade_save_fw_size() - save upgrade firmware size
* @param part: firmware partition number
* @param crc: firmware size to be saved
*/
void iot_upgrade_save_fw_len(uint32_t part, uint32_t len);
/**
* @brief iot_upgrade_save_fw_sts() - save upgrade firmware status
* @param part: firmware partition number
* @param crc: firmware status to be saved
*/
void iot_upgrade_save_fw_sts(uint32_t part, uint32_t state);
/**
* @brief iot_upgrade_save_fw_period() - save upgrade running period time
* @param part: firmware partition number
* @param tr_dur: train run duration
*/
void iot_upgrade_save_trail_run_dur(uint32_t part, uint32_t tr_dur);
/**
* @brief iot_upgrade_save_fw_blksize() - save upgrade firmware block size
* @param part: firmware partition number
* @param tr_dur: train run duration
*/
void iot_upgrade_save_fw_blksize(uint32_t part, uint32_t blksize);
/**
* @brief iot_upgrade_reset() - reset the chip
* @return 0 - succeed
* @return 1 - fail
*/
uint32_t iot_upgrade_reset();
/**
* @brief iot_upgrade_start() - Prepare the environment of upgrade and active
* transfer-status
* @param rst: pointer to the output of upgrade start structure
* @param src: pointer to the input of upgrade start structure
*
* @return 0 - succeed
* @return 1 - fail
*/
uint32_t iot_upgrade_start(iot_start_rst_t *rst, iot_start_src_t *src);
/**
* @brief iot_upgrade_read_fw_data() - Read fw data from flash
* @param data: data buffer
* @param size: data buffer size
* @param offset: part offset from which to read
* @param part: file part to read
* @retval: 0 - succeed
* @retval: 1 - fail
*/
uint32_t iot_upgrade_read_fw_data(void *data, uint32_t size,
uint32_t offset, uint32_t part);
/**
* @brief iot_upgrade_trans() - Handle a transfer command frame.
* It always free trans->pkt.
* @param trans: pointer to the input of upgrade transfer command infos
* @return: ERR_OK for successful case.
* @return: other value for failed case. see ERR_XXX.
*/
uint32_t iot_upgrade_trans(iot_trans_cmd_t *trans);
/*
* @brief: iot_upgrade_read - read specific block from flash
* @param trans: pointer to iot_trans_cmd_t specific the block to read
* @return: ERR_OK for successful case.
* @return: other value for failed case. see ERR_XXX.
*/
uint32_t iot_upgrade_read(iot_trans_cmd_t *trans);
/**
* @brief iot_upgrade_query_written_block_num() - Query written block num
*
* @retval: written block num
*/
uint32_t iot_upgrade_query_written_block_num();
/**
* @brief iot_upgrade_query_next_block() - Query next blank block
* @param rst: result info
* @param src: current index and file type info
*
* @retval: 0 - succeed
* @retval: 1 - fail
*/
uint32_t iot_upgrade_query_next_block(iot_upg_block_info_rst *rst,
iot_upg_block_info_src *src);
/**
* @brief iot_upgrade_is_completed() - Check if no block is blank
*
* @retval: 0 - uncompleted
* @retval: 1 - completed
*/
uint32_t iot_upgrade_is_completed();
/**
* @brief iot_upgrade_query_block_info() - Query specified block in
* @param rst: result info
* @param src: index and file type info
*
* @retval: 0 - succeed
* @retval: 1 - fail
*/
uint32_t iot_upgrade_query_block_info(iot_upg_block_info_rst *rst,
iot_upg_block_info_src *src);
/**
* @brief iot_upgrade_query_state() - Query upgrade state
* @param rst : pointer to the output of upgrade query structure
* @param src : pointer to the input of upgrade query structure
*
* @return 0 - succeed
* @return 1 - fail
*/
uint32_t iot_upgrade_query_state(iot_upg_sts_rst_t *rst,
iot_upg_sts_src_t *src);
/**
* @brief iot_upgrade_query_station_info() - Query station infomations
* @param rst: pointer to the output of station info structure
* @param src: pointer to the input of station info structure
*
* @return 0 - succeed
* @return 1 - fail
*/
uint32_t iot_upgrade_query_station_info(iot_sta_info_rst_t * rst,
iot_sta_info_src_t *src);
/**
* @brief iot_upgrade_commit() - Handle a commit command when upgrade frame
* transfer finished
* @param upgrade_id: current upgrade id
*
* @return 0 = succeed
* @return 1 = fail
*/
uint32_t iot_upgrade_commit(uint32_t upgrade_id);
/**
* @brief: read data of PIB/FW from flash
* @param buf: the buffer to store request data
* @param read_size: number of byte to read. shall aligh to 4 byte
* @param offset: offset of the PIB/FW to be read
* @param read_part: see UPGRADE_DATA_TYPE_XXX. not support
* UPGRADE_DATA_TYPE_PKG.
* @param cache_flag: 1 - cache mode, 0 - normal mode.
* @retval: ERR_OK for successfully case.
* See ERR_XXX for failed case.
*/
uint32_t iot_pkg_upgrade_read(uint8_t *buf, uint32_t read_size, uint32_t offset,
uint32_t read_part, uint8_t cache_flag);
/**
* @brief iot_upgrade_cancel_commit() - Handle a cancel commit command
* @param upgrade_id: current upgrade id
*
* @return 0 = succeed
* @return 1 = fail
*/
uint32_t iot_upgrade_cancel_commit(uint32_t upgrade_id);
/**
* @ @brief: get length of pib read only size
* @return: length of pib ro
*/
uint32_t iot_upgrade_get_pib_ro_size();
/**
* @ @brief: get length of pib
* @return: length of pib
*/
uint32_t iot_upgrade_get_pib_len();
/**
* @ @brief: get length of fw
* @return: length of fw
*/
uint32_t iot_upgrade_get_fw_len();
/**
* @ @brief: get length of cus
* @return: length of cus
*/
uint32_t iot_upgrade_get_cus_len();
/**
* @brief: set a bit in received bitmap
* @param index: index of the block
* @return: ERR_OK if successed. ERR_FAILED if failed.
*/
uint32_t iot_pkg_upgrade_set_bit(uint32_t index);
/**
* @brief: check if specific bit is set in received bitmap
* @param index: index of the block
* @return: 1 if the bit was set. 0 for other case.
*/
uint32_t iot_pkg_upgrade_is_set_bit(uint32_t index);
/**
* @brief: check if all blocks were transferred
* @param block_cnt: total count of blocks to check
* @return: 1 if all blocks were transferred. 0 for other case.
*/
uint32_t iot_pkt_upgrade_trans_all_done(uint32_t block_cnt);
/**
* @brief get header length.
* @param file_hdr: file header data.
* @return header length.
*/
uint32_t iot_get_file_header_len(uint8_t *file_hdr);
/**
* @brief get fw length.
* @param file_hdr: file header data.
* @return fw length.
*/
uint32_t iot_get_file_fw_len(uint8_t *file_hdr);
/**
* @brief get pib length.
* @param file_hdr: file header data.
* @return pib length.
*/
uint32_t iot_get_file_pib_len(uint8_t *file_hdr);
/**
* @brief get cus length.
* @param file_hdr: file header data.
* @return cus length.
*/
uint32_t iot_get_file_cus_len(uint8_t *file_hdr);
/**
* @brief get fw start position.
* @param file_hdr: file header data.
* @return fw start address.
*/
uint32_t iot_get_file_fw_start(uint8_t *file_hdr);
/**
* @brief get pib start position.
* @param file_hdr: file header data.
* @return pib start address.
*/
uint32_t iot_get_file_pib_start(uint8_t *file_hdr);
/**
* @brief get cus start position.
* @param file_hdr: file header data.
* @return cus start address.
*/
uint32_t iot_get_file_cus_start(uint8_t *file_hdr);
/**
* @brief: get file type
* @param file_hdr: file header data
* @retval: the file type. see IOT_FILE_TYPE_XXX
*/
uint32_t iot_get_file_type_value(uint8_t *file_hdr);
/**
* @brief: get file type and check if local file applicable to local device
* @param file_hdr: file header data
* @retval: the file type. see IOT_FILE_TYPE_XXX
*/
uint32_t iot_get_file_type(uint8_t *file_hdr);
/**
* @brief: get file length
* @param file_hdr: file header data
* @retval: length of the file. Or return 0 if file hdr is invalid.
*/
uint32_t iot_get_file_len(uint8_t *file_hdr);
/**
* @brief: get file CRC
* @param file_hdr: file header data
* @retval: CRC of the file. Or return 0 if file hdr is invalid.
*/
uint32_t iot_get_file_crc(uint8_t *file_hdr);
/*
* @brief: check if crc of the file is correct
* @param file_hdr: pointer to file header
* @param len: length of the file
* @retval: 1 if the crc is valid, 0 invalid.
*/
uint32_t iot_check_file_crc(uint8_t *file_hdr, uint32_t len);
/**
* @brief: get file version
* @param file_hdr: file header data
* @retval: version of the file.
*/
uint32_t iot_get_file_version(uint8_t *file_hdr);
/**
* @brief: get image type
* @param file_hdr: file header data
* @retval: image type of the file.
*/
uint8_t iot_get_image_type(uint8_t *file_hdr);
/**
* @brief: get vendor id
* @param file_hdr: file header data
* @retval: vendor id of the file.
*/
uint16_t iot_get_vendor_id(uint8_t *file_hdr);
/**
* @brief: iot_upgrade_is_busy() - check upgrade status is busy
* @retval: 0 for idle status, other for busy status
*/
uint32_t iot_upgrade_is_busy();
/**
* @brief: start upgrading with upgrade package file
* @param rst: pointer to the output of upgrade start structure
* @param upgrade_id: upgrade id
* @param block_size: block size
* @param file_size: size of the upgrade package file.
* @param file_crc: file crc
* @param block_num: block number of upgrade file.
* @param ext_upgrade_flag: external devie upgrade flag.
* @param file_hdr: pointer to buffer of file header
* @retval: 0 for succeed case. Other for failed case.
*/
uint32_t iot_pkg_upgrade_start(iot_start_rst_t *rst, uint32_t upgrade_id,
uint32_t block_size, uint32_t file_size, uint32_t file_crc,
uint32_t block_num, uint8_t ext_upgrade_flag, uint8_t *file_hdr);
/**
* @brief iot_upgrade_switch_part(): swicth boot partition to another
* @retval: 0 for succeed case. Other for failed case.
*/
uint32_t iot_upgrade_switch_part();
/**
* @brief iot_upgrade_get_switch_part_info() - get the last switch result
* @retval: switch part result, see - IOT_PLC_UPGRADE_SWITCH_XXX.
*/
uint8_t iot_upgrade_get_switch_part_info();
/**
* @brief iot_upgrade_set_first_boot() - set first boot flag after upgrade
* @param is_first_boot: is first boot
*/
void iot_upgrade_set_first_boot(bool_t first_boot);
/**
* @brief iot_upgrade_is_first_boot() - query if first boot after upgrade
* @return true - first boot
* @return false - not first boot
*/
bool_t iot_upgrade_is_first_boot();
/**
* @brief: transfer data to flash. It always consume trans->pkt.
* @param trans: the trans file obj with data to be transfered.
* @retval: ERR_OK for successfully case. other value for failed case.
* See ERR_XXX for failed case.
*/
uint32_t iot_pkg_upgrade_trans(iot_trans_cmd_t *trans);
/**
* @brief: query upgrade state for upgrading by package
* @param rst: pointer to the output of upgrade start structure
* @param src: pointer to the input of upgrade start structure
* @retval: ERR_OK for succeed case. see ERR_XXX for failed case.
*/
uint32_t iot_pkg_upgrade_query_state(iot_pkg_upg_sts_rst_t *rst,
iot_pkg_upg_sts_src_t *src);
/**
* @brief: get pad value
* @return: the pad value in upgrading file
*/
uint8_t iot_pkg_get_pad_value();
/**
* @brief: query station information
* @param rst: pointer to the output of station info structure
* @param src: pointer to the input of station info structure
* @retval: ERR_OK for succeed case. see ERR_XXX for failed case.
*/
uint32_t iot_pkg_upgrade_query_station_info(iot_sta_info_rst_t * rst,
iot_sta_info_src_t *src);
/**
* @brief: commit a sg upgrade from package
* @param upgrade_id: upgrade id
* @retval: ERR_OK for succeed case. see ERR_XXX for failed case.
*/
uint32_t iot_pkg_upgrade_commit(uint32_t upgrade_id);
/**
* @brief: cancel a sg upgrade from package
* @param upgrade_id: upgrade id
* @param cancel_commit: cancel commit
* @retval: ERR_OK for succeed case. see ERR_XXX for failed case.
*/
uint32_t iot_pkg_upgrade_cancel_commit(uint32_t upgrade_id,
uint32_t cancel_commit);
/**
* @brief iot_pkg_upgrade_reset() - reset the chip for upgrading through package
* @return 0 - succeed
* @return 1 - fail
*/
uint32_t iot_pkg_upgrade_reset();
/**
* @brief iot_upgrade_fw_hdr_img_crc_check() - check img crc
* @retval: 0 - succeed
* @retval: 1 - fail
*/
uint8_t iot_upgrade_fw_hdr_img_crc_check();
/**
* @brief iot_running_fw_get_size() - get the compressed firmware size executed.
* @return fw size.
*/
uint32_t iot_running_fw_get_size(void);
/**
* @brief iot_running_fw_read() - get the firmware data currently executed.
* @param offset - offset position, ranging from 0 ~ fw size.
* @param buffer - buffer to store FW data.
* @param length - length to read data.
* @return number of bytes read successfully.
*/
uint32_t iot_running_fw_read(uint32_t offset,uint8_t *buffer,
uint32_t length);
/**
* @brief iot_pkg_upgrade_file_crc_update() - calculate the file crc value.
* @param init_vect - the init vector.
* @param pbyData - data to be calculated.
* @param stLength - length the data.
* @param index - block count of data.
* @return calculate value.
*/
uint32_t iot_pkg_upgrade_file_crc_update(uint32_t init_vect, uint8_t *buffer,
uint32_t length, uint32_t index);
/**
* @brief iot_upgrade_get_ext_file_info() - get external upgrade file info.
* @param ext_rst - pointer to the output of file info structure.
* @return ERR_OK - get scusseed, other - get fail.
*/
uint32_t iot_upgrade_get_ext_file_info(iot_upg_ext_file_info_rst *ext_rst);
/**
* @brief iot_upgrade_get_bp_resume_info() - get breakpoint resume info.
* @param method - see UPGRADE_GET_METHOD_XXX.
* @param resume_info - pointer to the output of resume info structure.
* @return ERR_OK - get scusseed, other - get fail.
*/
uint32_t iot_upgrade_get_bp_resume_info(uint8_t method,
iot_upg_bp_resume_info_t *resume_info);
/**
* @}
*/
#ifdef __cplusplus
}
#endif
#endif