ota_xsp.h 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. #ifndef __OTA_XSP_H__
  2. #define __OTA_XSP_H__
  3. #include "stm32f10x.h"
  4. #define FIRST_UPDATE_TYPE 0x04 //升级类
  5. #define SECOND_UPDATE_START 0x1003 //启动升级下行
  6. #define SECOND_UPDATE_CONTINUE 0x1004 //连续包下行
  7. #define SECOND_UPDATE_RETRA_DOWN 0x1005 //重传包下行
  8. #define SECOND_UPDATE_OFFLINE_CMD 0x1006 //网关下发开始离线升级指令下行
  9. #define SECOND_UPDATE_STATE_DOWN 0x1007 //升级状态读取下行
  10. #define SECOND_UPDATE_RETRA_UP 0x2005 //重传包请求上行
  11. #define SECOND_UPDATE_STATE_UP 0x2007 //升级状态上行
  12. //固件类型
  13. enum {
  14. FIRM_BT_TYPE = 0x01,
  15. FIRM_PT_TYPE = 0x02,
  16. FIRM_MCU_TYPE = 0x03,
  17. FIRM_LUA_TYPE = 0x04,
  18. };
  19. #define OTA_XSP_EACH_MAX_BYTES 128 //单包最大字节数
  20. #define OTA_XSP_LOSEPAGE 50 //最大丢包百分比 最小为10%,最大为60%
  21. #define OTA_XSP_UPDATE_PAYLAOA_LEN 128 //升级包每包下发的字节数
  22. //开始升级指令
  23. typedef struct _ota_xsp_start_info {
  24. uint16_t rcv_device_type; //接收设备类型
  25. uint32_t rcv_device_sn; //接收设备sn
  26. uint16_t des_device_type; //被升级设备类型
  27. uint32_t des_device_sn; //被升级设备sn
  28. uint8_t firmware_type; //固件类型
  29. uint32_t update_version; //升级包版本
  30. uint32_t total_bytes; //升级包总长度
  31. uint16_t each_max_bytes; //单包最大字节数
  32. uint16_t losepage; //最大丢包百分比 最小为10%,最大为60%
  33. uint16_t Send_interval; //发送间隔
  34. }__attribute__((packed)) ota_xsp_start_info_t;
  35. //连续发包指令
  36. typedef struct _ota_xsp_continues_info {
  37. uint16_t rcv_device_type; //接收设备类型
  38. uint32_t rcv_device_sn; //接收设备sn
  39. uint16_t des_device_type; //被升级设备类型
  40. uint32_t des_device_sn; //被升级设备sn
  41. uint16_t total_pkgs; //总包数
  42. uint16_t sub_pkg_id; //当前包id
  43. uint16_t sub_pkg_len; //当前包长度
  44. uint8_t pkg_content[OTA_XSP_UPDATE_PAYLAOA_LEN]; //数据
  45. // uint32_t *pkg_content;
  46. }__attribute__((packed)) ota_xsp_continues_info_t;
  47. //重传请求
  48. typedef struct _ota_xsp_retransmit_req {
  49. uint16_t rcv_device_type; //接收设备类型
  50. uint32_t rcv_device_sn; //接收设备sn
  51. uint16_t repeat_devict_type; //发起请求的设备类型
  52. uint32_t repeat_device_sn; //发起请求的设备sn
  53. uint16_t repeat_sub_pkg_id; //升级包编号
  54. }__attribute__((packed)) ota_xsp_retransmit_req_t;
  55. //升级状态读取下行
  56. typedef struct _ota_xsp_state_read
  57. {
  58. uint16_t rcv_device_type; //接收设备类型
  59. uint32_t rcv_device_sn; //接收设备sn
  60. uint16_t des_device_type; //被升级设备类型
  61. uint32_t des_device_sn; //被升级设备sn
  62. uint32_t reserve; //预留
  63. }__attribute__((packed)) ota_xsp_xsp_state_read_t;
  64. //升级状态上传
  65. typedef struct _ota_xsp_state_upload
  66. {
  67. uint16_t rcv_device_type; //接收设备类型
  68. uint32_t rcv_device_sn; //接收设备sn
  69. uint16_t des_device_type; //目标设备类型
  70. uint32_t des_device_sn; //目标设备sn
  71. uint32_t des_bt_ver; //被升级设备的bootloader版本
  72. uint32_t des_pt_ver; //升级目标设备产测版本
  73. uint32_t des_app_ver; //被升级设备的app版本
  74. uint8_t update_state; //升级状态码
  75. uint32_t reserve; //预留
  76. }__attribute__((packed)) ota_xsp_state_upload_t;
  77. #define OTA_XSP_START_INFO_LEN sizeof(ota_xsp_start_info_t)
  78. #define OTA_XSP_CONTINUES_INFO_LEN sizeof(ota_xsp_continues_info_t)
  79. #define OTA_XSP_RETRNSMIT_INFO_LEN sizeof(ota_xsp_retransmit_req_t)
  80. void xsp_master_ota_proc(uint8_t *data, uint16_t len);
  81. void xsp_ota_handle(void);
  82. #endif