#ifndef UWATER_FRAME_FUNC_REPLAY_SY_H
#define	UWATER_FRAME_FUNC_REPLAY_SY_H

#include "sys_config.h"
#if PRODUCT_SY
#include "UWater_Frame_app.h"
/**************************************20211025沈阳订单新增规约********************************************/
//上报冻结数据
//水表向平台端主动发送数据规约
//上传冻结数据（101，应答1）  上报未冻结数据、水表状态、报警等信息
#define FM_UPLOAD_FROZEN_DATA_CTRL                        0x65   //101     
#define FM_UPLOAD_FROZEN_DATA_REPLY_CTRL                  0x01   //1

//上报周期数据(102,应答2)   上报周期采集的数据
#define FM_UPLOAD_CYCLE_DATA_CTRL                         0x66   //102     
#define FM_UPLOAD_CYCLE_DATA_REPLY_CTRL                   0x02   //2

//突发报警上传(103,应答3)   在发生报警等级为1的报警事件时随时上传
#define FM_SUDDEN_ALARM_UPLOAD_CTRL                       0x67   //103     
#define FM_SUDDEN_ALARM_UPLOAD_REPLY_CTRL                 0x03   //3

//水表应答平台请求规约
//参数设置（6，应答106）   设置上传时间、开关阀门、报警参数等
#define FM_PARAMENTER_SETTING_CTRL                        0x06   //6    
#define FM_PARAMENTER_SETTING_REPLY_CTRL                  0x6A   //106

//参数查询（7，应答107）   在发生报警等级为1的报警事件时随时上传
#define FM_PARAMENTER_QUERY_CTRL                          0x07   //7    
#define FM_PARAMENTER_QUERY_REPLY_CTRL                    0x6B   //107

//冻结数据查询(8,应答108)  查询日冻结数据、年冻结数据、月冻结数据
#define FM_FROZEN_DATA_QUERY_CTRL                         0x08   //8    
#define FM_FROZEN_DATA_QUERY_REPLY_CTRL                   0x6C   //108

 //周期数据查询(9,应答109)   查询最近7天的周期数据
#define FM_CYCLE_DATA_QUERY_CTRL                          0x09   //9    
#define FM_CYCLE_DATA_QUERY_REPLY_CTRL                    0x6D   //109

//报警历史数据查询（10，应答110）   查询历史报警数据
#define FM_ALARM_HISTORY_DATA_QUERY_CTRL                  0x0A   //10    
#define FM_ALARM_HISTORY_DATA_QUERY_REPLY_CTRL            0x6E   //110
  
//清空数据(51,应答151)   清空冻结数据、历史数据、报警数据
#define FM_CLEAR_ALL_DATA_CTRL                            0x33   //51    
#define FM_CLEAR_ALL_DATA_REPLY_CTRL                      0x97   //151

//重启、恢复出厂设置(52,应答152)
#define FM_RESTORE_FACTORY_SETTING_CTRL                   0x34   //52    
#define FM_RESTORE_FACTORY_SETTING_REPLY_CTRL             0x98   //152

//调试指令(71,应答171)  由厂家自行定义的报文，数据域由厂家自行设置
#define FM_DEBUG_INSTRUCTION_CTRL                         0x47   //71   
#define FM_DEBUG_INSTRUCTION_REPLY_CTRL                   0xAB   //171

typedef union 
{
	struct 
	{
    u8 data0;
    u8 data1;
	} datas_map;
	u8 data_buf[2];
	u16 datas;
} SY_UNION_2U8TOU16;

typedef struct 
{
	u8 head_site; //帧头位置
	u8 ctrl;
	u8 ack_ctrl;
	SY_UNION_2U8TOU16 len;  //沈阳规约数据长度固定2字节16进制，低字节在前，高字节在后
	u8 end_site; //帧尾位置
	u8 check_len; //参与校验计算的数据长度
	u8 sta;  //GPRS加密状态0x80加密  0x40 主动发送(BIT2 = 0应答帧)
	u8 met_type;  //沈阳规约将表计类型定义为规约类型，定为0X02
	u8 serial_num0;  //序列号
} STRUCT_FRAME_SY;//存储数据帧重要内容


u8 up_deal_code_sy(void);
u8 crack_frame_SY(u16 frame_lenth,u8 *frame_buffer);
void Frame_ResetDealState_Shenyang(void);
void Sy_Frame_nb_read_ack(u8* p_send_buf, u16* p_send_len);
/************************************************上报相关**********************/
void GetUploadDataResetState_ShenYangUDP(void);
u8 GetUploadDataCheckIdle_ShenYangUDP(void);
u8 GetUploadDataCheckTask_ShenYangUDP(void);
void GetUploadDataMachine_ShenYangUDP(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
//主上报10秒，副上报5秒
#define COAP_UPLOAD_WAIT_ACK_TIME  100   
#define UDP_UPLOAD_WAIT_ACK_TIME   50 
#define NB_ONLINE_KEEP_TIME  50


#endif

#endif	


