display_ctrl.h 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. /*
  2. * @Description:
  3. * @Version: 2.0
  4. * @Author: Seven
  5. * @Date: 2022-11-22 10:55:28
  6. * @LastEditors: Seven
  7. * @LastEditTime: 2022-12-08 09:27:24
  8. */
  9. #ifndef __DISPLAY_CTRL_H__
  10. #define __DISPLAY_CTRL_H__
  11. #include "stm32f10x.h"
  12. #include "tools.h"
  13. #define XSP_UPDATE 0x5A //显示屏需要升级标志
  14. #define IAP_VER1 0
  15. #define IAP_VER2 1
  16. //显示屏升级状态
  17. //
  18. //显示屏指令执行结果
  19. enum {
  20. XSP_RESULT_HEADCRC = 0xFF, //头或是CRC校验错误
  21. XSP_RESULT_ERROR = 0x00, //执行错误
  22. XSP_RESULT_SUCCESS = 0x01, //执行成功
  23. XSP_RESULT_RCVERR = 0x02, //接收密文数据解密错误
  24. XSP_RESULT_BUSY = 0x03, //显示屏忙
  25. XSP_RESULT_RESET = 0x04, //显示屏模块复位,需要重新认证
  26. XSP_RESULT_CRCERROR = 0x05, //显示屏接收数据CRC错误
  27. XSP_RESULT_PCRCRERROR = 0x06, //pcrc错误
  28. };
  29. //iap指令执行结果
  30. enum {
  31. XSP_IAP_RESULT_SUCCESS = 0x00, //正常
  32. XSP_IAP_RESULT_ERROR = 0x01, //错误
  33. XSP_IAP_RESULT_DECRYPTERR = 0x02, //解密错误
  34. XSP_IAP_RESULT_IAPMODE = 0x03, //运行在IAPMode
  35. XSP_IAP_RESULT_UNKNOWNCOMM = 0x0F, //未知IAP指令
  36. };
  37. typedef enum {
  38. FIRST_READ_0xC0 = 0x00, //第一步 读取基本信息
  39. SECOND_AUTH_0xC1_STEP01, //第二步 认证第一步
  40. SECOND_AUTH_0xC1_STEP02, //第二步 认证第二步
  41. SEND_IAP_0x01, //获取iap信息
  42. SEND_IAP_0x02, //iap擦除
  43. SEND_IAP_0x03, //iap编程
  44. SEND_IAP_0x04, //iap校验
  45. SEND_IAP_0x07, //iap结束
  46. SEND_IAP_0x0F, //iap复位
  47. // READ_XSP_0xC2, //读取特征值
  48. // READ_XSP_0xC3, //读取当前数据
  49. // READ_XSP_0xC4, //读取当前的时钟
  50. // READ_XSP_0xC5, //读取记录数据,即历史数据
  51. // READ_XSP_0xD3, //读取明文数据
  52. //
  53. // READ_XSP_IDLE, //空闲状态
  54. // READ_XSP_CHANGE, //显示屏的切换状态
  55. }xspStatus_t;
  56. typedef struct _txspCommFrame
  57. {
  58. //帧头+长度码+帧号+地址码+指令码 +参数 +校验码
  59. uint8_t fhead; //帧头(1Byte)
  60. uint8_t flen; //帧长度(1Byte)
  61. uint8_t findex; //帧序号(1Byte)
  62. uint32_t faddress; //地址码(1Byte) 改为SN
  63. uint8_t fcmd; //指令码(1Byte)
  64. }__attribute__((packed)) txspCommFrame_t;
  65. #define XSP_CMD_HEADLEN (5+3) // 显示屏协议头的长度
  66. #define XSP_KEY_LEN 16 // 显示屏协议密钥的长度
  67. typedef struct _xsp_C0_info
  68. {
  69. uint8_t KeySequence_number; //密钥序号
  70. uint8_t Hardware_version[2]; //硬件版本
  71. uint8_t Software_version[4]; //软件版本
  72. uint8_t Compile_info[12]; //编译信息
  73. uint8_t xsp_sn[8]; //显示屏的SN
  74. uint8_t protocolVer[2]; // 协议版本
  75. uint8_t apptype;
  76. uint8_t appbase[4];
  77. uint8_t devType[2];
  78. uint8_t mfIndex[2];
  79. uint8_t hardInfor[16];
  80. uint8_t hardDate[6];
  81. uint8_t chipPID[4]; //chipPID
  82. uint8_t chipDevID[2]; //debug id code
  83. uint8_t chipRevID[2]; //debug id code
  84. uint8_t bootVer[2];
  85. }xsp_C0_info_t;
  86. typedef struct _issue_C1_info
  87. {
  88. uint8_t Authen_steps; //认证步骤
  89. uint8_t Authent_R1[16]; //R1
  90. uint8_t Authent_R2[16]; //R2
  91. uint8_t key[16]; //认证后的密钥
  92. uint8_t key_num; //初始密钥序号
  93. }issue_C1_info_t;
  94. //////iap指令///
  95. typedef struct _xsp_iap_0x01_info
  96. {
  97. uint8_t ispIns; //指令码
  98. uint8_t iapRslt; //执行结果
  99. uint8_t iapTimes; //本机IAP次数
  100. uint8_t iapStatus; //固定0x01
  101. uint32_t iapVer; //当前IAP版本
  102. uint32_t curAppBase; //当前APP运行的基址
  103. uint8_t chipUUID[12]; //主控芯片的UUID
  104. }__attribute__((packed)) xsp_iap_0x01_info_t;
  105. //显示屏通信参数
  106. typedef struct _xsp_comm_info
  107. {
  108. xsp_C0_info_t xsp_info; //获取信息参数(0xC0)
  109. issue_C1_info_t issue_key; //认证参数(0xC1)
  110. }xsp_comm_info_t;
  111. extern xsp_comm_info_t xsp_comm_info[1];
  112. //屏的信息
  113. typedef struct _txsp_info
  114. {
  115. uint16_t xsp_type; //显示屏设备类型
  116. uint32_t xsp_sn; //显示屏sn
  117. uint8_t curkey; //当前屏的密钥序号
  118. uint8_t key[16]; //密钥key
  119. uint8_t key_iap[16]; //iap指令密钥
  120. }__attribute__((packed)) txsp_info_t;
  121. typedef struct _ota_xsp_info
  122. {
  123. uint8_t xsp_index; //本采集器在路由表内的索引
  124. uint8_t xsp_ota_begin; //显示屏升级开始标志
  125. uint8_t xsp_total_num; //显示屏总个数
  126. uint8_t xsp_count; //当前升级的个数
  127. uint8_t xsp_ota_step; //升级执行步骤
  128. uint8_t error_num; //发送失败次数
  129. uint16_t iap_0x03_num; //编程指令的报数
  130. uint16_t iap_0x04_num;
  131. txsp_info_t txsp_info; //显示屏的信息
  132. xsp_iap_0x01_info_t iap_0x01_info; //iap信息指令返回的信息
  133. timeout_t tt_uart;
  134. }__attribute__((packed)) ota_xsp_info_t;
  135. extern ota_xsp_info_t ota_xsp_info;
  136. #define OTA_XSP_UART_TIMEOUT (2000)
  137. int xsp_0xC3_send(uint32_t sn, uint8_t *key);
  138. int xsp_0xC0_send(uint32_t sn);
  139. int xsp_0xC1_send(uint32_t sn,uint8_t step,void *puser, uint8_t key_num);
  140. void get_iap_key(uint32_t sn, uint8_t *key);
  141. int xsp_iap_0x01_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub);
  142. int xsp_iap_0x02_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub, uint32_t startAddr, uint32_t totalPages);
  143. int xsp_iap_0x03_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub, uint8_t datalen, uint32_t startAddr);
  144. 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);
  145. int xsp_iap_0x07_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub, uint32_t appBase, uint32_t iapUnitime);
  146. int xsp_iap_0x0F_send(uint32_t sn, uint8_t *key_iap, uint8_t *key_hub);
  147. int xsp_rcv_comm(uint8_t *key, uint8_t *data, uint8_t len);
  148. #endif