update_loader_download.h 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. #ifndef _UPDATE_LOADER_DOWNLOAD_H_
  2. #define _UPDATE_LOADER_DOWNLOAD_H_
  3. #include "typedef.h"
  4. extern const int config_update_mode;
  5. extern const int support_dual_bank_update_en;
  6. #define UPDATE_MODULE_IS_SUPPORT(x) (config_update_mode & x)
  7. #define UPDATE_SUPPORT_DEV_IS_NULL() (config_update_mode == UPDATE_DEV_NULL)
  8. #define UPDATE_DUAL_BANK_IS_SUPPORT() (1 == support_dual_bank_update_en)
  9. struct __tws_ota_para {
  10. u32 fm_size;
  11. u32 fm_crc;
  12. u16 max_pkt_len;
  13. };
  14. typedef struct _ret_code {
  15. int stu;
  16. u8 err_code;
  17. } update_ret_code_t;
  18. typedef struct _update_op_api_tws {
  19. //for tws ota start
  20. int (*tws_ota_start)(void *priv);
  21. int (*tws_ota_data_send)(u8 *buf, u16 len);
  22. int (*tws_ota_err)(u8);
  23. u16(*enter_verfiy_hdl)(void *priv);
  24. u16(*exit_verify_hdl)(u8 *, u8 *);
  25. u16(*update_boot_info_hdl)(void *priv);
  26. int (*tws_ota_result_hdl)(u8);
  27. int (*tws_ota_data_send_pend)(void);
  28. //for user chip update
  29. int (*tws_ota_user_chip_update_send)(u8 cmd, u8 *buf, u16 len);
  30. } update_op_tws_api_t; //给tws同步升级用的接口
  31. update_op_tws_api_t *get_tws_update_api(void);
  32. void tws_sync_update_crc_handler_register(void (*crc_init_hdl)(void), u32(*crc_calc_hdl)(u32 init_crc, u8 *data, u32 len));
  33. void update_start_exit_sniff(void);
  34. void set_ota_status(u8 status);
  35. typedef struct _update_op_api_t {
  36. void (*ch_init)(void (*resume_hdl)(void *priv), int (*sleep_hdl)(void *priv));
  37. u16(*f_open)(void);
  38. u16(*f_read)(void *fp, u8 *buff, u16 len);
  39. int (*f_seek)(void *fp, u8 type, u32 offset);
  40. u16(*f_stop)(u8 err);
  41. int (*notify_update_content_size)(void *priv, u32 size);
  42. void (*ch_exit)(void *priv);
  43. } update_op_api_t;
  44. extern const update_op_api_t lmp_ch_update_op;
  45. extern const update_op_api_t strg_ch_update_op;
  46. extern const update_op_api_t rcsp_update_op;
  47. #define UPDATE_SEAGNMENT_EN 1
  48. enum {
  49. UPDATE_LOADER_OK = 1,
  50. UPDATE_LOADER_ERR,
  51. };
  52. enum {
  53. PKT_FLAG_MIDDLE = 0,
  54. PKT_FLAG_FIRST,
  55. PKT_FLAG_LAST,
  56. };
  57. //update result code bitmap
  58. #define UPDATE_RESULT_FLAG_BITMAP BIT(7)
  59. //update result code;
  60. enum {
  61. UPDATE_RESULT_ERR_NONE = 0,
  62. UPDATE_RESULT_FILE_SIZE_ERR = 0x1, //文件大小错误
  63. UPDATE_RESULT_LOADER_SIZE_ERR = 0x2, //loader大小错误
  64. UPDATE_RESULT_LOADER_VERIFY_ERR, //update loader校验失败
  65. UPDATE_RESULT_REMOTE_FILE_HEAD_ERR, //读升级文件头错误
  66. UPDATE_RESULT_LOCAL_FILE_HEAD_ERR = 0x5, //读flash文件头错误
  67. UPDATE_RESULT_NOT_FIND_TARGET_FILE_ERR, //找不到目标文件
  68. UPDATE_RESULT_FILE_OPERATION_ERR, //文件操作失败
  69. UPDATE_RESULT_FLASH_DATA_VERIFY_ERR, //flash数据校验失败
  70. UPDATE_RESULT_UBOOT_NOT_MATCH = 0x09, //UBOOT不匹配
  71. UPDATE_RESULT_PRODUCT_INFO_NOT_MATCH = 0x0a, //芯片型号不匹配
  72. UPDATE_RESULT_EX_DSP_UPDATE_ERR, //外部IC升级出错;
  73. UPDATE_RESULT_CFG_UPDATE_ERR, //配置升级出错
  74. UPDATE_RESULT_FLASH_ERASE_ERR = 0x0d, //flash 擦失败(可能是写保护)
  75. UPDATE_RESULT_REMOTE_FILE_NOT_MATCH, //升级文件不匹配
  76. UPDATE_RESULT_ANC_CFG_UPDATE_ERR, //ANC配置升级出错
  77. UPDATE_RESULT_ANC_COEF_UPDATE_ERR, //ANC配置升级出错
  78. UPDATE_RESULT_OTA_TWS_NO_RSP, //对耳同步升级传输数据没有回复
  79. UPDATE_RESULT_RESOURCE_LIMIT, //资源不足
  80. UPDATE_RESULT_OTA_TWS_START_ERR, //对耳启动升级失败
  81. UPDATE_RESULT_OTA_TWS_CRC_ERROR, //对耳校验失败
  82. UPDATE_RESULT_OTA_APP_EXIT, //升级过程APP强制退出
  83. UPDATE_RESULT_TWS_NO_CONNECT, //对耳未连接
  84. UPDATE_RESULT_FILE_SAME, //相同文件升级
  85. };
  86. #include "system/task.h"
  87. typedef struct _update_type_info_t {
  88. int type;
  89. u8 task_en;
  90. void (*cb)(void *priv, int type, u8 cmd);
  91. void *cb_priv;
  92. update_op_api_t *p_op_api;
  93. void (*common_state_cbk)(int type, u32 status, u32 code);
  94. OS_SEM update_sem;
  95. } update_type_info_t;
  96. typedef struct _update_mode_info_t {
  97. s32 type;
  98. void (*state_cbk)(int type, u32 status, void *priv);
  99. const update_op_api_t *p_op_api;
  100. u8 task_en;
  101. } update_mode_info_t;
  102. typedef struct _succ_report_t {
  103. u32 loader_saddr;
  104. u32 priv_param;
  105. u32(*update_param_write_hdl)(u32 priv, u8 *buf, u16 len);
  106. } succ_report_t;
  107. #define UPDATE_DEV_NULL 0
  108. #define UPDATE_BT_LMP_EN BIT(0)
  109. #define UPDATE_STORAGE_DEV_EN BIT(1)
  110. #define UPDATE_UART_EN BIT(2)
  111. #define UPDATE_APP_EN BIT(3) //包括APP升级还有其他升级方式,如串口升级(非测试盒方式)
  112. #define UPDATE_BLE_TEST_EN BIT(4)
  113. typedef struct _user_chip_update_t {
  114. u8 *file_name;
  115. int (*update_init)(void *priv, update_op_api_t *file_ops);
  116. int (*update_get_len)(void);
  117. int (*update_loop)(void *priv);
  118. } user_chip_update_t;
  119. typedef struct _user_chip_info_t {
  120. union {
  121. struct {
  122. u32 file_addr;
  123. };
  124. struct {
  125. u32 addr;
  126. };
  127. };
  128. u32 len;
  129. u16 crc;
  130. u32 dev_addr;
  131. } user_chip_update_info_t;
  132. typedef struct _update_size_t {
  133. u8 type;
  134. } update_type_t;
  135. enum UPDATE_SIZE_TYPE {
  136. UPDATE_LEN_TYPE_CONTENT = 0,
  137. UPDATE_LEN_TYPE_LOADER,
  138. UPDATE_LEN_TYPE_EX_IC,
  139. };
  140. void register_user_chip_update_handle(const user_chip_update_t *user_update_ins);
  141. void rcsp_update_loader_download_init(int update_type, void (*result_cbk)(void *priv, u8 type, u8 cmd));
  142. int app_active_update_task_init(update_mode_info_t *info);
  143. int update_file_verify(u32 ufw_addr, u16(*ufw_read)(void *buf, u32 addr, u32 len));
  144. //==========================================================//
  145. // 获取升级进度信息 //
  146. //注意: 只有双备份升级可以获取该信息 //
  147. //==========================================================//
  148. typedef struct _update_percent_info {
  149. u32 total_len; //固件总升级大小
  150. u32 finish_len; //当前完成升级大小
  151. u32 percent; //当前进度百分比
  152. } update_percent_info;
  153. //注册升级进度更新回调函数:
  154. void register_update_percent_info_callback_handle(void (*handle)(update_percent_info *info));
  155. //查询当前升级进度信息:
  156. void update_percent_info_query(update_percent_info *info);
  157. #endif /*_UPDATE_LOADER_DOWNLOAD_H_*/