Files
kunlun/app/bsrm/iot_bsrm_upgrade.h
2024-09-28 14:24:04 +08:00

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_BSRM_UPGRADE_H
#define IOT_BSRM_UPGRADE_H
#if IOT_BSRM_MODE
#ifdef __cplusplus
extern "C" {
#endif
/* bsrm upgrade state */
#define IOT_BSRM_UPGRADE_ST_INVALID 0
#define IOT_BSRM_UPGRADE_ST_IDLE 1
#define IOT_BSRM_UPGRADE_ST_RECEIVE 2
#define IOT_BSRM_UPGRADE_ST_RECV_DONE 3
#define IOT_BSRM_UPGRADE_ST_EXECUTE 4
/* bsrm upgrade file max bitmap size */
#define IOT_BSRM_BM_SIZE (1024)
/* bsrm upgrade file max size */
#define IOT_BSRM_MAX_SIZE (512 * 1024)
/* opo device upgrade descriptor */
typedef struct _iot_bsrm_upgrade {
/* current running part */
uint32_t current_part;
/* index bitmap for bsrm receive block. */
uint8_t block_bitmap[IOT_BSRM_BM_SIZE];
/* upgrade status */
uint8_t state;
/* upgrade id */
uint32_t upgrade_id;
/* total block cnt */
uint32_t total_block_cnt;
/* block size */
uint32_t block_size;
/* upgrade file crc value */
uint32_t crc;
/* skip upgrade flag */
uint8_t skip;
/* received data size */
uint32_t received_size;
/* total received block */
uint32_t rec_block_cnt;
/* window time of upgrade - unit: s */
uint32_t window_tm;
} iot_bsrm_upgrade_t;
typedef struct _iot_bsrm_upgrade_info {
/* bsrm upgrade status see - IOT_BSRM_UPGRADE_ST_XXX */
uint32_t state;
/* total block count of the upgrading file */
uint32_t block_cnt;
/* upgrade file crc value. */
uint32_t crc;
/* received block count */
uint32_t recv_cnt;
} iot_bsrm_upgrade_info_t;
/**
* @brief: init bsrm device upgrade.
* @retval: init upgrade result, ERR_OK - init successful, others - fail.
*/
uint32_t iot_bsrm_upgrade_init();
/**
* @brief: deinit bsrm device upgrade.
* @param bsrm_upgrade_handle: bsrm upgrade handle.
*/
void iot_bsrm_upgrade_deinit();
/**
* @brief: start bsrm device upgrade.
* @param total_block_cnt: upgrade file total block count.
* @param block_size: block size.
* @retval: ERR_OK - successful, others - fail.
*/
uint32_t iot_bsrm_upgrade_start(uint32_t total_block_cnt, uint32_t block_size);
/**
* @brief: handle upgrade data.
* @param block_index: current upgrade data block index.
* @param block_len: current upgrade data block length.
* @param data: current upgrade data ptr.
* @retval: ERR_OK - successful handle upgrade data, others - fail.
*/
uint32_t iot_bsrm_upgrade_data(uint32_t block_index, uint32_t block_len,
uint8_t *data);
/**
* @brief: stop upgrade.
* @retval: ERR_OK - successful handle upgrade data, others - fail.
*/
uint32_t iot_bsrm_upgrade_stop();
/**
* @brief: exe upgrade, commit data, reset module.
* @retval: ERR_OK - successful handle upgrade data, others - fail.
*/
uint32_t iot_bsrm_upgrade_exe();
/**
* @brief: psrm upgrade windows, stop upgrade when upgrade timeout.
*/
void iot_bsrm_upgrade_windows();
/**
* @brief: query bsrm upgrade info.
* @retval: ERR_OK - successful, others - fail.
*/
uint32_t iot_bsrm_query_upgrade_info(iot_bsrm_upgrade_info_t *query_info);
/**
* @brief: get the upgrade file segment bitmap info,
* invalid bitmap data set 0.
* @param bitmap: dec bitmap address.
* @param start_index: file segment bitmap offset address, start offset is 0.
* @param size: size of the dec bitmap.
* @return: valid dec bitmap size.
*/
uint32_t iot_bsrm_upgrade_query_bitmap_info(uint8_t *bitmap,
uint32_t start_index, uint32_t size);
#ifdef __cplusplus
}
#endif
#endif /* IOT_BSRM_MODE */
#endif /* IOT_BSRM_UPGRADE_H */