| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- /*
- * @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
|