ytsf.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425
  1. /**
  2. ******************************** STM32F10x *********************************
  3. * @文件名 : ytsf.h
  4. * @作者 : sun
  5. * @库版本 : V3.5.0
  6. * @文件版本 : V1.0.0
  7. * @日期 : 2016年05月09日
  8. * @摘要 : ytsf头文件
  9. ******************************************************************************/
  10. /* 定义防止递归包含 ----------------------------------------------------------*/
  11. #ifndef _YTSF_H
  12. #define _YTSF_H
  13. #include "stm32f10x.h"
  14. #include "stdbool.h"
  15. #define YTSF_DEBUG_EN 1
  16. #ifdef YTSF_DEBUG_EN
  17. #include <stdio.h>
  18. #define YTSF_DEBUG(fmt, x...) \
  19. do \
  20. { \
  21. printf(fmt,##x); \
  22. }while(0)
  23. #define YTSF_DEBUG1(fmt, x...) \
  24. do \
  25. { \
  26. printf("%s %s(Line %d): "fmt,__FILE__,__FUNCTION__,__LINE__, ##x); \
  27. }while(0)
  28. #define YTSF_DEBUG_F(fmt, x...) \
  29. do \
  30. { \
  31. printf("%s %s(Line %d): "fmt,__FILE__,__FUNCTION__,__LINE__, ##x); \
  32. }while(0)
  33. #define YTSF_DEBUG2(fmt, x...) \
  34. do \
  35. { \
  36. USART_printfHex(fmt,##x); \
  37. }while(0)
  38. #define YTSF_DEBUG_SN(fmt, x...) \
  39. do \
  40. { \
  41. USART2_SendNByte(fmt,##x); \
  42. }while(0)
  43. #else
  44. #define YTSF_DEBUG(fmt, x...)
  45. #define YTSF_DEBUG1(fmt, x...)
  46. #define YTSF_DEBUG2(fmt, x...)
  47. #define YTSF_DEBUG_F(fmt, x...)
  48. #define YTSF_DEBUG_SN(fmt, x...)
  49. #endif
  50. #define YTSF_LOOP_TIME 20
  51. extern bool YTSF_OnUse; //英泰赛福模块在位
  52. extern bool PORT0_SN_CHANGED;
  53. extern bool PORT1_SN_CHANGED;
  54. extern volatile bool Port0_OnUse; //端口0使用标记
  55. extern volatile bool Port1_OnUse; //端口1使用标记
  56. extern volatile uint32_t YTSF_PORT0_Send_Delay;
  57. extern volatile uint32_t YTSF_PORT1_Send_Delay;
  58. extern volatile uint32_t YTSF_PORT0_Send_CNT;
  59. extern volatile uint32_t YTSF_PORT1_Send_CNT;
  60. extern uint8_t CMD_LIST_polling;
  61. extern uint8_t CMD_LIST[][6];
  62. typedef enum
  63. {
  64. YTSF_CMD_ERROR_CMD=-1,
  65. YTSF_CMD_ERROR_LEN=-2,
  66. YTSF_CMD_ERROR_TYPE=-3,
  67. YTSF_CMD_ERROR_SN=-4
  68. } tYtsfCMDErrorCodes;
  69. typedef enum
  70. {
  71. YTSF_RCV_ERROR_EXE=0,
  72. YTSF_RCV_OK,
  73. YTSF_RCV_ERROR_MODULE_BUSY,
  74. YTSF_RCV_ERROR_JK_BUSY,
  75. YTSF_RCV_ERROR_JK_TIMEOUT,
  76. YTSF_RCV_ERROR_JL_NOTEXIST,
  77. YTSF_RCV_ERROR_SN_NOTEXIST=0x10,
  78. YTSF_RCV_ERROR_DECODE,
  79. YTSF_RCV_ERROR_HEAD=0X20,
  80. YTSF_RCV_ERROR_LEN,
  81. YTSF_RCV_ERROR_PORT,
  82. YTSF_RCV_ERROR_GUN,
  83. YTSF_RCV_ERROR_INS,
  84. YTSF_RCV_ERROR_TYPE,
  85. YTSF_RCV_ERROR_CRC,
  86. YTSF_RCV_ERROR_SN
  87. } tYtsfRCVErrorCodes;
  88. typedef enum
  89. {
  90. YTSF_STATE_IDLE=0,
  91. YTSF_STATE_UART_RX_INIT,
  92. YTSF_STATE_UART_ANALYSIS_INIT,
  93. YTSF_STATE_UART_ANALYSIS_RUNNING,
  94. YTSF_STATE_UART_ANALYSIS_DONE,
  95. YTSF_STATE_UART_ANALYSIS_TIMEOUT,
  96. YTSF_STATE_UART_ANALYSIS_CHANGED,
  97. YTSF_STATE_UART_ANALYSIS_FAILED,
  98. YTSF_STATE_PORT_GET_MONITOR_SN_INIT,
  99. YTSF_STATE_PORT_GET_MONITOR_SN_RUNNING,
  100. YTSF_STATE_PORT_GET_MONITOR_SN_DONE,
  101. YTSF_STATE_PORT_GET_MONITOR_SN_TIMEOUT,
  102. YTSF_STATE_PORT_GET_MONITOR_SN_CHANGED,
  103. YTSF_STATE_PORT_GET_MONITOR_SN_FAILED,
  104. YTSF_STATE_PORT_GET_MONITOR_ID_INIT,
  105. YTSF_STATE_PORT_GET_MONITOR_ID_RUNNING,
  106. YTSF_STATE_PORT_GET_MONITOR_ID_DONE,
  107. YTSF_STATE_PORT_GET_MONITOR_ID_TIMEOUT,
  108. YTSF_STATE_PORT_GET_MONITOR_ID_CHANGED,
  109. YTSF_STATE_PORT_GET_MONITOR_ID_FAILED,
  110. YTSF_STATE_PORT_GET_MONITOR_VER_INIT,
  111. YTSF_STATE_PORT_GET_MONITOR_VER_RUNNING,
  112. YTSF_STATE_PORT_GET_MONITOR_VER_DONE,
  113. YTSF_STATE_PORT_GET_MONITOR_VER_TIMEOUT,
  114. YTSF_STATE_PORT_GET_MONITOR_VER_CHANGED,
  115. YTSF_STATE_PORT_GET_MONITOR_VER_FAILED,
  116. YTSF_STATE_PORT_GET_MONITOR_STATE_INIT,
  117. YTSF_STATE_PORT_GET_MONITOR_STATE_RUNNING,
  118. YTSF_STATE_PORT_GET_MONITOR_STATE_DONE,
  119. YTSF_STATE_PORT_GET_MONITOR_STATE_TIMEOUT,
  120. YTSF_STATE_PORT_GET_MONITOR_STATE_CHANGED,
  121. YTSF_STATE_PORT_GET_MONITOR_STATE_FAILED,
  122. YTSF_STATE_PORT_GET_CODE_SN_INIT,
  123. YTSF_STATE_PORT_GET_CODE_SN_RUNNING,
  124. YTSF_STATE_PORT_GET_CODE_SN_DONE,
  125. YTSF_STATE_PORT_GET_CODE_SN_TIMEOUT,
  126. YTSF_STATE_PORT_GET_CODE_SN_CHANGED,
  127. YTSF_STATE_PORT_GET_CODE_SN_FAILED,
  128. YTSF_STATE_PORT_GET_LCD_SN_INIT,
  129. YTSF_STATE_PORT_GET_LCD_SN_RUNNING,
  130. YTSF_STATE_PORT_GET_LCD_SN_DONE,
  131. YTSF_STATE_PORT_GET_LCD_SN_TIMEOUT,
  132. YTSF_STATE_PORT_GET_LCD_SN_CHANGED,
  133. YTSF_STATE_PORT_GET_LCD_SN_FAILED,
  134. YTSF_STATE_PORT_GET_CHEAT_STATE_INIT,
  135. YTSF_STATE_PORT_GET_CHEAT_STATE_RUNNING,
  136. YTSF_STATE_PORT_GET_CHEAT_STATE_DONE,
  137. YTSF_STATE_PORT_GET_CHEAT_STATE_TIMEOUT,
  138. YTSF_STATE_PORT_GET_CHEAT_STATE_CHANGED,
  139. YTSF_STATE_PORT_GET_CHEAT_STATE_FAILED,
  140. YTSF_STATE_MODEL_GET_ID_INIT,
  141. YTSF_STATE_MODEL_GET_ID_RUNNING,
  142. YTSF_STATE_MODEL_GET_ID_DONE,
  143. YTSF_STATE_MODEL_GET_ID_TIMEOUT,
  144. YTSF_STATE_MODEL_GET_ID_CHANGED,
  145. YTSF_STATE_MODEL_GET_ID_FAILED,
  146. YTSF_STATE_MODEL_GET_TIME_INIT,
  147. YTSF_STATE_MODEL_GET_TIME_RUNNING,
  148. YTSF_STATE_MODEL_GET_TIME_DONE,
  149. YTSF_STATE_MODEL_GET_TIME_TIMEOUT,
  150. YTSF_STATE_MODEL_GET_TIME_CHANGED,
  151. YTSF_STATE_MODEL_GET_TIME_FAILED,
  152. YTSF_STATE_MODEL_SET_TIME_INIT,
  153. YTSF_STATE_MODEL_SET_TIME_RUNNING,
  154. YTSF_STATE_MODEL_SET_TIME_DONE,
  155. YTSF_STATE_MODEL_SET_TIME_TIMEOUT,
  156. YTSF_STATE_MODEL_SET_TIME_CHANGED,
  157. YTSF_STATE_MODEL_SET_TIME_FAILED,
  158. YTSF_STATE_MODEL_GET_VER_INIT,
  159. YTSF_STATE_MODEL_GET_VER_RUNNING,
  160. YTSF_STATE_MODEL_GET_VER_DONE,
  161. YTSF_STATE_MODEL_GET_VER_VEROUT,
  162. YTSF_STATE_MODEL_GET_VER_CHANGED,
  163. YTSF_STATE_MODEL_GET_VER_FAILED,
  164. YTSF_STATE_GUN_GET_ZongLeiJi_INIT,
  165. YTSF_STATE_GUN_GET_ZongLeiJi_RUNNING,
  166. YTSF_STATE_GUN_GET_ZongLeiJi_DONE,
  167. YTSF_STATE_GUN_GET_ZongLeiJi_TIMEOUT,
  168. YTSF_STATE_GUN_GET_ZongLeiJi_CHANGED,
  169. YTSF_STATE_GUN_GET_ZongLeiJi_FAILED,
  170. YTSF_STATE_GUN_GET_DangCi_INIT,
  171. YTSF_STATE_GUN_GET_DangCi_RUNNING,
  172. YTSF_STATE_GUN_GET_DangCi_DONE,
  173. YTSF_STATE_GUN_GET_DangCi_TIMEOUT,
  174. YTSF_STATE_GUN_GET_DangCi_CHANGED,
  175. YTSF_STATE_GUN_GET_DangCi_FAILED,
  176. YTSF_STATE_DEVICE_HEARTBEAT_INIT,
  177. YTSF_STATE_DEVICE_HEARTBEAT_RUNNING,
  178. YTSF_STATE_DEVICE_HEARTBEAT_DONE,
  179. YTSF_STATE_DEVICE_HEARTBEAT_FAILED
  180. } tYtsfStateCodes;
  181. typedef struct
  182. {
  183. //uint8_t data[SQ_DEPTH][SQ_WIDTH]; //队列储存区
  184. uint8_t fhead; //帧头(1Byte)
  185. uint8_t flen; //帧长度(1Byte)
  186. uint8_t findex; //帧序号(1Byte)
  187. uint8_t fport; //税控口编号(1Byte),0税控口1,1税控口2
  188. uint8_t fcmd; //命令码(1Byte)
  189. //uint8_t fparm; //参数
  190. uint8_t ftype; //命令消息类型(1Byte)
  191. uint8_t fgun; //枪号(1Byte)
  192. uint8_t fresult; //读取结果(1Byte)
  193. uint8_t fstatus; //读取结果(1Byte)
  194. uint8_t fdata[32]; //读取数据(NByte)
  195. uint8_t fldata; //读取数据(NByte)
  196. uint16_t fcrc; //CRC校验(2Byte)
  197. }tYTSFRxFrame_t;
  198. extern tYTSFRxFrame_t YTSF_rx_frame;
  199. typedef struct
  200. {
  201. uint8_t state; //使能(1Byte),0不使能,1使能,2无效
  202. uint8_t index; //枪号索引
  203. uint8_t ZongLeiJi[14]; //总累计
  204. }tGun_t;
  205. typedef struct
  206. {
  207. uint8_t state_m; //状态机
  208. uint8_t zlj_state; //总累计状态,0未读取总累计,1已读取总累计未读取当次,2已读取总累计已读取当此为发送,3已发送,4完成,9异常
  209. uint8_t index; //当前端口索引,0 端口0,1端口1
  210. uint8_t gun_index; //根据税控口SN,判断枪数最大值
  211. uint8_t gun_max; //根据税控口SN,判断枪数最大值
  212. uint8_t sn_init_st; //税控口SN初始化状态,0未初始化,1已经初始化,2初始化失败,3初始化超时
  213. uint8_t mntr_sn[5+10]; //monitor监控序列号SN
  214. uint8_t mntr_id[12+4]; //税控芯片ID号
  215. uint8_t mntr_factory; //税控芯片厂家,1英泰赛福,2拓盛
  216. uint8_t mntr_ver[1+1+4]; //税控芯片版本号,
  217. uint8_t mntr_st[1+1+4+4+1+3]; //税控状态
  218. uint8_t code_sn[5+5]; //编码器SN号
  219. uint8_t lcd_sn[5+5]; //显示屏SN号
  220. uint8_t cht_st[1+1+1+1+1+1+2]; //防作弊状态
  221. uint32_t loop_sn_period; //总累计周期计数器
  222. uint32_t loop_sn_timeout; //总累计周期超时时间,ms
  223. uint32_t loop_zlj_period; //总累计周期计数器
  224. uint32_t loop_zlj_timeout; //总累计周期超时时间,ms
  225. uint32_t loop_state_period; //总累计周期计数器
  226. uint32_t loop_state_timeout; //总累计周期超时时间,ms
  227. uint32_t loop_dc_period; //当次周期计数器
  228. uint32_t loop_dc_timeout; //当次周期超时时间,ms,从总累计到当次的时间
  229. uint32_t disconn_time; //断开连接次数,超过N次,state变为3
  230. uint8_t dangci_lframe; //lora发送消息长度
  231. uint8_t dangci_frame[32]; //lora发送消息内容
  232. uint8_t lora_send_lmsg; //lora发送消息长度
  233. uint8_t lora_send_msg[128]; //lora发送消息内容
  234. tGun_t gun[8]; //枪
  235. }tPort_t;
  236. typedef struct
  237. {
  238. uint32_t state; //状态机
  239. uint32_t device_id; //采集器,ID
  240. uint8_t encrypt; //是否开启加密版,是否使用英泰赛富模块,0不使用,1使用
  241. uint8_t chk_zlj; //是否检查总累计变化
  242. uint8_t chan_index; //采集器,通道号
  243. uint8_t chan_total; //采集器,通道总数
  244. uint8_t zlj_chk; //是否判断总累计变化,1判断总累计变化,0不判断总累计变化,
  245. uint8_t lora_send_state; //lora 发送状态,0不使能,1使能,2无效
  246. uint32_t lora_nosend_period; //从开机到lora发送使能的时间,超时计数器
  247. uint32_t lora_nosend_timeout; //从开机到lora发送使能的时间,超时时间
  248. uint8_t ytsf_state; //英泰赛福数据模块,0不使用英泰赛福数据模块,1使能,2无效
  249. //uint8_t ver[4+4+4+7+1]; //英泰赛福数据模块,版本
  250. uint16_t ver;
  251. uint32_t loop_ytsf_period; //英泰赛福数据模块本身(不涉及税控口,如读取模块ID),周期计数器
  252. uint32_t loop_ytsf_timeout; //英泰赛福数据模块本身(不涉及税控口,如读取模块ID),周期超时间,ms
  253. uint8_t ytsf_id[12]; //英泰赛福数据模块,ID
  254. tPort_t port[2]; //端口
  255. uint8_t lmsg; //lora发送消息长度
  256. uint8_t msg[128]; //lora发送消息内容
  257. }tDevice_t;
  258. extern tYTSFRxFrame_t YTSF_rx_frame;
  259. extern tYTSFRxFrame_t YTSF_rx_frame_port[2];
  260. extern tDevice_t mDevice;
  261. #define CRC_INIT_VALUE 0x0000
  262. #define Ytsf_CMD_BUF_SIZE 32
  263. #define Ytsf_CMD_A1_SIZE 18
  264. #define Ytsf_CMD_A2_SIZE 15
  265. #define Ytsf_CMD_A5_SIZE 8
  266. #define Ytsf_CMD_MAX_LIST 94
  267. #define Ytsf_JK_SN_SIZE 5
  268. #define Ytsf_CMD_PARM_SIZE 8
  269. #define Ytsf_PORT_0 0x00
  270. #define Ytsf_PORT_1 0x01
  271. #define Ytsf_GUN_NUM_0 0x00
  272. #define Ytsf_GUN_NUM_1 0x01
  273. #define Ytsf_GUN_NUM_2 0x02
  274. #define Ytsf_GUN_NUM_3 0x03
  275. #define Ytsf_GUN_NUM_4 0x04
  276. #define Ytsf_GUN_NUM_5 0x05
  277. #define Ytsf_GUN_NUM_6 0x06
  278. #define Ytsf_GUN_NUM_7 0x07
  279. #define Ytsf_CMD_INSTRUCT_A0 0xa0
  280. #define Ytsf_CMD_INSTRUCT_A1 0xa1
  281. #define Ytsf_CMD_INSTRUCT_A2 0xa2
  282. #define Ytsf_CMD_INSTRUCT_A5 0xa5
  283. #define Ytsf_CMD_INSTRUCT_AF 0xaf
  284. #define Ytsf_CMD_TYPE_00 0x00
  285. #define Ytsf_CMD_TYPE_01 0x01
  286. #define Ytsf_CMD_TYPE_02 0x02
  287. #define Ytsf_CMD_TYPE_10 0x10
  288. #define Ytsf_CMD_TYPE_11 0x11
  289. #define Ytsf_CMD_TYPE_12 0x12
  290. #define Ytsf_CMD_TYPE_13 0x13
  291. #define Ytsf_CMD_TYPE_14 0x14
  292. #define Ytsf_CMD_TYPE_20 0x20
  293. #define Ytsf_CMD_TYPE_21 0x21
  294. #define Ytsf_CMD_TYPE_FF 0xff
  295. #define CMD_en 0x01
  296. #define CMD_dn 0x00
  297. #define YTSF_GPIO_SET() {GPIO_SetBits(GPIOC,GPIO_Pin_8);}
  298. #define YTSF_GPIO_RST() {GPIO_ResetBits(GPIOC,GPIO_Pin_8);}
  299. #define YTSF_GPIO_DETECT GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11)
  300. #define YTSF_GPIO_EN() {GPIO_ResetBits(GPIOA,GPIO_Pin_12);}
  301. #define YTSF_GPIO_DN() {GPIO_SetBits(GPIOA,GPIO_Pin_12);}
  302. uint16_t GetCRC16(uint8_t *_buff,uint32_t _len);
  303. uint8_t Get_MAX_CMD_LIST(void);
  304. uint8_t Get_Ytsf_init(void);
  305. uint8_t YTSF_CMD_Tx(uint8_t size,uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type);
  306. int16_t Get_CMD_Index_ByParm(uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type);
  307. int16_t Set_CMD_Enable_ByIndex(uint16_t index);
  308. int16_t ReSet_CMD_Enable_ByIndex(uint16_t index);
  309. int16_t Set_CMD_Enable_ByParm(uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type);
  310. int16_t ReSet_CMD_Enable_ByParm(uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type);
  311. int16_t Set_CMD_Enable_ByPort(uint8_t port);
  312. int16_t ReSet_CMD_Enable_ByPort(uint8_t port);
  313. int16_t Set_CMD_Enable_ByGun(uint8_t port,uint8_t gun);
  314. int16_t ReSet_CMD_Enable_ByGun(uint8_t port,uint8_t gun);
  315. uint8_t Ytsf_CMD_TEST(void);
  316. uint8_t Get_Ytsf_init(void);
  317. uint8_t Ytsf_CMD_polling(void);
  318. uint8_t Ytsf_CMD_Analysis(uint8_t *buf,uint8_t slen);
  319. int8_t Ytsf_CMD_Analysis2(tYTSFRxFrame_t *frame,uint8_t *sbuf,uint8_t slen);
  320. uint8_t YTSF_GET_STATE(void);
  321. uint8_t YTSF_SET_STATE(uint8_t s);
  322. uint8_t Ytsf_UartRx_Process(void);
  323. void Ytsf_loop(void);
  324. void Tax_loop(void);
  325. #define TAX_PORT_0 0x00
  326. #define TAX_PORT_1 0x01
  327. #define TAX_GUN_NUM_0 0x00
  328. #define TAX_GUN_NUM_1 0x01
  329. #define TAX_GUN_NUM_2 0x02
  330. #define TAX_GUN_NUM_3 0x03
  331. #define TAX_GUN_NUM_4 0x04
  332. #define TAX_GUN_NUM_5 0x05
  333. #define TAX_GUN_NUM_6 0x06
  334. #define TAX_GUN_NUM_7 0x07
  335. #define STATE_M_MODE_INIT 0x00 //状态机的状态更新模式,初始化
  336. #define STATE_M_MODE_En 0x01 //状态机的状态更新模式,入队列
  337. #define STATE_M_MODE_De 0x02 //状态机的状态更新模式,出队列
  338. #define STATE_M_MODE_FORCE 0x03 //状态机的状态更新模式,强制设置状态机
  339. #endif /* _USART_H */
  340. /**** Copyright (C)2016 sun. All Rights Reserved **** END OF FILE ****/