IAP.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. /********************************************************************************
  2. * File Name: IAP.h
  3. * Function Describe: Header file for IAP.c
  4. * Explain:
  5. * Writer: ShiLiangWen
  6. * Date: 2016-1-7
  7. 支持串口升级
  8. *******************************************************************************/
  9. #ifndef __IAP_H
  10. #define __IAP_H
  11. /***********************************************************************************/
  12. #include "stdint.h"
  13. #define IAP_VERSION_NAME "SLW_IAP_HS V1.0.1\r\n"
  14. #define IAP_RX_BUF (4096+82) //SPI FLASH 页大小为4KB,因此每次数据4KB,加上包头
  15. //保留0X08000000~0X08003FFF 的空间(16KB)为IAP使用
  16. #define FLASH_APP1_ADDR 0x08004000 //APP应用程序起始地址(存放在FLASH)
  17. #define APP_CONFIG_ADDR 0X08003C00 //0x08003C00~0x0804000 为系统参数区
  18. //#define APP_CONFIG_ADDR 0X0801FC00 //0x0801FC00~0x0802000 为系统参数区
  19. #define FOTA_MAGIC 0x41544f46 // "FOTA" 用于远程升级,这里不需要
  20. #define PCTA_MAGIC 0x41544350 // "PCTA" 用于PC串口升级
  21. #define UPDATE_PROTOCOL_APP 0x80 //APP下载协议
  22. #define UPDATE_PROTOCOL_RFILE 0x95 //RFile资源文件下载协议
  23. #define UPDATE_DEV_ID_SIZE 16 //设备ID长度 未用
  24. //以下命令用于传输APP程序
  25. #define UPDATE_CODE_VERSION_REQ 0x00
  26. #define UPDATE_CODE_DATA_REQ 0x01
  27. #define UPDATE_CODE_DATA_WITH_CRC_REQ 0x02
  28. //以下命令用于传输资源文件
  29. #define DOWNLOAD_FILE_LIST_REQ 0x03 //文件列表
  30. #define DOWNLOAD_FILE_DATA_REQ 0x04
  31. typedef struct
  32. {
  33. uint32_t magic; // UPDATE_MAGIC
  34. uint8_t protocol;
  35. uint8_t code;
  36. char dev_id[UPDATE_DEV_ID_SIZE];
  37. uint16_t tid;
  38. uint16_t count; // 除本结构外后续数据长度
  39. } __attribute__((packed)) update_hdr_t; //sizeof()=4+2+16+2+2=26
  40. typedef struct
  41. {
  42. update_hdr_t hdr;
  43. char product[16];
  44. uint16_t version;
  45. } __attribute__((packed)) update_version_req_t;
  46. typedef struct
  47. {
  48. update_hdr_t hdr;
  49. uint8_t version_md5[16]; // 升级包 MD5
  50. uint32_t size; // 升级包大小
  51. } __attribute__((packed)) update_version_rsp_t;
  52. typedef struct
  53. {
  54. update_hdr_t hdr;
  55. uint8_t version_md5[16]; // 升级包 MD5
  56. uint32_t offset;
  57. uint32_t length;
  58. } __attribute__((packed)) update_data_req_t;
  59. typedef struct
  60. {
  61. update_hdr_t hdr; //26
  62. uint8_t version_md5[16]; // 升级包 MD5
  63. uint32_t offset;
  64. uint32_t length;
  65. uint8_t data[1];
  66. } __attribute__((packed)) update_data_rsp_t;
  67. extern int g_ulOffset;
  68. extern uint8_t IapRxBuf[IAP_RX_BUF];
  69. extern uint16_t IapRxLen;
  70. void IapGetUpdateVersion(uint32_t magic);
  71. void IapGetUpdateData(uint32_t magic,uint32_t offset);
  72. int IapRecvMsgHandle(unsigned char *pData, unsigned short DataLen);
  73. typedef void (*iapfun)(void);//定义一个函数类型的参数.
  74. void iap_jump_app_s();
  75. /***********************************************************************************/
  76. #endif
  77. /***********************************************************************************/