| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- #ifndef _XSPDATAOPT_H_
- #define _XSPDATAOPT_H_
- #include "../CMSIS/gd32f10x.h"
- #include "xspOptFlash.h"
- #include <string.h>
- #include "../Hardware/boardinit.h"
- #define XSP_SAVE_TIME (1000*60*30)// 30分钟
- enum {
- U1_ID = 0x00,
- U4_ID = 0x01,
- U5_ID = 0x02,
- };
- typedef struct _table_needle_{
- uint8_t uId;
- uint8_t comIndex; // 在那个com端下
- uint8_t csIndex; // 片选的索引
- uint8_t pinIndex; // 管脚索引
- }__attribute__((packed))NeedleTable;
- typedef struct _com_data_msg_{
- uint8_t num;
- uint8_t lastvl;
- uint8_t tda[10][24];
- uint8_t da[24];
- }__attribute__((packed))comDaMsg;
- typedef struct _com_src_data_{
- uint8_t flag; // 按位计算 3组com端 6组数据,共6个1,用3F表示
- comDaMsg daMsg[3][2]; // 一共3组 每组中有两个小组
- }__attribute__((packed))ComSrcDa;
- typedef struct _table_com_{
- uint8_t comPort;
- uint8_t comPin;
- }__attribute__((packed))ComId;
- extern uint8_t g_7egDa[29];
- typedef struct display_data_{
- uint32_t price; // 单价
- uint32_t amount; // 金额
- uint32_t oil; // 油量
- }__attribute__((packed)) dispData;
- typedef union _c_to_u_ {
- uint8_t da8[16];
- uint16_t da16[8];
- uint32_t da32[4];
- uint64_t da64[2];
- }__attribute__((packed)) UData;
- typedef struct _src_7seg_ {
- uint8_t amount[6];
- uint8_t oil[6];
- uint8_t price[4];
- }__attribute__((packed)) Src7Seg;
- typedef union _data_src_7seg_ {
- Src7Seg da;
- UData uDa;
- uint8_t val[16];
- }__attribute__((packed)) Usrc7SegDa;
- typedef struct _error_7seg_ {
- uint8_t berror;
- }__attribute__((packed))Error7Seg;
- #define START_ID 1
- enum {
- STATUS_NULL = 0x00, // 未初始化状态
- STATUS_START = 0x01, // 加油开始
- STATUS_PROG = 0x02, // 加油中
- STATUS_END = 0x03, // 加油结束
- STATUS_STOP = 0x04, // 加油停止
- STATUS_CHECK = 0x05, // 数据查询
- };
- enum{
- GUN_NULL = 0x00, // 未知
- GUN_UP = 0x01, // 抬枪
- GUN_DOWN = 0x02, // 挂枪
- };
- typedef struct xsp_coll_data_ {
- Usrc7SegDa cur; // 原始的七段码记录
- Usrc7SegDa last1;
- Usrc7SegDa last2;
- timeout_t sameTimer; // 相同数据的时间
- uint8_t corrDa[16];
- uint32_t startTime; // 加油开始的时间
- uint32_t stopTime; // 加油结束时的时间
- uint32_t gunUpTime; // 抬枪的时间
- uint32_t gunDnTime; // 挂枪的时间
- uint8_t gunStatus;
- uint8_t bcheckDa; // 当前显示屏显示的数据是否是查询数据
- uint8_t curstatus; // 加油状态
- dispData curDisp; // 解析好的数据记录
- dispData lastDisp; // 上一个需要存储的数据
- dispData lastDisp1; // 上上个数据,用于错误数据矫正
- uint32_t lastTick1; // 上上个加油的时间,用于错误数据矫正
- uint32_t lastTick; // 上一次记录的时间戳
- uint32_t lastcomTick; // 只要变化不管数据的对错,就记录时间戳,
- uint8_t bSaveRecode; // 是否需要存储当次的交易记录
- uint8_t lastbSaveRecord; // 上一笔交易是否需要存储(只用于逻辑判断时)
- uint32_t errorNum; // 在加油开始的状态下,统计错误的次数
- uint32_t startToprog; // 小额增长变化次数(从加油开始,到加油中的判断过程
- uint64_t lastTamout;
- uint64_t lastToil;
- uint8_t bcorrect; // 是否纠正
- uint8_t bstart00; // 加油是从00开始的
- }__attribute__((packed)) XspCollDa;
- extern XspCollDa g_xspCollDa;
- typedef struct xsp_record_{
- uint32_t recordId; // 记录ID
- uint16_t bsend; // 0xff:没有发送 0x00:已经发送
- uint8_t recodeMode; // 记录产生方式 0:逻辑产生 1:抬枪信号产生,3:按键产生
- uint8_t priceUseCount; // 单价屏的索引
- uint32_t amount;
- uint32_t oil;
- uint32_t price;
- uint64_t tamount;
- uint64_t toil;
- uint32_t timer;// 记录时间
- uint16_t bcorrect; // 用高8位表示是否是纠正数据 0:未纠正 1:纠正一位 2:计算纠正
- }__attribute__((packed)) xspRecord;
- typedef union xsp_data_info_{
- uint8_t data[64];
- xspRecord reDa;
- }__attribute__((packed)) XspDataInfo;
- extern XspDataInfo g_xspReDa;
- typedef struct _up_7seg_src_data_{
- uint8_t bOpen; // 是否开启 1:开启
- uint8_t bAppointDev; // 是否指定的一个设备 0:否, 1:指令的设备为主 2:指定的设备为从
- uint8_t bofflineTest; // 离线调试,主动上报
- timeout_t upTime; // 上报的时长
- uint8_t devMsg[17]; // 读取指令的从设备的8段数据,用于主设备问询从设备
- }__attribute__((packed))Up7segData;
- extern Up7segData g_up7segData;
- typedef enum {
- LOW_LEVEL = 0x00,
- HIGHT_LEVEL = 0x01,
- LOW_HIGHT = 0x02, // 由低变高
- HIGHT_LOW = 0x03, // 由高变低
- }gunstatus;
- #define GUN_STATUS_TIMER 50000 // 10ms 10000 // 1S,
- typedef struct gun_status_{
- gunstatus curst; // 当前的状态
- gunstatus lastst; // 上一次的状态
- uint32_t timer; // 时间
- uint8_t count; // 检测次数 低电平的个数
- uint8_t bsave; // 是否已经挂枪需要存储数据
- }__attribute__((packed))GunStatus;
- /*-------探针板错误数据记录以及上传-------------*/
- typedef struct _xsp_err_da_{
- timeout_t timer; // 数据不变的时间
- uint8_t bsend; // 本条数据是否已经发送 1:已经发送,2:未发送,0:默认不需要处理
- uint8_t segDa[29]; // 错误的七段码数据
- uint8_t lastsegDa[29];
- }__attribute__((packed)) XspErrDa;
- extern XspErrDa g_xspErrDa;
- #define SAME_GROUP 3//1
- #define TEST_COLL_DA_MAX_NUM 1000
- #define TEST_COLL_GROUP 24
- typedef struct _test_coll_data_{ // 测试采集数据
- volatile uint8_t collDa[TEST_COLL_DA_MAX_NUM][TEST_COLL_GROUP]; // 需要采集的数据
- uint8_t lastDa[8][TEST_COLL_GROUP];
- uint8_t tcollNum[TEST_COLL_GROUP*8]; // 存储每一位采集比较的结果
- uint8_t lastval[TEST_COLL_GROUP*8];
- uint8_t sendCollNum[TEST_COLL_GROUP*8]; // 需要上传的数据
- uint8_t bTestCollDa; // 是否是采集测试数据模式 1:是, 0:否
- uint32_t collTime; // 采集的时间, 多长时间采集一次
- volatile uint16_t collNum; // 记录采集的次数
- uint16_t dealNum; // 处理的次数
- uint8_t bdealDa; // 处理数据
- }__attribute__((packed)) testCollDa;
- extern testCollDa g_testCollDa;
- extern void init_test_coll_data_info(uint8_t bstart);
- extern void deal_coll_data_com(void);
- extern void deal_coll_data_HY(void);
- extern void init_xsp_run_data(void);
- extern void init_gun_status(void);
- extern void deal_gun_status(uint32_t tick);
- extern void anay_7eg(void);
- extern void init_comMsg(void);
- #endif
|