123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #ifndef DATA_FRAME_H
- #define DATA_FRAME_H
- #include <stdint.h>
- #include <QTextCodec>
- // 消息体属性.
- union MsgBodyAttr {
- struct {
- uint16_t msglen:10; // 消息体长度, 占用10bit.
- uint16_t encrypt:3; // 数据加密方式, 当此三位都为0, 表示消息体不加密, // 当第10位为1, 表示消息体经过RSA算法加密.
- uint16_t packet:1; // 分包标记.
- uint16_t retain:2; // 保留2位.
- }bit;
- uint16_t u16val;
- };
- // 消息内容起始位置.
- enum MsgBodyPos {
- MSGBODY_NOPACKET_POS = 13, // 短消息体消息内容起始位置.
- MSGBODY_PACKET_POS = 17, // 长消息体消息内容起始位置.
- };
- // 转义相关标识.
- enum ProtocolEscapeFlag {
- PROTOCOL_SIGN = 0x7E, // 标识位.
- PROTOCOL_ESCAPE = 0x7D, // 转义标识.
- PROTOCOL_ESCAPE_SIGN = 0x02, // 0x7E<-->0x7D后紧跟一个0x02.
- PROTOCOL_ESCAPE_ESCAPE = 0x01, // 0x7D<-->0x7D后紧跟一个0x01.
- };
- // 消息头.
- struct MsgHead_2013 {
- uint16_t msg_id; // 消息ID.
- MsgBodyAttr msgbody_attr; // 消息体属性.
- uint8_t phone_num[6]; // 终端手机号.
- uint16_t msg_flow_num; // 消息流水号.
- uint16_t total_packet; // 总包数, 分包情况下使用.
- uint16_t packet_seq; // 当前包编号, 分包情况下使用.
- };
- // 消息头.
- struct MsgHead_2019
- {
- uint16_t msg_id; // 消息ID.
- MsgBodyAttr msgbody_attr; // 消息体属性.
- uint8_t version; // 协议版本.
- uint8_t phone_num[10]; // 终端手机号.
- uint16_t msg_flow_num; // 消息流水号.
- uint16_t total_packet; // 总包数, 分包情况下使用.
- uint16_t packet_seq; // 当前包编号, 分包情况下使用.
- };
- typedef struct MsgHead_txt_2013 {
- uint8_t msg_id[4]; // 消息ID.
- uint8_t attr[4]; // 消息体属性.
- uint8_t phone[12]; // 终端手机号.
- uint8_t sn[4]; // 消息流水号.
- uint8_t total[4]; // 总包数, 分包情况下使用.
- uint8_t sub[4]; // 当前包编号, 分包情况下使用.
- }MsgHead_txt_2013;
- typedef struct
- {
- uint16_t frameflag; //帧头 0-1
- uint32_t deviceaddr; //4字节扩展地址 2--5
- uint16_t functioncode; //读写功能码
- uint16_t cmdcode; // 命令码
- uint16_t datalength; //数据个数2字节
- uint32_t reserved; //保留字4字节 12--15
- }Command_Header;
- typedef struct
- {
- uint8_t frameflag[4]; //帧头 0-1
- uint8_t deviceaddr[8]; //4字节扩展地址 2--5
- uint8_t functioncode[4]; //读写功能码
- uint8_t cmdcode[4]; //命令码
- uint8_t datalength[4]; //数据个数2字节
- uint8_t reserved[8]; //保留字4字节 12--15
- }T2C_Header_txt;
- void frame_to_ascii(QString in,QString *out);
- void frame_decode_jtt808(QString in,QString *out);
- void frame_decode_recognize(QString in,QString *out);
- #endif // DATA_FRAME_H
|