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