#ifndef __WHYW_FRAME_H__ #define __WHYW_FRAME_H__ /****************************************************************************** * Include files ******************************************************************************/ #include "sys_config.h" #if PRODUCT_WHYW #include "UWater_frame_app.h" #include "UWater_rtcc_driver.h" /* C binding of definitions if building with C++ compiler */ #ifdef __cplusplus extern "C" { #endif /*******************************EEPROM存储地址划分****************************/ #define STORE_DATA_SIZE_CIRCLE 4 //周期数据单条长度 #define STORE_DATA_COUNT_CIRCLE 240 #define EEP_DATA_LEN_CIRCLE (STORE_DATA_SIZE_CIRCLE*STORE_DATA_COUNT_CIRCLE)//1200//周期数据存储空间 #define EEP_ADDR_WHYW_STORE_CIRCLE FRAME_SHENYANG_STORE_ADD //0x7300~0x7C00 周期数据存储地址 #define EEP_ADDR_WHYW_CIRCLE_INDEX_W (EEP_ADDR_WHYW_STORE_CIRCLE+EEP_DATA_LEN_CIRCLE)//周期数据存储指针 #define EEP_ADDR_WHYW_CIRCLE_INDEX_R (EEP_ADDR_WHYW_CIRCLE_INDEX_W+2)//周期数据读取指针 #define EEP_ADDR_WHYW_LAST_RTCC (EEP_ADDR_WHYW_CIRCLE_INDEX_R+2)//最后一条记录的时间7字节 //配置参数相关的存储 #define EEP_ADDR_WHYW_NB_ONLINE_KEEP (EEP_ADDR_WHYW_LAST_RTCC+7) //在线延时时间 1字节 #define EEP_ADDR_WHYW_STORE_INTERVAL (EEP_ADDR_WHYW_NB_ONLINE_KEEP+1)//表数据采集记录间隔时间 1字节 #define EEP_ADDR_WHYW_BATTERY_PRA (EEP_ADDR_WHYW_STORE_INTERVAL+1)//电池电压相关参数 4字节 #define EEP_ADDR_WHYW_UPLOAD_SUCCESS (EEP_ADDR_WHYW_BATTERY_PRA+4)//上报总次数 #define EEP_ADDR_WHYW_UPLOAD_FAIL (EEP_ADDR_WHYW_UPLOAD_SUCCESS+4)//上报成功总次数 #define UPLOAD_CIRCLE_MAX_COUNT 48 //单帧最多48条记录:48*4=192 #define UPLOAD_CIRCLE_MAX_LEN (STORE_DATA_SIZE_CIRCLE*UPLOAD_CIRCLE_MAX_COUNT)//单帧最大字节数 #define EE_PRA_SIZE_WHYW 21//EE存储参数总字节数 typedef union { struct { UNION_2U8TOU16 u_circle_store_index_w;//周期数据存储的位置 UNION_2U8TOU16 u_circle_store_index_r;//周期数据读取的位置 DateTime store_circle_rtcc_end;//最后一条记录的时间7字节 u8 ee_nb_online_keep_time;//在线延时时间 1字节 u8 ee_nb_acq_interval;//表数据采集记录间隔时间 1字节 采集间隔30分钟 u8 ee_battery_pra[4];//电池电压相关参数 UNION_2U8TOU16 ee_upload_count_success;//上报成功总次数 UNION_2U8TOU16 ee_upload_count_fail;//上报失败总次数 }Data; u8 data_buf[EE_PRA_SIZE_WHYW]; }WHYW_UNION_EE_STORE; /******************************规约解析相关参数*********************************/ #define FRAME_HEAD_MARK 0x68 #define FRAME_END_MARK 0x16 #define UP_BUF_SIZE 512 #define FRAME_LEN_MAX UP_BUF_SIZE #define FRAME_LEN_MIN 10 #define FRAME_GUIDE 0xFE //引导 #define FRAME_HEAD 0x68 //帧头 #define FRAME_TAIL 0x16 //帧尾本号 #define W_METTYPE 0x10 //水表类型 #define LYBK_DATA_UP_NOW 0x55 #define LYBK_OFFSET_DATA_UP 0xFF #define LYBK_DISCRETE_DATA_UP 0x99 #define READ_CTRL_DOWN 0x01 //读控制码下行 #define READ_CTRL_UP 0x81 //读控制码上行 #define WRITE_CTRL_DOWN 0x04 //写控制码下行 #define WRITE_CTRL_UP 0x84 //写控制码上行 //读、写水表在线延时等待时间 #define RW_ONLINE_TIME_D0 0x81 #define RW_ONLINE_TIME_D1 0x11 //读、写水表实时时间 #define RW_METER_TIME_D0 0xA0 #define RW_METER_TIME_D1 0x15 //读、写水表自动上传数据的时间参数 #define RW_UPLOAD_TIME_ID0 0x81 #define RW_UPLOAD_TIME_ID1 0x04 //读、写水表数据采集间隔时间 #define RW_INTERVAL_TIME_ID0 0x81 #define RW_INTERVAL_TIME_ID1 0x05 //读、写取电池电压相关参数 #define RW_BATTERY_D0 0x81 #define RW_BATTERY_D1 0x09 //读、写水表 NB 网络参数 #define RW_NB_PARA_D0 0x81 #define RW_NB_PARA_D1 0x10 //当前计量信息数据标识D0 #define UPLOAD_DATA_D0 0x90 #define UPLOAD_DATA_D1 0x20 ////////////////////////////////////////////////////////////////////////////////////////////////////////// typedef union //强制转化为浮点变量 { u32 gp22_u32; float gp22_float; u8 buf[4]; }U32_To_Float; typedef struct //存放表计收到的比较重要的数据 { u8 head_site; u8 frame_ctrl; //下行控制码 u8 ack_ctrl; //上行控制码 u8 mark_DI0; //数据标识DI0 u8 mark_DI1; //数据标识DI1 u8 serial_num; //序列号 mtype16_ len; //长度 u16 chkval; //校验和 u8 frame_sta; //规约状态 } STRUCT_FRAME_WHYW; typedef struct { u16 send_len; u8 send_sum_cs; //校验和 u8 send_buf[UP_BUF_SIZE]; }OTHER_FRAME_UP_SEND_PARA_; typedef enum{ WHYW_STATE_S0 = 0, WHYW_STATE_S1, WHYW_STATE_S2, WHYW_STATE_S3, WHYW_STATE_S4, WHYW_STATE_S5, WHYW_STATE_S6, WHYW_STATE_S7, WHYW_STATE_S8, WHYW_STATE_S9, WHYW_STATE_S10, WHYW_STATE_S11, WHYW_STATE_S12, WHYW_STATE_S13, WHYW_STATE_S20, WHYW_STATE_S21, WHYW_STATE_S22, WHYW_STATE_S30, WHYW_STATE_S31, WHYW_STATE_S32, }TYP_STATE_WHYW; u8 crack_frame_WHYW(u16 frame_lenth, u8 *frame_buffer); u8 up_deal_code_WHYW(void); void Frame_ack_WHYW(u8* p_send_buf, u16* p_send_len); void Frame_ResetDealState_WHYW(void); void GetUploadDataResetState_WHYW(void); u8 GetUploadDataCheckIdle_WHYW(void); u8 GetUploadDataCheckTask_WHYW(void); void GetUploadDataMachine_WHYW(u8 data_step, u8* p_send_buf, u16* p_send_len); /****************************规约数据存储部分*****************************/ void DataStoreInit(void); void DataStoreMachine(void); u8 DataStoreIfIdle(void); /************************网络连接选择\延时等待时间设置********************/ #define MAIN_CONNECT_TYPE NBIOT_CONNECT_UDP1 #define MAIN_SEND_TYPE SEND_TYPE_UDP1 #define SLAVE_CONNECT_TYPE NBIOT_CONNECT_UDP2 #define SLAVE_SEND_TYPE SEND_TYPE_UDP2 #define COAP_UPLOAD_WAIT_ACK_TIME 150 //主上报15秒,副上报5秒 #define UDP_UPLOAD_WAIT_ACK_TIME 50 #define NB_ONLINE_KEEP_TIME 50 #ifdef __cplusplus } #endif #endif #endif /* __LYBK_FRAME_H__ */ /****************************************************************************** * EOF (not truncated) ******************************************************************************/