xspDataOpt.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. #ifndef _XSPDATAOPT_H_
  2. #define _XSPDATAOPT_H_
  3. #include "../CMSIS/gd32f10x.h"
  4. #include "xspOptFlash.h"
  5. #include <string.h>
  6. #include "../Hardware/boardinit.h"
  7. #define XSP_SAVE_TIME (1000*60*30)// 30分钟
  8. enum {
  9. U1_ID = 0x00,
  10. U4_ID = 0x01,
  11. U5_ID = 0x02,
  12. };
  13. typedef struct _table_needle_{
  14. uint8_t uId;
  15. uint8_t comIndex; // 在那个com端下
  16. uint8_t csIndex; // 片选的索引
  17. uint8_t pinIndex; // 管脚索引
  18. }__attribute__((packed))NeedleTable;
  19. typedef struct _com_data_msg_{
  20. uint8_t num;
  21. uint8_t lastvl;
  22. uint8_t tda[10][24];
  23. uint8_t da[24];
  24. }__attribute__((packed))comDaMsg;
  25. typedef struct _com_src_data_{
  26. uint8_t flag; // 按位计算 3组com端 6组数据,共6个1,用3F表示
  27. comDaMsg daMsg[3][2]; // 一共3组 每组中有两个小组
  28. }__attribute__((packed))ComSrcDa;
  29. typedef struct _table_com_{
  30. uint8_t comPort;
  31. uint8_t comPin;
  32. }__attribute__((packed))ComId;
  33. extern uint8_t g_7egDa[29];
  34. typedef struct display_data_{
  35. uint32_t price; // 单价
  36. uint32_t amount; // 金额
  37. uint32_t oil; // 油量
  38. }__attribute__((packed)) dispData;
  39. typedef union _c_to_u_ {
  40. uint8_t da8[16];
  41. uint16_t da16[8];
  42. uint32_t da32[4];
  43. uint64_t da64[2];
  44. }__attribute__((packed)) UData;
  45. typedef struct _src_7seg_ {
  46. uint8_t amount[6];
  47. uint8_t oil[6];
  48. uint8_t price[4];
  49. }__attribute__((packed)) Src7Seg;
  50. typedef union _data_src_7seg_ {
  51. Src7Seg da;
  52. UData uDa;
  53. uint8_t val[16];
  54. }__attribute__((packed)) Usrc7SegDa;
  55. typedef struct _error_7seg_ {
  56. uint8_t berror;
  57. }__attribute__((packed))Error7Seg;
  58. #define START_ID 1
  59. enum {
  60. STATUS_NULL = 0x00, // 未初始化状态
  61. STATUS_START = 0x01, // 加油开始
  62. STATUS_PROG = 0x02, // 加油中
  63. STATUS_END = 0x03, // 加油结束
  64. STATUS_STOP = 0x04, // 加油停止
  65. STATUS_CHECK = 0x05, // 数据查询
  66. };
  67. enum{
  68. GUN_NULL = 0x00, // 未知
  69. GUN_UP = 0x01, // 抬枪
  70. GUN_DOWN = 0x02, // 挂枪
  71. };
  72. typedef struct xsp_coll_data_ {
  73. Usrc7SegDa cur; // 原始的七段码记录
  74. Usrc7SegDa last1;
  75. Usrc7SegDa last2;
  76. timeout_t sameTimer; // 相同数据的时间
  77. uint8_t corrDa[16];
  78. uint32_t startTime; // 加油开始的时间
  79. uint32_t stopTime; // 加油结束时的时间
  80. uint32_t gunUpTime; // 抬枪的时间
  81. uint32_t gunDnTime; // 挂枪的时间
  82. uint8_t gunStatus;
  83. uint8_t bcheckDa; // 当前显示屏显示的数据是否是查询数据
  84. uint8_t curstatus; // 加油状态
  85. dispData curDisp; // 解析好的数据记录
  86. dispData lastDisp; // 上一个需要存储的数据
  87. dispData lastDisp1; // 上上个数据,用于错误数据矫正
  88. uint32_t lastTick1; // 上上个加油的时间,用于错误数据矫正
  89. uint32_t lastTick; // 上一次记录的时间戳
  90. uint32_t lastcomTick; // 只要变化不管数据的对错,就记录时间戳,
  91. uint8_t bSaveRecode; // 是否需要存储当次的交易记录
  92. uint32_t errorNum; // 在加油开始的状态下,统计错误的次数
  93. uint32_t startToprog; // 小额增长变化次数(从加油开始,到加油中的判断过程
  94. uint64_t lastTamout;
  95. uint64_t lastToil;
  96. uint8_t bcorrect; // 是否纠正
  97. uint8_t bstart00; // 加油是从00开始的
  98. }__attribute__((packed)) XspCollDa;
  99. extern XspCollDa g_xspCollDa;
  100. typedef struct xsp_record_{
  101. uint32_t recordId; // 记录ID
  102. uint16_t bsend; // 0xff:没有发送 0x00:已经发送
  103. uint8_t recodeMode; // 记录产生方式 0:逻辑产生 1:抬枪信号产生,3:按键产生
  104. uint8_t priceUseCount; // 单价屏的索引
  105. uint32_t amount;
  106. uint32_t oil;
  107. uint32_t price;
  108. uint64_t tamount;
  109. uint64_t toil;
  110. uint32_t timer;// 记录时间
  111. uint16_t bcorrect; // 用高8位表示是否是纠正数据 0:未纠正 1:纠正一位 2:计算纠正
  112. }__attribute__((packed)) xspRecord;
  113. typedef union xsp_data_info_{
  114. uint8_t data[64];
  115. xspRecord reDa;
  116. }__attribute__((packed)) XspDataInfo;
  117. extern XspDataInfo g_xspReDa;
  118. typedef struct _up_7seg_src_data_{
  119. uint8_t bOpen; // 是否开启 1:开启
  120. uint8_t bAppointDev; // 是否指定的一个设备 0:否, 1:指令的设备为主 2:指定的设备为从
  121. uint8_t bofflineTest; // 离线调试,主动上报
  122. timeout_t upTime; // 上报的时长
  123. uint8_t devMsg[17]; // 读取指令的从设备的8段数据,用于主设备问询从设备
  124. }__attribute__((packed))Up7segData;
  125. extern Up7segData g_up7segData;
  126. typedef enum {
  127. LOW_LEVEL = 0x00,
  128. HIGHT_LEVEL = 0x01,
  129. LOW_HIGHT = 0x02, // 由低变高
  130. HIGHT_LOW = 0x03, // 由高变低
  131. }gunstatus;
  132. #define GUN_STATUS_TIMER 50000 // 10ms 10000 // 1S,
  133. typedef struct gun_status_{
  134. gunstatus curst; // 当前的状态
  135. gunstatus lastst; // 上一次的状态
  136. uint32_t timer; // 时间
  137. uint8_t count; // 检测次数 低电平的个数
  138. uint8_t bsave; // 是否已经挂枪需要存储数据
  139. }__attribute__((packed))GunStatus;
  140. /*-------探针板错误数据记录以及上传-------------*/
  141. typedef struct _xsp_err_da_{
  142. timeout_t timer; // 数据不变的时间
  143. uint8_t bsend; // 本条数据是否已经发送 1:已经发送,2:未发送,0:默认不需要处理
  144. uint8_t segDa[29]; // 错误的七段码数据
  145. uint8_t lastsegDa[29];
  146. }__attribute__((packed)) XspErrDa;
  147. extern XspErrDa g_xspErrDa;
  148. #define SAME_GROUP 3//1
  149. #define TEST_COLL_DA_MAX_NUM 1000
  150. #define TEST_COLL_GROUP 24
  151. typedef struct _test_coll_data_{ // 测试采集数据
  152. volatile uint8_t collDa[TEST_COLL_DA_MAX_NUM][TEST_COLL_GROUP]; // 需要采集的数据
  153. uint8_t lastDa[8][TEST_COLL_GROUP];
  154. uint8_t tcollNum[TEST_COLL_GROUP*8]; // 存储每一位采集比较的结果
  155. uint8_t lastval[TEST_COLL_GROUP*8];
  156. uint8_t sendCollNum[TEST_COLL_GROUP*8]; // 需要上传的数据
  157. uint8_t bTestCollDa; // 是否是采集测试数据模式 1:是, 0:否
  158. uint32_t collTime; // 采集的时间, 多长时间采集一次
  159. volatile uint16_t collNum; // 记录采集的次数
  160. uint16_t dealNum; // 处理的次数
  161. uint8_t bdealDa; // 处理数据
  162. }__attribute__((packed)) testCollDa;
  163. extern testCollDa g_testCollDa;
  164. extern void init_test_coll_data_info(uint8_t bstart);
  165. extern void deal_coll_data_com(void);
  166. extern void deal_coll_data_HY(void);
  167. extern void init_xsp_run_data(void);
  168. extern void init_gun_status(void);
  169. extern void deal_gun_status(uint32_t tick);
  170. extern void anay_7eg(void);
  171. extern void init_comMsg(void);
  172. #endif