Files
HBshuiwuConcentrator/APP/protocol.h
2025-12-15 16:07:49 +08:00

694 lines
13 KiB
C

#ifndef __PROTOCOL_H__
#define __PROTOCOL_H__
#include "Basedefine.h"
/************************************************************************
J188 read meter struct
************************************************************************/
typedef struct
{
u8 start68;
u8 type;
u8 id[7];
u8 ctrl;
u8 len;
u8 DI[2];
}ST_J188_head;
typedef struct
{
ST_J188_head head;
u8 SER;
u8 cs;
u8 end;
}ST_J188_read,* PLST_J188_read;
typedef struct
{
u8 current_sum[5];
u8 day_sum[5];
u8 current_time[7];
u8 status[2];
}ST_woter_data_block;
typedef struct
{
ST_J188_head head;
u8 SER;
ST_woter_data_block data_block;
u8 cs;
u8 end;
}ST_J188_read_woter_ack,* PLST_J188_read_woter_ack;
typedef struct
{
ST_J188_head head;
u8 SER;
u8 Data[4];
u8 ST0;
u8 ST1;
u8 cs;
u8 end;
}ST_XYJ188_read_woter_ack,* PLST_XYJ188_read_woter_ack;
typedef struct
{
u8 start68;
u8 type;
u8 id[7];
u8 ctrl;
u8 len;
u8 SER;
u8 status[2];
u8 cs;
u8 end;
}ST_J188_err_ack;
typedef struct
{
ST_J188_head head;
u8 SER;
u8 status[2];
u8 cs;
u8 end;
}ST_J188_ctrl_ack;
typedef struct
{
ST_J188_head head;
u8 cmd;
u8 SER;
u8 cs;
u8 end;
}ST_J188_ctrl;
/************************************************************************
yzsj read meter struct
************************************************************************/
typedef struct
{
u8 start68;
u8 id[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI0;
u8 DI1;
u8 cs;
u8 end;
}ST_yzsj_read;
typedef struct
{
u8 start68;
u8 data[3];
u8 sum;
}ST_yzsj_ack;
/************************************************************************
HHCQ read meter struct
************************************************************************/
typedef struct
{
u8 start68;
u8 MSA;
u8 SSA;
u8 WMA;
u8 type;
u8 key;
u8 ctrl;
u8 lenH;
u8 lenL;
}ST_HHCQ_head;
typedef struct
{
u8 start68;
u8 MSA;
u8 SSA;
u8 WMA;
u8 type;
u8 key;
u8 ctrl;
u8 lenH;
u8 lenL;
u8 data[4];
u8 crc8;
u8 end16;
}ST_HHCQ_read;
typedef struct
{
u8 start68;
u8 MSA;
u8 SSA;
u8 WMA;
u8 type;
u8 key;
u8 ctrl;
u8 lenH;
u8 lenL;
u8 id[4];
u8 status;
u8 data[4];
u8 crc8;
u8 end16;
}ST_HHCQ_read_woter_ack;
/************************************************************************
CS485 read meter struct
************************************************************************/
typedef struct
{
u8 start68;
u8 default80;
u8 center_addr[6];
u8 ctrl;
u8 dataLen[2];
u8 default70;
u8 DI[2];
}st_CS485_head;
typedef struct
{
st_CS485_head head;
u8 meterCount;
u8 meterID[5];
u8 day;
u8 month;
u8 year;
u8 crc16[2];
u8 end16;
}st_CS485_read;
typedef struct
{
st_CS485_head head;
u8 meterCount;
u8 meterID[5];
u8 min;
u8 hour;
u8 day;
u8 month;
u8 year;
u8 meter_data[4];
u8 status[2];
u8 reserved[2];
u8 crc16[2];
u8 end16;
}st_CS485_ack_ok;
typedef struct
{
st_CS485_head head;
u8 data[3];
u8 crc16[2];
u8 endi6;
}st_CS485_ack_err;
/************************************************************************
NJSM read meter struct
************************************************************************/
typedef struct
{
u8 startEB;
u8 cmd80;
u8 id[4];
u8 len;
u8 cs;
}st_NJSM485_read;
typedef struct
{
u8 startEB;
u8 cmd90;
u8 id[4];
u8 len0F;
u8 data[4];
u8 period[2];
u8 stop[2];
u8 status;
u8 saved[2];
u8 volt[2];
u8 temp[2];
u8 cs;
}st_NJSM485_ack;
/************************************************************************
HZJD read meter struct
************************************************************************/
typedef struct
{
u8 start68;
u8 id[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[2];
u8 cs;
u8 end16;
}st_HZJD_read;
typedef struct
{
u8 start68;
u8 id[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[2];
u8 data[4];
u8 cs;
u8 end16;
}st_HZJD_ack;
typedef struct
{
u8 start68;
u8 addr[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[4];
}ST_645_head;
typedef struct
{
u8 start68;
u8 addr[6];
u8 end68;
u8 ctrl;
u8 len;
u8 id[6];
u8 cs;
u8 end;
}ST_645_read_ADDR;
typedef struct
{
u8 start68;
u8 addr[6];
u8 end68;
u8 ctrl;
u8 len;
u8 defaultAF;
u8 defoult02;
u8 id[6];
u8 cs;
u8 end;
}ST_645_read_ADDR99;
typedef struct
{
u8 start68;
u8 addr[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[4];
u8 type;
u8 meter_id[7];
u8 cs;
u8 end;
}ST_645_read_meter;
typedef struct
{
u8 saved5[5];
u8 type_data;
u8 current_sum[5];
u8 day_sum[5];
u8 kpa[2];
u8 current[3];
u8 saved16[16];
u8 time_sum[3];
u8 current_time[7];
u8 status[2];
}ST_645_woter_data_block;
typedef struct
{
u8 frozen_time_flag[3];
u8 teminal_read_time[5];
u8 meter_type;
u8 current_sum[5];
u8 check_day_sum[5];
u8 saved[21];
u8 time_sum[3];
u8 current_time[7];
u8 status[2];
}ST_day_frozen_data_block;
typedef struct
{
u8 start68;
u8 id[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[4];
ST_645_woter_data_block data_block;
u8 type;
u8 meter_id[7];
u8 cs;
u8 end;
}ST_645_read_worter_ack;
typedef struct
{
u8 start68;
u8 id[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[4];
ST_day_frozen_data_block data_block;
u8 type;
u8 meter_id[7];
u8 cs;
u8 end;
}ST_645_read_frozen_woter_ack;
typedef struct
{
u8 start68;
u8 addr[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[2];
u8 MSB;
u8 type;
u8 saved[2];
}ST_645_SFDX_read_meter;
typedef struct
{
u8 start68;
u8 addr[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[2];
u8 MSB;
u8 type;
u8 current_sum[5];
u8 day_sum[5];
u8 current_time[7];
u8 status[2];
u8 cs;
u8 end;
}ST_645_SFDX_read_ack;
typedef struct
{
u8 com_databits:2;
u8 com_checkbit:1;
u8 com_checkbit_mask:1;
u8 com_stopbit:1;
u8 com_baud:3;
}ST_comConf;
typedef struct
{
u8 start68;
u8 id[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[4];
u8 port;
u8 meter_config;
u8 meter_type;
u8 meter_id[7];
}ST_E5E50000_packet;//E5E50000 E5E50001
typedef struct
{
u8 start68;
u8 id[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[4];
}ST_E5E50000_ack;//E5E50000 ack
typedef struct
{
u8 start68;
u8 id[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[4];
u8 port;
u8 port_config;
u8 meter_type;
u8 meter_id[7];
ST_J188_read packet188;
u8 cs;
u8 end16;
}ST_E5E50001_packet;//E5E50001
typedef struct
{
u8 start68;
u8 id[6];
u8 end68;
u8 ctrl;
u8 len;
u8 DI[4];
ST_J188_read_woter_ack packet188;
u8 cs;
u8 end16;
}ST_E5E50001_ack; //E5E50001 ack
typedef union
{
ST_645_read_meter * com_upPacket_ptr;
ST_645_SFDX_read_meter * whsf_upPacket_ptr;
ST_E5E50000_packet * e5e50000_upPacket_ptr;
ST_E5E50001_packet * e5e50001_upPacket_ptr;
}un_upPaket;
/*********************************************/
typedef union
{
ST_J188_read * J188_read_ptr;
ST_yzsj_read * yzsj_read_ptr;
ST_HHCQ_read * hhcq_read_ptr;
st_CS485_read * CS485_read_ptr;
st_NJSM485_read * NJSM485_read_ptr;
st_HZJD_read * HZJD_read_ptr;
}un_down_read_Packet;
typedef struct
{
u8 up_protol;
u8 meter_type;
u8 meter_protl;
u8 meter_port;
u8 meter_config;
u8 meter_addr[7];
u8 plc_DI[4];
u8 data[5];
u8 status[2];
u8 j188DI[2];
u8 j188SER;
u8 e5e5dat[200];
u8 e5e5datLen;
}st_params;
#pragma pack(1)
//福建赛达水表集中器抄表协议
typedef struct
{
u8 FIXED_FE1;
u8 FIXED_FE2;
u8 FIXED_FE3;
u8 StartSymbol; //0x68
u8 MeterType;
u8 GPRSAddr[7];
u8 ControlWord;
u8 FrameSum;
u8 FrameSn;
u16 FrameLength;
//Data Area
u8 DataFlag[3];
//u8 DataSn;
u8 MAddr[7];
u8 CS;
u8 ENDSymbol;
}ST_FUJIAN_SDPROTOCOL_READWGDATA,*LPST_FUJIAN_SDPROTOCOL_READWGDATA;
//福建赛达水表集中器抄表返回帧协议
typedef struct
{
u8 StartSymbol; //0x68
u8 MeterType;
u8 GPRSAddr[7];
u8 ControlWord;
u8 FrameSum;
u8 FrameSn;
u16 FrameLength;
//Data Area
u8 DataFlag[3];
//u8 DataSn;
u8 MAddr[7];
u8 DataBuff[6];
u8 CS;
u8 ENDSymbol;
}ST_FUJIAN_SDPROTOCOL_READWGACKDATA,*LPST_FUJIAN_SDPROTOCOL_READWGACKDATA;
typedef struct
{
u8 StartSymbol; //0x68
u8 CAddr[6];
u8 StartaSymbol; //0x68
u8 ControlWord;
u8 DataLength;
//Data Area
u8 MAddr[7];
u8 Data[4];
u8 Status[2];
u8 CS;
u8 ENDSymbol;
}ST_RADIO_MONITOR_DATA_TYPE,*PLST_RADIO_MONITOR_DATA_TYPE;
typedef struct _readmf
{
u8 frameh; //0xAA
u8 companyflag[2];//00 00
u8 ctrl[2];// 06 01
u8 addr[4];// hex => dec
u8 rm_year;//dec
u8 rm_month;//dec
u8 rm_day;//dec
u8 standy[6];//00
u8 cs;//
u8 frameend;//16
}ST_CDRS232_READ_MONTH_DATA_FRAME_TYPE,*PLST_CDRS232_READ_MONTH_DATA_FRAME_TYPE;
#pragma pack()
extern u8 calcrc_1byte(u8 abyte);
extern u8 calcrc_bytes(u8 *p, u16 len);
extern bool check_645_protocol(u8 *buf, u8 length);
extern u8 check_HHQQ_protocol(u8 *buf, u8 length);
extern bool check_j188_protocol(u8 *buf, u8 length);
extern bool check_yzsj_ack_protocol(u8 *buf, u16 len);
extern void code_HHCQ_buf(u8 *buf, u8 len);
extern void create_read_CS485_Meter(u8* id, u8 *outBuf, u16 *outLen);
extern void create_read_HHCQ_Meter(u8 *id, u8 *outBuf, u16 *outLen);
extern void create_read_HYgas_Meter(u8 *id, u8 *outBuf, u16 *outLen);
extern void create_read_HZJD_Meter(u8 *id, u8 *outBuf, u16 *outLen);
extern void create_read_J188_Meter(u8 type, u8 *id, bool j901f, u8 *outBuf, u16 *outLen);
extern void create_read_NJSM485_Meter( u8 *id, u8 *outBuf, u16 *outLen);
extern void create_read_YZSJ_Meter( u8 *id, u8 *outBuf, u16 *outLen);
extern bool CS485_ackPacket_analyse(u8 *inbuf, u16 len, u8 *inID, u8 *out_datas, u8 *out_status);
extern void decode_HHCQ_buf(u8* buf);
extern u8 get_645_packet_length(u8* buf);
extern u8 get_HHCQ_length(u8* buf);
extern u8 get_j188_length(u8 *buf);
extern bool HHCQ_ackPacket_analyse(u8 *inbuf, u16 len, u8 *inID, u8 *out_datas, u8 *out_status);
extern bool HZJD_ackPacket_analyse(u8 *inbuf, u16 len, u8 *inID, u8 *out_datas, u8 *out_status);
extern bool J188_ackPacket_analyse(u8 *inbuf, u16 len, u8 *inID, u8 *out_datas, u8 *out_status);
extern bool NJSM485_ackPacket_analyse(u8 *inbuf, u16 len, u8 *inID, u8 *out_datas, u8 *out_status);
extern u8 * search_645_packet(u8 *buf, u16 length);
extern u8 * search_HHCQ_packet(u8* buf, u8 length);
extern u8 * search_j188_packet(u8 *buf, u16 length);
extern u8 * search_yzsj_packet(u8 *buf, u16 length);
extern u8 transparent_tx(u8 *buf, u8 inlen);
extern bool YZSJ_ackPacket_analyse(u8 *inbuf, u16 len, u8 *inID, u8 *out_datas, u8 *out_status);
extern struct st_meter_temp_value * process_recevied_id(u8 *id);
extern bool check_188_read_meter_packet(u8 *buf, u16 length, u8 *type, u8 *id, u8 *j188DI, u8 *j188SER);
extern void E5E50001_uplinkPacket_create(st_params * ptr, u8* outBuf);
extern void E5E50000_uplinkPacket_create(st_params * ptr, u8 *inbuf, u8 inLen, u8* outBuf);
void CreatFuJian_Protocol_ReadWaterGasMeterDataBlockFrame( u8* str,u8* len,u8* Addr);
u8* CheckFuJian_Protocol_ReadWaterGasMeterDataBlockAckFrame( u8* str,u8 len,u8* Addr);
void CreatFuJian_Protocol_WaterGasMeter645DataACKFrame( u8* Pstr,u8* len,u8* Addr,u8* Data,u8* Ftime);
void CreatFuJian_Protocol_WaterGasMeter645DataERRORACKFrame( u8* Pstr,u8* len,u8* Addr);
u8* CheckFuJian_Protocol_ReadXYWaterMeterDataBlockAckFrame( u8* str,u8 len,u8* Addr);
void CreatFuJian_Protocol_ReadXYWaterMeterDataBlockFrame( u8* str,u8* len,u8* Addr);
void CreatHubei_Protocol_ReadXYWaterMeterDataFrame( u8* str,u16* len,u8* Addr);
u8* CheckHubei_Protocol_ReadXYWaterMeterAckDataFrame( u8* str,u8 len,u8* Addr,u8* outaddr);
void AnalyzeXYDXAckDataFrameProcess(u8* pData,st_params * pstr);
void DLT645_07_watermetertype_ack(u8 *buf);
void CreatXinTian_Protocol_ControlONOFFKey(u8* Pstr,u8* Len,u8* Addr,u8 key);
void CreatChenDianGuoJi_Protocol_ControlWaterGasMeterKeyAckFrame( u8* Pstr,u8* len,st_params * pstr,u16 key);
void CreatChenDianGuoJI_Protocol_WaterGasMeter645DataERRORACKFrame( u8* Pstr,u8* len,st_params * pstr);
void CreatReadChangDeConcentratorData(u8* meter_id,u8* outBuf, u16* outLen);
void CreatReadChangDeConcentratorDate(u8* outBuf, u16* outLen);
//void CreatReadChangDeConcentratorDate(u8* outBuf, u16* outLen);
#endif