#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