update.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. #ifndef _UPDATE_H_
  2. #define _UPDATE_H_
  3. #include "typedef.h"
  4. extern u32 UPDATA_BEG;
  5. #define UPDATA_FLAG_ADDR ((void *)((u32)&UPDATA_BEG + 0x08))
  6. #define BOOT_STATUS_ADDR ((void *)((u32)&UPDATA_BEG)) //预留8个bytes
  7. #define UPDATA_MAGIC (0x5A00) //防止CRC == 0 的情况
  8. typedef enum {
  9. UPDATA_NON = UPDATA_MAGIC,
  10. UPDATA_READY,
  11. UPDATA_SUCC,
  12. UPDATA_PARM_ERR,
  13. UPDATA_DEV_ERR,
  14. UPDATA_KEY_ERR,
  15. } UPDATA_RESULT;
  16. typedef enum {
  17. USB_UPDATA = UPDATA_MAGIC, //0x5A00
  18. SD0_UPDATA, //0x5A01
  19. SD1_UPDATA,
  20. PC_UPDATA,
  21. UART_UPDATA,
  22. BT_UPDATA,
  23. BLE_APP_UPDATA,
  24. SPP_APP_UPDATA,
  25. DUAL_BANK_UPDATA,
  26. BLE_TEST_UPDATA,
  27. NORFLASH_UPDATA,
  28. //NOTE:以上的定义不要调整,新升级方式在此添加,注意加在USER_NORFLASH_UFW_UPDATA之前;
  29. USER_LC_FLASH_UFW_UPDATA,
  30. USB_HID_UPDATA,
  31. USER_NORFLASH_UFW_UPDATA,
  32. NON_DEV = 0xFFFF,
  33. } UPDATA_TYPE;
  34. // sd
  35. enum {
  36. SD_CONTROLLER_0 = 1,
  37. SD_CONTROLLER_1,
  38. };
  39. enum {
  40. SD0_IO_A = 1,
  41. SD0_IO_B,
  42. SD1_IO_A,
  43. SD1_IO_B,
  44. SD0_IO_C,
  45. SD0_IO_D,
  46. SD0_IO_E,
  47. SD0_IO_F,
  48. };
  49. typedef struct _UPDATA_SD {
  50. u8 control_type;
  51. u8 control_io;
  52. u8 online_check_way;
  53. u8 max_data_baud;
  54. u16 wDevTimeOutMax;
  55. u8 per_online_status;
  56. u8 hc_mode;
  57. u8(*io_det_func)(void);
  58. u8 power;
  59. u8 control_io_clk;
  60. u8 control_io_cmd;
  61. u8 control_io_dat;
  62. } UPDATA_SD;
  63. // uart
  64. typedef struct _UPDATA_UART {
  65. u32 control_io_tx; //<IO口对接
  66. u32 control_io_rx; //<IO口对接
  67. u32 control_baud; //<波特率
  68. u32 control_timeout; //<超时,单位10ms
  69. } UPDATA_UART; /*共12个bytes*/
  70. #define UPDATE_PARAM_MAGIC 0x5441
  71. #if (USE_SDFILE_NEW == 1)
  72. typedef struct _UPDATA_PARM {
  73. u16 parm_crc;
  74. u16 parm_type; //UPDATA_TYPE:sdk pass parm to uboot
  75. u16 parm_result; //UPDATA_TYPE:uboot return result to sdk
  76. u16 magic; //0x5441
  77. //8byte
  78. union {
  79. struct {
  80. u8 file_path[32]; //updata file path
  81. };
  82. struct {
  83. u8 file_patch[32]; //updata file path
  84. };
  85. };
  86. u8 parm_priv[32]; //sd updata
  87. //64byte
  88. u32 ota_addr;
  89. u16 ext_arg_len;
  90. u16 ext_arg_crc;
  91. //8 byte
  92. } UPDATA_PARM;
  93. enum EXT_ARG_TYPE {
  94. EXT_LDO_TRIM_RES = 0,
  95. EXT_JUMP_FLAG,
  96. EXT_TYPE_MAX = 0xff,
  97. };
  98. struct ext_arg_t {
  99. u8 type;
  100. u8 len;
  101. u8 *data;
  102. };
  103. //8+64+8+32 =112;
  104. #else
  105. typedef struct _UPDATA_PARM {
  106. u16 parm_crc;
  107. u16 parm_type; //UPDATA_TYPE:sdk pass parm to uboot
  108. u16 parm_result; //UPDATA_TYPE:uboot return result to sdk
  109. u8 file_patch[32]; //updata file patch
  110. u8 parm_priv[32]; //sd updata
  111. } UPDATA_PARM;
  112. #endif
  113. #define UPDATE_PRIV_PARAM_LEN 32
  114. void update_mode_api_v2(UPDATA_TYPE type, void (*priv_param_fill_hdl)(UPDATA_PARM *p), void (*priv_update_jump_handle)(int type));
  115. void update_param_priv_fill(UPDATA_PARM *p, void *priv, u16 priv_len);
  116. u16 update_result_get(void);
  117. bool device_is_first_start();
  118. int update_result_deal();
  119. void update_result_set(u16 result);
  120. void update_clear_result();
  121. bool update_success_boot_check(void);
  122. typedef u8(*update_handler_t)(void);
  123. typedef enum _UPDATE_STATE_T {
  124. UPDATE_TASK_INIT,
  125. UPDATE_CH_INIT,
  126. UPDATE_CH_SUCESS_REPORT,
  127. UPDATE_CH_EXIT,
  128. } UPDATE_STATE_T;
  129. struct update_target {
  130. char *name;
  131. update_handler_t driver_close;
  132. };
  133. //void update_param_private_fill_handle_register(void (*handle)(UPDATA_PARM *p));
  134. #define REGISTER_UPDATE_TARGET(target) \
  135. const struct update_target target sec(.update_target)
  136. extern const struct update_target update_target_begin[];
  137. extern const struct update_target update_target_end[];
  138. #define list_for_each_update_target(p) \
  139. for (p = update_target_begin; p < update_target_end; p++)
  140. #endif