/* * @Description: * @Version: 2.0 * @Author: Seven * @Date: 2022-11-22 10:55:28 * @LastEditors: Seven * @LastEditTime: 2022-12-08 09:27:24 */ #ifndef __DISPLAY_CTRL_H__ #define __DISPLAY_CTRL_H__ #include "stm32f10x.h" #include "tools.h" #define XSP_UPDATE 0x5A //显示屏需要升级标志 #define IAP_VER1 0 #define IAP_VER2 1 //显示屏升级状态 // //显示屏指令执行结果 enum { XSP_RESULT_HEADCRC = 0xFF, //头或是CRC校验错误 XSP_RESULT_ERROR = 0x00, //执行错误 XSP_RESULT_SUCCESS = 0x01, //执行成功 XSP_RESULT_RCVERR = 0x02, //接收密文数据解密错误 XSP_RESULT_BUSY = 0x03, //显示屏忙 XSP_RESULT_RESET = 0x04, //显示屏模块复位,需要重新认证 XSP_RESULT_CRCERROR = 0x05, //显示屏接收数据CRC错误 XSP_RESULT_PCRCRERROR = 0x06, //pcrc错误 }; //iap指令执行结果 enum { XSP_IAP_RESULT_SUCCESS = 0x00, //正常 XSP_IAP_RESULT_ERROR = 0x01, //错误 XSP_IAP_RESULT_DECRYPTERR = 0x02, //解密错误 XSP_IAP_RESULT_IAPMODE = 0x03, //运行在IAPMode XSP_IAP_RESULT_UNKNOWNCOMM = 0x0F, //未知IAP指令 }; typedef enum { FIRST_READ_0xC0 = 0x00, //第一步 读取基本信息 SECOND_AUTH_0xC1_STEP01, //第二步 认证第一步 SECOND_AUTH_0xC1_STEP02, //第二步 认证第二步 SEND_IAP_0x01, //获取iap信息 SEND_IAP_0x02, //iap擦除 SEND_IAP_0x03, //iap编程 SEND_IAP_0x04, //iap校验 SEND_IAP_0x07, //iap结束 SEND_IAP_0x0F, //iap复位 // READ_XSP_0xC2, //读取特征值 // READ_XSP_0xC3, //读取当前数据 // READ_XSP_0xC4, //读取当前的时钟 // READ_XSP_0xC5, //读取记录数据,即历史数据 // READ_XSP_0xD3, //读取明文数据 // // READ_XSP_IDLE, //空闲状态 // READ_XSP_CHANGE, //显示屏的切换状态 }xspStatus_t; typedef struct _txspCommFrame { //帧头+长度码+帧号+地址码+指令码 +参数 +校验码 uint8_t fhead; //帧头(1Byte) uint8_t flen; //帧长度(1Byte) uint8_t findex; //帧序号(1Byte) uint32_t faddress; //地址码(1Byte) 改为SN uint8_t fcmd; //指令码(1Byte) }__attribute__((packed)) txspCommFrame_t; #define XSP_CMD_HEADLEN (5+3) // 显示屏协议头的长度 #define XSP_KEY_LEN 16 // 显示屏协议密钥的长度 typedef struct _xsp_C0_info { uint8_t KeySequence_number; //密钥序号 uint8_t Hardware_version[2]; //硬件版本 uint8_t Software_version[4]; //软件版本 uint8_t Compile_info[12]; //编译信息 uint8_t xsp_sn[8]; //显示屏的SN uint8_t protocolVer[2]; // 协议版本 uint8_t apptype; uint8_t appbase[4]; uint8_t devType[2]; uint8_t mfIndex[2]; uint8_t hardInfor[16]; uint8_t hardDate[6]; uint8_t chipPID[4]; //chipPID uint8_t chipDevID[2]; //debug id code uint8_t chipRevID[2]; //debug id code uint8_t bootVer[2]; }xsp_C0_info_t; typedef struct _issue_C1_info { uint8_t Authen_steps; //认证步骤 uint8_t Authent_R1[16]; //R1 uint8_t Authent_R2[16]; //R2 uint8_t key[16]; //认证后的密钥 uint8_t key_num; //初始密钥序号 }issue_C1_info_t; //////iap指令/// typedef struct _xsp_iap_0x01_info { uint8_t ispIns; //指令码 uint8_t iapRslt; //执行结果 uint8_t iapTimes; //本机IAP次数 uint8_t iapStatus; //固定0x01 uint32_t iapVer; //当前IAP版本 uint32_t curAppBase; //当前APP运行的基址 uint8_t chipUUID[12]; //主控芯片的UUID }__attribute__((packed)) xsp_iap_0x01_info_t; //显示屏通信参数 typedef struct _xsp_comm_info { xsp_C0_info_t xsp_info; //获取信息参数(0xC0) issue_C1_info_t issue_key; //认证参数(0xC1) }xsp_comm_info_t; extern xsp_comm_info_t xsp_comm_info[1]; //屏的信息 typedef struct _txsp_info { uint16_t xsp_type; //显示屏设备类型 uint32_t xsp_sn; //显示屏sn uint8_t curkey; //当前屏的密钥序号 uint8_t key[16]; //密钥key uint8_t key_iap[16]; //iap指令密钥 }__attribute__((packed)) txsp_info_t; typedef struct _ota_xsp_info { uint8_t xsp_index; //本采集器在路由表内的索引 uint8_t xsp_ota_begin; //显示屏升级开始标志 uint8_t xsp_total_num; //显示屏总个数 uint8_t xsp_count; //当前升级的个数 uint8_t xsp_ota_step; //升级执行步骤 uint8_t error_num; //发送失败次数 uint16_t iap_0x03_num; //编程指令的报数 uint16_t iap_0x04_num; txsp_info_t txsp_info; //显示屏的信息 xsp_iap_0x01_info_t iap_0x01_info; //iap信息指令返回的信息 timeout_t tt_uart; }__attribute__((packed)) ota_xsp_info_t; extern ota_xsp_info_t ota_xsp_info; #define OTA_XSP_UART_TIMEOUT (2000) int xsp_0xC3_send(uint32_t sn, uint8_t *key); int xsp_0xC0_send(uint32_t sn); int xsp_0xC1_send(uint32_t sn,uint8_t step,void *puser, uint8_t key_num); void get_iap_key(uint32_t sn, uint8_t *key); int xsp_iap_0x01_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub); int xsp_iap_0x02_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub, uint32_t startAddr, uint32_t totalPages); int xsp_iap_0x03_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub, uint8_t datalen, uint32_t startAddr); int xsp_iap_0x04_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub, uint32_t startAddr, uint32_t byteLen, uint16_t crcVer); int xsp_iap_0x07_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub, uint32_t appBase, uint32_t iapUnitime); int xsp_iap_0x0F_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub); int xsp_rcv_comm(uint8_t *key, uint8_t *data, uint8_t len); #endif