/** ******************************** STM32F10x ********************************* * @文件名 : ytsf.h * @作者 : sun * @库版本 : V3.5.0 * @文件版本 : V1.0.0 * @日期 : 2016年05月09日 * @摘要 : ytsf头文件 ******************************************************************************/ /* 定义防止递归包含 ----------------------------------------------------------*/ #ifndef _YTSF_H #define _YTSF_H #include "stm32f10x.h" #include "stdbool.h" #define YTSF_DEBUG_EN 1 #ifdef YTSF_DEBUG_EN #include #define YTSF_DEBUG(fmt, x...) \ do \ { \ printf(fmt,##x); \ }while(0) #define YTSF_DEBUG1(fmt, x...) \ do \ { \ printf("%s %s(Line %d): "fmt,__FILE__,__FUNCTION__,__LINE__, ##x); \ }while(0) #define YTSF_DEBUG_F(fmt, x...) \ do \ { \ printf("%s %s(Line %d): "fmt,__FILE__,__FUNCTION__,__LINE__, ##x); \ }while(0) #define YTSF_DEBUG2(fmt, x...) \ do \ { \ USART_printfHex(fmt,##x); \ }while(0) #define YTSF_DEBUG_SN(fmt, x...) \ do \ { \ USART2_SendNByte(fmt,##x); \ }while(0) #else #define YTSF_DEBUG(fmt, x...) #define YTSF_DEBUG1(fmt, x...) #define YTSF_DEBUG2(fmt, x...) #define YTSF_DEBUG_F(fmt, x...) #define YTSF_DEBUG_SN(fmt, x...) #endif #define YTSF_LOOP_TIME 20 extern bool YTSF_OnUse; //英泰赛福模块在位 extern bool PORT0_SN_CHANGED; extern bool PORT1_SN_CHANGED; extern volatile bool Port0_OnUse; //端口0使用标记 extern volatile bool Port1_OnUse; //端口1使用标记 extern volatile uint32_t YTSF_PORT0_Send_Delay; extern volatile uint32_t YTSF_PORT1_Send_Delay; extern volatile uint32_t YTSF_PORT0_Send_CNT; extern volatile uint32_t YTSF_PORT1_Send_CNT; extern uint8_t CMD_LIST_polling; extern uint8_t CMD_LIST[][6]; typedef enum { YTSF_CMD_ERROR_CMD=-1, YTSF_CMD_ERROR_LEN=-2, YTSF_CMD_ERROR_TYPE=-3, YTSF_CMD_ERROR_SN=-4 } tYtsfCMDErrorCodes; typedef enum { YTSF_RCV_ERROR_EXE=0, YTSF_RCV_OK, YTSF_RCV_ERROR_MODULE_BUSY, YTSF_RCV_ERROR_JK_BUSY, YTSF_RCV_ERROR_JK_TIMEOUT, YTSF_RCV_ERROR_JL_NOTEXIST, YTSF_RCV_ERROR_SN_NOTEXIST=0x10, YTSF_RCV_ERROR_DECODE, YTSF_RCV_ERROR_HEAD=0X20, YTSF_RCV_ERROR_LEN, YTSF_RCV_ERROR_PORT, YTSF_RCV_ERROR_GUN, YTSF_RCV_ERROR_INS, YTSF_RCV_ERROR_TYPE, YTSF_RCV_ERROR_CRC, YTSF_RCV_ERROR_SN } tYtsfRCVErrorCodes; typedef enum { YTSF_STATE_IDLE=0, YTSF_STATE_UART_RX_INIT, YTSF_STATE_UART_ANALYSIS_INIT, YTSF_STATE_UART_ANALYSIS_RUNNING, YTSF_STATE_UART_ANALYSIS_DONE, YTSF_STATE_UART_ANALYSIS_TIMEOUT, YTSF_STATE_UART_ANALYSIS_CHANGED, YTSF_STATE_UART_ANALYSIS_FAILED, YTSF_STATE_PORT_GET_MONITOR_SN_INIT, YTSF_STATE_PORT_GET_MONITOR_SN_RUNNING, YTSF_STATE_PORT_GET_MONITOR_SN_DONE, YTSF_STATE_PORT_GET_MONITOR_SN_TIMEOUT, YTSF_STATE_PORT_GET_MONITOR_SN_CHANGED, YTSF_STATE_PORT_GET_MONITOR_SN_FAILED, YTSF_STATE_PORT_GET_MONITOR_ID_INIT, YTSF_STATE_PORT_GET_MONITOR_ID_RUNNING, YTSF_STATE_PORT_GET_MONITOR_ID_DONE, YTSF_STATE_PORT_GET_MONITOR_ID_TIMEOUT, YTSF_STATE_PORT_GET_MONITOR_ID_CHANGED, YTSF_STATE_PORT_GET_MONITOR_ID_FAILED, YTSF_STATE_PORT_GET_MONITOR_VER_INIT, YTSF_STATE_PORT_GET_MONITOR_VER_RUNNING, YTSF_STATE_PORT_GET_MONITOR_VER_DONE, YTSF_STATE_PORT_GET_MONITOR_VER_TIMEOUT, YTSF_STATE_PORT_GET_MONITOR_VER_CHANGED, YTSF_STATE_PORT_GET_MONITOR_VER_FAILED, YTSF_STATE_PORT_GET_MONITOR_STATE_INIT, YTSF_STATE_PORT_GET_MONITOR_STATE_RUNNING, YTSF_STATE_PORT_GET_MONITOR_STATE_DONE, YTSF_STATE_PORT_GET_MONITOR_STATE_TIMEOUT, YTSF_STATE_PORT_GET_MONITOR_STATE_CHANGED, YTSF_STATE_PORT_GET_MONITOR_STATE_FAILED, YTSF_STATE_PORT_GET_CODE_SN_INIT, YTSF_STATE_PORT_GET_CODE_SN_RUNNING, YTSF_STATE_PORT_GET_CODE_SN_DONE, YTSF_STATE_PORT_GET_CODE_SN_TIMEOUT, YTSF_STATE_PORT_GET_CODE_SN_CHANGED, YTSF_STATE_PORT_GET_CODE_SN_FAILED, YTSF_STATE_PORT_GET_LCD_SN_INIT, YTSF_STATE_PORT_GET_LCD_SN_RUNNING, YTSF_STATE_PORT_GET_LCD_SN_DONE, YTSF_STATE_PORT_GET_LCD_SN_TIMEOUT, YTSF_STATE_PORT_GET_LCD_SN_CHANGED, YTSF_STATE_PORT_GET_LCD_SN_FAILED, YTSF_STATE_PORT_GET_CHEAT_STATE_INIT, YTSF_STATE_PORT_GET_CHEAT_STATE_RUNNING, YTSF_STATE_PORT_GET_CHEAT_STATE_DONE, YTSF_STATE_PORT_GET_CHEAT_STATE_TIMEOUT, YTSF_STATE_PORT_GET_CHEAT_STATE_CHANGED, YTSF_STATE_PORT_GET_CHEAT_STATE_FAILED, YTSF_STATE_MODEL_GET_ID_INIT, YTSF_STATE_MODEL_GET_ID_RUNNING, YTSF_STATE_MODEL_GET_ID_DONE, YTSF_STATE_MODEL_GET_ID_TIMEOUT, YTSF_STATE_MODEL_GET_ID_CHANGED, YTSF_STATE_MODEL_GET_ID_FAILED, YTSF_STATE_MODEL_GET_TIME_INIT, YTSF_STATE_MODEL_GET_TIME_RUNNING, YTSF_STATE_MODEL_GET_TIME_DONE, YTSF_STATE_MODEL_GET_TIME_TIMEOUT, YTSF_STATE_MODEL_GET_TIME_CHANGED, YTSF_STATE_MODEL_GET_TIME_FAILED, YTSF_STATE_MODEL_SET_TIME_INIT, YTSF_STATE_MODEL_SET_TIME_RUNNING, YTSF_STATE_MODEL_SET_TIME_DONE, YTSF_STATE_MODEL_SET_TIME_TIMEOUT, YTSF_STATE_MODEL_SET_TIME_CHANGED, YTSF_STATE_MODEL_SET_TIME_FAILED, YTSF_STATE_MODEL_GET_VER_INIT, YTSF_STATE_MODEL_GET_VER_RUNNING, YTSF_STATE_MODEL_GET_VER_DONE, YTSF_STATE_MODEL_GET_VER_VEROUT, YTSF_STATE_MODEL_GET_VER_CHANGED, YTSF_STATE_MODEL_GET_VER_FAILED, YTSF_STATE_GUN_GET_ZongLeiJi_INIT, YTSF_STATE_GUN_GET_ZongLeiJi_RUNNING, YTSF_STATE_GUN_GET_ZongLeiJi_DONE, YTSF_STATE_GUN_GET_ZongLeiJi_TIMEOUT, YTSF_STATE_GUN_GET_ZongLeiJi_CHANGED, YTSF_STATE_GUN_GET_ZongLeiJi_FAILED, YTSF_STATE_GUN_GET_DangCi_INIT, YTSF_STATE_GUN_GET_DangCi_RUNNING, YTSF_STATE_GUN_GET_DangCi_DONE, YTSF_STATE_GUN_GET_DangCi_TIMEOUT, YTSF_STATE_GUN_GET_DangCi_CHANGED, YTSF_STATE_GUN_GET_DangCi_FAILED, YTSF_STATE_DEVICE_HEARTBEAT_INIT, YTSF_STATE_DEVICE_HEARTBEAT_RUNNING, YTSF_STATE_DEVICE_HEARTBEAT_DONE, YTSF_STATE_DEVICE_HEARTBEAT_FAILED } tYtsfStateCodes; typedef struct { //uint8_t data[SQ_DEPTH][SQ_WIDTH]; //队列储存区 uint8_t fhead; //帧头(1Byte) uint8_t flen; //帧长度(1Byte) uint8_t findex; //帧序号(1Byte) uint8_t fport; //税控口编号(1Byte),0税控口1,1税控口2 uint8_t fcmd; //命令码(1Byte) //uint8_t fparm; //参数 uint8_t ftype; //命令消息类型(1Byte) uint8_t fgun; //枪号(1Byte) uint8_t fresult; //读取结果(1Byte) uint8_t fstatus; //读取结果(1Byte) uint8_t fdata[32]; //读取数据(NByte) uint8_t fldata; //读取数据(NByte) uint16_t fcrc; //CRC校验(2Byte) }tYTSFRxFrame_t; extern tYTSFRxFrame_t YTSF_rx_frame; typedef struct { uint8_t state; //使能(1Byte),0不使能,1使能,2无效 uint8_t index; //枪号索引 uint8_t ZongLeiJi[14]; //总累计 }tGun_t; typedef struct { uint8_t state_m; //状态机 uint8_t zlj_state; //总累计状态,0未读取总累计,1已读取总累计未读取当次,2已读取总累计已读取当此为发送,3已发送,4完成,9异常 uint8_t index; //当前端口索引,0 端口0,1端口1 uint8_t gun_index; //根据税控口SN,判断枪数最大值 uint8_t gun_max; //根据税控口SN,判断枪数最大值 uint8_t sn_init_st; //税控口SN初始化状态,0未初始化,1已经初始化,2初始化失败,3初始化超时 uint8_t mntr_sn[5+10]; //monitor监控序列号SN uint8_t mntr_id[12+4]; //税控芯片ID号 uint8_t mntr_factory; //税控芯片厂家,1英泰赛福,2拓盛 uint8_t mntr_ver[1+1+4]; //税控芯片版本号, uint8_t mntr_st[1+1+4+4+1+3]; //税控状态 uint8_t code_sn[5+5]; //编码器SN号 uint8_t lcd_sn[5+5]; //显示屏SN号 uint8_t cht_st[1+1+1+1+1+1+2]; //防作弊状态 uint32_t loop_sn_period; //总累计周期计数器 uint32_t loop_sn_timeout; //总累计周期超时时间,ms uint32_t loop_zlj_period; //总累计周期计数器 uint32_t loop_zlj_timeout; //总累计周期超时时间,ms uint32_t loop_state_period; //总累计周期计数器 uint32_t loop_state_timeout; //总累计周期超时时间,ms uint32_t loop_dc_period; //当次周期计数器 uint32_t loop_dc_timeout; //当次周期超时时间,ms,从总累计到当次的时间 uint32_t disconn_time; //断开连接次数,超过N次,state变为3 uint8_t dangci_lframe; //lora发送消息长度 uint8_t dangci_frame[32]; //lora发送消息内容 uint8_t lora_send_lmsg; //lora发送消息长度 uint8_t lora_send_msg[128]; //lora发送消息内容 tGun_t gun[8]; //枪 }tPort_t; typedef struct { uint32_t state; //状态机 uint32_t device_id; //采集器,ID uint8_t encrypt; //是否开启加密版,是否使用英泰赛富模块,0不使用,1使用 uint8_t chk_zlj; //是否检查总累计变化 uint8_t chan_index; //采集器,通道号 uint8_t chan_total; //采集器,通道总数 uint8_t zlj_chk; //是否判断总累计变化,1判断总累计变化,0不判断总累计变化, uint8_t lora_send_state; //lora 发送状态,0不使能,1使能,2无效 uint32_t lora_nosend_period; //从开机到lora发送使能的时间,超时计数器 uint32_t lora_nosend_timeout; //从开机到lora发送使能的时间,超时时间 uint8_t ytsf_state; //英泰赛福数据模块,0不使用英泰赛福数据模块,1使能,2无效 //uint8_t ver[4+4+4+7+1]; //英泰赛福数据模块,版本 uint16_t ver; uint32_t loop_ytsf_period; //英泰赛福数据模块本身(不涉及税控口,如读取模块ID),周期计数器 uint32_t loop_ytsf_timeout; //英泰赛福数据模块本身(不涉及税控口,如读取模块ID),周期超时间,ms uint8_t ytsf_id[12]; //英泰赛福数据模块,ID tPort_t port[2]; //端口 uint8_t lmsg; //lora发送消息长度 uint8_t msg[128]; //lora发送消息内容 }tDevice_t; extern tYTSFRxFrame_t YTSF_rx_frame; extern tYTSFRxFrame_t YTSF_rx_frame_port[2]; extern tDevice_t mDevice; #define CRC_INIT_VALUE 0x0000 #define Ytsf_CMD_BUF_SIZE 32 #define Ytsf_CMD_A1_SIZE 18 #define Ytsf_CMD_A2_SIZE 15 #define Ytsf_CMD_A5_SIZE 8 #define Ytsf_CMD_MAX_LIST 94 #define Ytsf_JK_SN_SIZE 5 #define Ytsf_CMD_PARM_SIZE 8 #define Ytsf_PORT_0 0x00 #define Ytsf_PORT_1 0x01 #define Ytsf_GUN_NUM_0 0x00 #define Ytsf_GUN_NUM_1 0x01 #define Ytsf_GUN_NUM_2 0x02 #define Ytsf_GUN_NUM_3 0x03 #define Ytsf_GUN_NUM_4 0x04 #define Ytsf_GUN_NUM_5 0x05 #define Ytsf_GUN_NUM_6 0x06 #define Ytsf_GUN_NUM_7 0x07 #define Ytsf_CMD_INSTRUCT_A0 0xa0 #define Ytsf_CMD_INSTRUCT_A1 0xa1 #define Ytsf_CMD_INSTRUCT_A2 0xa2 #define Ytsf_CMD_INSTRUCT_A5 0xa5 #define Ytsf_CMD_INSTRUCT_AF 0xaf #define Ytsf_CMD_TYPE_00 0x00 #define Ytsf_CMD_TYPE_01 0x01 #define Ytsf_CMD_TYPE_02 0x02 #define Ytsf_CMD_TYPE_10 0x10 #define Ytsf_CMD_TYPE_11 0x11 #define Ytsf_CMD_TYPE_12 0x12 #define Ytsf_CMD_TYPE_13 0x13 #define Ytsf_CMD_TYPE_14 0x14 #define Ytsf_CMD_TYPE_20 0x20 #define Ytsf_CMD_TYPE_21 0x21 #define Ytsf_CMD_TYPE_FF 0xff #define CMD_en 0x01 #define CMD_dn 0x00 #define YTSF_GPIO_SET() {GPIO_SetBits(GPIOC,GPIO_Pin_8);} #define YTSF_GPIO_RST() {GPIO_ResetBits(GPIOC,GPIO_Pin_8);} #define YTSF_GPIO_DETECT GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_11) #define YTSF_GPIO_EN() {GPIO_ResetBits(GPIOA,GPIO_Pin_12);} #define YTSF_GPIO_DN() {GPIO_SetBits(GPIOA,GPIO_Pin_12);} uint16_t GetCRC16(uint8_t *_buff,uint32_t _len); uint8_t Get_MAX_CMD_LIST(void); uint8_t Get_Ytsf_init(void); uint8_t YTSF_CMD_Tx(uint8_t size,uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type); int16_t Get_CMD_Index_ByParm(uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type); int16_t Set_CMD_Enable_ByIndex(uint16_t index); int16_t ReSet_CMD_Enable_ByIndex(uint16_t index); int16_t Set_CMD_Enable_ByParm(uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type); int16_t ReSet_CMD_Enable_ByParm(uint8_t port,uint8_t gun,uint8_t instruct,uint8_t type); int16_t Set_CMD_Enable_ByPort(uint8_t port); int16_t ReSet_CMD_Enable_ByPort(uint8_t port); int16_t Set_CMD_Enable_ByGun(uint8_t port,uint8_t gun); int16_t ReSet_CMD_Enable_ByGun(uint8_t port,uint8_t gun); uint8_t Ytsf_CMD_TEST(void); uint8_t Get_Ytsf_init(void); uint8_t Ytsf_CMD_polling(void); uint8_t Ytsf_CMD_Analysis(uint8_t *buf,uint8_t slen); int8_t Ytsf_CMD_Analysis2(tYTSFRxFrame_t *frame,uint8_t *sbuf,uint8_t slen); uint8_t YTSF_GET_STATE(void); uint8_t YTSF_SET_STATE(uint8_t s); uint8_t Ytsf_UartRx_Process(void); void Ytsf_loop(void); void Tax_loop(void); #define TAX_PORT_0 0x00 #define TAX_PORT_1 0x01 #define TAX_GUN_NUM_0 0x00 #define TAX_GUN_NUM_1 0x01 #define TAX_GUN_NUM_2 0x02 #define TAX_GUN_NUM_3 0x03 #define TAX_GUN_NUM_4 0x04 #define TAX_GUN_NUM_5 0x05 #define TAX_GUN_NUM_6 0x06 #define TAX_GUN_NUM_7 0x07 #define STATE_M_MODE_INIT 0x00 //状态机的状态更新模式,初始化 #define STATE_M_MODE_En 0x01 //状态机的状态更新模式,入队列 #define STATE_M_MODE_De 0x02 //状态机的状态更新模式,出队列 #define STATE_M_MODE_FORCE 0x03 //状态机的状态更新模式,强制设置状态机 #endif /* _USART_H */ /**** Copyright (C)2016 sun. All Rights Reserved **** END OF FILE ****/