#ifndef __MYIAP_H #define __MYIAP_H /*****************************************************************/ #include #include "includes.h" #define DATA_DRAT_SIZE_PER_TIME 1024 //每一次数据请求包大小 #define FOGA_RECV_BUFFER_SIZE DATA_DRAT_SIZE_PER_TIME+2 //两ASCII相当于一个数据,加两字节CRC #define FOTA_IAP_SOCKET 2 #define ENABL_FOGA_BACK_DATA_PRINT 1 //是否允许空中升级过程打印接到数据的具体数据 数据量比较大 //defautl: 1 不想看到具体数据 //调试: 0 可以看到-调试用 //注意,如果为0--要把 UART1_TX_BUFFER_SIZE 设置为1024+256才能看,否则内部可能会溢出 #define FOTA_MAGIC 0x41544F46 // "FOTA" #define PCTA_MAGIC 0x41544350 // "PCTA" #define GOOD_UPDATE_STORAGE 0x9fedcba9 #define FOTA_IAP_SERVER_IP "120.77.66.129"//POC_SERVER_IP #define FOTA_IAP_SERVER_PORT 1413//FOTA_SERVER_PORT #define UPDATE_PROTOCOL 0x80 #define UPDATE_CODE_VERSION_REQ 0x00 #define UPDATE_CODE_DATA_REQ 0x01 #define UPDATE_CODE_DATA_WITH_CRC_REQ 0x02 #define UPDATE_DEV_ID_SIZE 16 #define TASK_WAIT 0x12 #define TASK_PC_UPDATE 0x25 #define TASK_MODEM_UPDATE 0x36 #define TASK_FILE_CHECK 0x47 #define TASK_GOTO_APP 0X58 #define TASK_VERSION_ERROR 0x97 #define TASK_EXIT 0xc2 #define TICK_COUNT 9 //20ms #define TIME_OUT_IAP 45 #define RETRY_TIME 3//重试次数 #if 0 #define APP_FILE_DATA_ADDR FILE_DATA_ADDR_END+1 //下载的APP存放首地址 0x20000 ~ 0x3FFFFF 下两M数据区 #else #define APP_FILE_DATA_ADDR 0x200000 #endif extern unsigned char Fota_Rcv_Pri_Flag; extern uint16_t ui_version; extern struct IAP_PRA IapPra; typedef struct APP_CONF { uint32_t start_addr; uint32_t app_size; uint32_t app_store_offset; }APP_CONF; typedef struct IAP_UI_PRA { uint8_t update; uint32_t total_size; uint32_t down_size; }IAP_UI_PRA; typedef struct IAP_PRA { unsigned short Tick10ms; unsigned char TaskStart; unsigned char TaskStatus; uint32_t timeOut; uint8_t timeTry;//重试次数 uint8_t resetModemTime;//复位模块次数 unsigned char V_flag;//第一次版本请求 0未成功请求 1成功请求过 -- 这个主要是考虑是否确认MD16码的使用 unsigned char GotData_IPRECV; //0空中升级过程中版本或数据请求没有数据返回 1有版本请求返回 2有数据请求返回 3下载完数据正在校验文件 char MD5[16]; uint32_t u_req_offset;//当前包所预想请求的offset uint32_t u_offset;//保存当前包请求到的offset uint32_t u_length;//收到的包长度 uint32_t u_filesize;//文件长度 uint32_t u_DownFilesize;//已下载的文件长度 unsigned char FOGA_buf[FOGA_RECV_BUFFER_SIZE]; uint8_t FOTA_IS_ON; //0 not start, 1 start IAP_UI_PRA iapUI; }IAP_PRA; typedef struct { uint32_t magic; // UPDATE_MAGIC uint8_t protocol; uint8_t code; char dev_id[UPDATE_DEV_ID_SIZE]; uint16_t tid; uint16_t count; // 除本结构外后续数据长度 } __attribute__((packed)) update_hdr_t; //sizeof()=4+2+16+2+2=26 typedef struct { update_hdr_t hdr; char product[16]; uint16_t version; } __attribute__((packed)) update_version_req_t; typedef struct { update_hdr_t hdr; uint8_t version_md5[16]; // 升级包 MD5 uint32_t offset; uint32_t length; } __attribute__((packed)) update_data_req_t; typedef struct { update_hdr_t hdr; //26 uint8_t version_md5[16]; // 升级包 MD5 uint32_t offset; uint32_t length; uint8_t data[1]; } __attribute__((packed)) update_data_rsp_t; void FotaIap_Handle(char *); void SetUpAppricationVerPending(void); void SetUpAppricationVerShow(int); void SetUpAppricationVerResponse(void); #endif