ota.h 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. #ifndef _OTA_H_
  2. #define _OTA_H_
  3. #include "includes.h"
  4. #include "device.h"
  5. #include "gateway.h"
  6. #include "../network_mgr/net_proc.h"
  7. //#include "../gateway_collect/gateway_collect.h"
  8. #include "../network/timeout.h"
  9. #define ONLOOKER_TIMEOUT_TIME 10
  10. #define CONTINUOUS_TIMEOUT_TIME 300
  11. #define RETRANSMIT_TIMEOUT_TIME 10 //重传时间
  12. #define CONTINUOUS_TIMEOUT_TIME_MUX 900
  13. #define CONTINUOUS_TIMEOUT_DELAY_TIME 3
  14. #define OTA_TOTAL_TIMEOUT_TIME 900 //ucos定时器时间
  15. #define OTA_TOTAL_TIMEOUT_TIME_TICK (15*60*1000)//滴答定时器定时时间
  16. #define OTA_CONTINUOUS_DIRECT 1
  17. #define OTA_CONTINUOUS_DELAY 2
  18. #define OTA_CONTINUOUS_CLOSE 0
  19. #define OTA_CAD_FREE_DELAYTIME 300
  20. #define OTA_CAD_OCCUPY_DELAYTIME 700
  21. #define OTA_FIRST_DELAYTIME 2000
  22. extern uint8_t ota_continuous_end_flag;
  23. extern timeout_t ota_retransmit_delay;
  24. extern uint8_t updata_state;
  25. extern uint8_t cad_ch_activitydetected;
  26. extern timeout_t ota_total_timer;
  27. extern uint8_t ota_total_timer_start;
  28. //升级状态
  29. #define START_UPDATA 0x21 //已收到正确的升级指令
  30. #define PACKET_LOSS_MORE 0x22 //丢包超标,升级结束
  31. #define RETRANSMIT_TIMEOUT 0x23 //重传阶段超时,升级失败
  32. #define UPDATA_CRC_ERROR 0x24 //升级包CRC校验失败
  33. #define DEVICE_TYPE_ERROR 0x25 //目标设备类型不匹配
  34. #define UPDATA_PACKAGE_LENGTH_ERROR 0x26 //长度不符
  35. #define FIXED_CHARACTER_ERROR 0x27 //固定字符错误
  36. #define UPDATA_DATA_SUCCESS 0x28 //升级包接收正确
  37. #define UPDATA_TOTAL_TIMEOUT 0x29 //升级总时间超时
  38. //#define BOOT_ERROR 0x2A
  39. #define UPDATA_SUCCESS 0x2A //升级成功
  40. #define UPDATA_BACK 0x2B //回退
  41. //升级标记
  42. #define UPDATA_FLAG 0x81
  43. #define BACKOFF_FLAG 0x82
  44. #define BACKOFF_OVER 0x83
  45. #define OTA_UPDATE_BOOTROM_FLASH_START_ADDR (0x08000000) //
  46. #define OTA_UPDATE_APP1_FLASH_SIZE (0x20000) //
  47. #define OTA_UPDATE_APP1_FLASH_START_ADDR (0x08020000) //
  48. #define OTA_UPDATE_APP1_FLASH_END_ADDR (OTA_UPDATE_APP1_FLASH_START_ADDR+OTA_UPDATE_APP1_FLASH_SIZE-1) //
  49. #define OTA_UPDATE_APP2_FLASH_SIZE (0x20000) //
  50. #define OTA_UPDATE_APP2_FLASH_START_ADDR (0x08040000) //
  51. #define OTA_UPDATE_APP2_FLASH_END_ADDR (OTA_UPDATE_APP2_FLASH_START_ADDR+OTA_UPDATE_APP2_FLASH_SIZE-1) //
  52. #define OTA_UPDATE_APP3_FLASH_SIZE (0x20000) //
  53. #define OTA_UPDATE_APP3_FLASH_START_ADDR (0x08060000) //
  54. #define OTA_UPDATE_APP3_FLASH_END_ADDR (OTA_UPDATE_APP3_FLASH_START_ADDR+OTA_UPDATE_APP3_FLASH_SIZE-1) //
  55. #define MAX_LOSS_PKG_COUNT 50 //最大丢包数,超过此数直接标记下载升级包失败。
  56. typedef struct ota_pkg_info {
  57. uint16_t des_device_type;
  58. uint32_t des_device_id;
  59. uint16_t rcv_device_type;
  60. uint32_t rcv_device_id;
  61. //升级包类型和版本;
  62. uint32_t update_type;
  63. uint32_t update_version;
  64. //升级包总长度和校验码
  65. uint32_t total_bytes;
  66. uint32_t total_crc;
  67. uint16_t total_pkgs;
  68. uint16_t sub_pkg_id;
  69. uint16_t ota_state;
  70. OS_TMR ota_tmr;
  71. OS_TMR ota_onlooker_tmr;
  72. OS_TMR ota_continuous_tmr;
  73. OS_TMR ota_retransmit_tmr;
  74. OS_TMR ota_total_tmr;
  75. uint16_t lastRightPkgNum;
  76. uint16_t lossPkgIndex;
  77. uint16_t lossPkgCounter;
  78. uint16_t lossPkgId[MAX_LOSS_PKG_COUNT];
  79. uint16_t retransLossPkts; //重传丢包个数
  80. uint16_t Send_interval; //发送间隔
  81. } ota_pkg_info_t;
  82. //设备固定信息,不需在app中写eeprom
  83. typedef struct _device_fixed_info
  84. {
  85. uint8_t Work_State; //当前工作状态
  86. }device_fixed_info_t;
  87. extern device_fixed_info_t device_fixed_info;
  88. //升级状态
  89. typedef struct _updata_state
  90. {
  91. uint16_t updata_flag;
  92. uint16_t backoff_begin;
  93. uint16_t backoff_over;
  94. }updata_state_t;
  95. extern updata_state_t updata_state_info;
  96. //extern void gateway_lora_ota_proc(gateway_collect_com_t *p_msg);
  97. //extern int lora_gw_ota_info_Init(update_msg_format *p_update, uint32_t total_len, uint32_t total_crc);
  98. //extern void lora_gw_ota_start(system_network_t *p_sys_net);
  99. //extern void lora_gw_ota_continues(system_network_t *p_sys_net);
  100. #endif