IAP.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /********************************************************************************
  2. * File Name: IAP.h
  3. * Function Describe: Header file for IAP.c
  4. * Explain:
  5. * Writer: ShiLiangWen
  6. * Date: 2015-1-30
  7. 兼容FOTA升级
  8. 支持串口升级
  9. *******************************************************************************/
  10. #ifndef __IAP_H
  11. #define __IAP_H
  12. /***********************************************************************************/
  13. #include "stdint.h"
  14. #define IAP_VERSION_NAME "HigosL IAP V2.0\r\n"
  15. #define PRODUCT_NAME "NULL"
  16. #define MCU_FLAG 84 //MCU标志64KB+20KB=84
  17. #define IAP_RX_BUF (1024+52)
  18. //保留0X08000000~0X08003FFF 的空间(16KB)为IAP使用
  19. #define FLASH_APP1_ADDR 0x08004000 //APP应用程序起始地址(存放在FLASH)
  20. #define APP_CONFIG_ADDR 0X08003C00 //0x08003C00~0x0804000 为系统参数区
  21. #define FOTA_MAGIC 0x41544f46 // "FOTA"
  22. #define PCTA_MAGIC 0x41544350 // "PCTA"
  23. #define UPDATE_PROTOCOL_APP 0x80 //APP下载协议
  24. #define UPDATE_PROTOCOL 0x80
  25. #define UPDATE_CODE_VERSION_REQ 0x00
  26. #define UPDATE_CODE_DATA_REQ 0x01
  27. #define UPDATE_CODE_DATA_WITH_CRC_REQ 0x02
  28. #define UPDATE_DEV_ID_SIZE 16
  29. typedef struct SUT_PRODUCT_PARA
  30. {
  31. //IAP通用段
  32. char FoTaMark[4];//空中升级标识符,当为"FoTa"时执行空中升级,IAP需要从外部FLASH拷贝APP到MCU中,并修改Mark为"FTOK"后运行APP
  33. unsigned char MD5[16];//APP程序数据的MD5
  34. unsigned long ExAddr;//外部FLASH中APP数据存储的开始地址
  35. unsigned long AppLen;//App数据长度
  36. unsigned char Rand;//在使用串口进行加密时会用到
  37. unsigned long PSN;
  38. char ProductName[14];//项目名
  39. unsigned short ProductVersion; //版本号
  40. /////以下为App自定义使用段,前面的不能修改
  41. }__attribute__((packed)) SUT_PRODUCT_PARA;
  42. typedef struct
  43. {
  44. uint32_t magic; // UPDATE_MAGIC
  45. uint8_t protocol;
  46. uint8_t code;
  47. char dev_id[UPDATE_DEV_ID_SIZE];
  48. uint16_t tid;
  49. uint16_t count; // 除本结构外后续数据长度
  50. } __attribute__((packed)) update_hdr_t; //sizeof()=4+2+16+2+2=26
  51. typedef struct
  52. {
  53. update_hdr_t hdr;
  54. char product[16];
  55. uint16_t version;
  56. } __attribute__((packed)) update_version_req_t;
  57. typedef struct
  58. {
  59. update_hdr_t hdr;
  60. uint8_t version_md5[16]; // 升级包 MD5
  61. uint32_t size; // 升级包大小
  62. } __attribute__((packed)) update_version_rsp_t;
  63. typedef struct
  64. {
  65. update_hdr_t hdr;
  66. uint8_t version_md5[16]; // 升级包 MD5
  67. uint32_t offset;
  68. uint32_t length;
  69. } __attribute__((packed)) update_data_req_t;
  70. typedef struct
  71. {
  72. update_hdr_t hdr; //26
  73. uint8_t version_md5[16]; // 升级包 MD5
  74. uint32_t offset;
  75. uint32_t length;
  76. uint8_t data[1];
  77. } __attribute__((packed)) update_data_rsp_t;
  78. extern int g_iFotaCt;
  79. extern int g_ulOffset;
  80. extern uint8_t IapRxBuf[IAP_RX_BUF];
  81. extern uint16_t IapRxLen;
  82. extern SUT_PRODUCT_PARA sutProductPara;
  83. void IapGetUpdateVersion(uint32_t magic);
  84. void IapGetUpdateData(uint32_t magic,uint32_t offset);
  85. int IapRecvMsgHandle(unsigned char *pData, unsigned short DataLen);
  86. typedef void (*iapfun)(void);//定义一个函数类型的参数.
  87. void iap_jump_app_s();
  88. /***********************************************************************************/
  89. #endif
  90. /***********************************************************************************/