AppIap.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #ifndef __MYIAP_H
  2. #define __MYIAP_H
  3. /*****************************************************************/
  4. #include <stm32f10x.h>
  5. #include "includes.h"
  6. #define DATA_DRAT_SIZE_PER_TIME 1024 //每一次数据请求包大小
  7. #define FOGA_RECV_BUFFER_SIZE DATA_DRAT_SIZE_PER_TIME+2 //两ASCII相当于一个数据,加两字节CRC
  8. #define FOTA_IAP_SOCKET 2
  9. #define ENABL_FOGA_BACK_DATA_PRINT 1 //是否允许空中升级过程打印接到数据的具体数据 数据量比较大
  10. //defautl: 1 不想看到具体数据
  11. //调试: 0 可以看到-调试用
  12. //注意,如果为0--要把 UART1_TX_BUFFER_SIZE 设置为1024+256才能看,否则内部可能会溢出
  13. #define FOTA_MAGIC 0x41544F46 // "FOTA"
  14. #define PCTA_MAGIC 0x41544350 // "PCTA"
  15. #define GOOD_UPDATE_STORAGE 0x9fedcba9
  16. #define FOTA_IAP_SERVER_IP "120.77.66.129"//POC_SERVER_IP
  17. #define FOTA_IAP_SERVER_PORT 1413//FOTA_SERVER_PORT
  18. #define UPDATE_PROTOCOL 0x80
  19. #define UPDATE_CODE_VERSION_REQ 0x00
  20. #define UPDATE_CODE_DATA_REQ 0x01
  21. #define UPDATE_CODE_DATA_WITH_CRC_REQ 0x02
  22. #define UPDATE_DEV_ID_SIZE 16
  23. #define TASK_WAIT 0x12
  24. #define TASK_PC_UPDATE 0x25
  25. #define TASK_MODEM_UPDATE 0x36
  26. #define TASK_FILE_CHECK 0x47
  27. #define TASK_GOTO_APP 0X58
  28. #define TASK_VERSION_ERROR 0x97
  29. #define TASK_EXIT 0xc2
  30. #define TICK_COUNT 9 //20ms
  31. #define TIME_OUT_IAP 45
  32. #define RETRY_TIME 3//重试次数
  33. #if 0
  34. #define APP_FILE_DATA_ADDR FILE_DATA_ADDR_END+1 //下载的APP存放首地址 0x20000 ~ 0x3FFFFF 下两M数据区
  35. #else
  36. #define APP_FILE_DATA_ADDR 0x200000
  37. #endif
  38. extern unsigned char Fota_Rcv_Pri_Flag;
  39. extern uint16_t ui_version;
  40. extern struct IAP_PRA IapPra;
  41. typedef struct APP_CONF
  42. {
  43. uint32_t start_addr;
  44. uint32_t app_size;
  45. uint32_t app_store_offset;
  46. }APP_CONF;
  47. typedef struct IAP_UI_PRA
  48. {
  49. uint8_t update;
  50. uint32_t total_size;
  51. uint32_t down_size;
  52. }IAP_UI_PRA;
  53. typedef struct IAP_PRA
  54. {
  55. unsigned short Tick10ms;
  56. unsigned char TaskStart;
  57. unsigned char TaskStatus;
  58. uint32_t timeOut;
  59. uint8_t timeTry;//重试次数
  60. uint8_t resetModemTime;//复位模块次数
  61. unsigned char V_flag;//第一次版本请求 0未成功请求 1成功请求过 -- 这个主要是考虑是否确认MD16码的使用
  62. unsigned char GotData_IPRECV; //0空中升级过程中版本或数据请求没有数据返回 1有版本请求返回 2有数据请求返回 3下载完数据正在校验文件
  63. char MD5[16];
  64. uint32_t u_req_offset;//当前包所预想请求的offset
  65. uint32_t u_offset;//保存当前包请求到的offset
  66. uint32_t u_length;//收到的包长度
  67. uint32_t u_filesize;//文件长度
  68. uint32_t u_DownFilesize;//已下载的文件长度
  69. unsigned char FOGA_buf[FOGA_RECV_BUFFER_SIZE];
  70. uint8_t FOTA_IS_ON; //0 not start, 1 start
  71. IAP_UI_PRA iapUI;
  72. }IAP_PRA;
  73. typedef struct
  74. {
  75. uint32_t magic; // UPDATE_MAGIC
  76. uint8_t protocol;
  77. uint8_t code;
  78. char dev_id[UPDATE_DEV_ID_SIZE];
  79. uint16_t tid;
  80. uint16_t count; // 除本结构外后续数据长度
  81. } __attribute__((packed)) update_hdr_t; //sizeof()=4+2+16+2+2=26
  82. typedef struct
  83. {
  84. update_hdr_t hdr;
  85. char product[16];
  86. uint16_t version;
  87. } __attribute__((packed)) update_version_req_t;
  88. typedef struct
  89. {
  90. update_hdr_t hdr;
  91. uint8_t version_md5[16]; // 升级包 MD5
  92. uint32_t offset;
  93. uint32_t length;
  94. } __attribute__((packed)) update_data_req_t;
  95. typedef struct
  96. {
  97. update_hdr_t hdr; //26
  98. uint8_t version_md5[16]; // 升级包 MD5
  99. uint32_t offset;
  100. uint32_t length;
  101. uint8_t data[1];
  102. } __attribute__((packed)) update_data_rsp_t;
  103. void FotaIap_Handle(char *);
  104. void SetUpAppricationVerPending(void);
  105. void SetUpAppricationVerShow(int);
  106. void SetUpAppricationVerResponse(void);
  107. #endif