协议格式说明
2024年3月9日大约 2 分钟
协议格式说明
请先读我
请先读我
- 本示例是对
交通部 JT/T 808 协议 - V2019
的解析示例
交通部 JT/T 808 协议
的消息类型有很多- 同时有
2011(废弃)、2013
、2019
版本,本示例仅仅展示V2019
版本的0x0200
(地理位置) 消息类型的解析示例 - 而且还有各个地方标准的扩展
- 同时有
- 和 示例1 一样,本示例将演示 3 种风格的注解使用示例:
Rust
命名风格的注解JT/T 808
协议 命名风格的注解- 最底层的
@XtreamField
风格注解(实际上前两种注解都是@XtreamField
的别名)
- 同时也会分为
扁平化
和内嵌
两种方式的注解使用示例:也就是3 * 2 = 6
个 基于注解的实体类示例
消息结构
标识位 | 消息头 | 消息体 | 校验码 | 标识位 |
---|---|---|---|---|
1byte(0x7e) | 16byte | 不同消息 ID 有不同格式 | 1byte | 1byte(0x7e) |
消息头
非分包消息
的消息头长度为17字节
分包消息
的消息头长度为21字节
消息头的结构如下所示:
消息ID[0-2) 消息体属性[2-4) 协议版本号[4] 终端手机号[5-15) 消息流水号[15-17) 消息包封装项[17-21)
byte[0-2) 消息ID word(16)
byte[2-4) 消息体属性 word(16)
bit[0-10) 消息体长度
bit[10-13) 数据加密方式
此三位都为 0,表示消息体不加密
第 10 位为 1,表示消息体经过 RSA 算法加密
其它保留
bit[13] 分包
1: 消息体卫长消息,进行分包发送处理,具体分包信息由消息包封装项决定
0: 则消息头中无消息包封装项字段
bit[14] 版本标识
bit[15] 保留
byte[4] 协议版本号
byte[5-15) 终端手机号或设备ID bcd[10]
根据安装后终端自身的手机号转换
手机号不足12 位,则在前面补 0
byte[15-17) 消息流水号 word(16)
按发送顺序从 0 开始循环累加
byte[17-21) 消息包封装项
如果消息体属性中相关标识位确定消息分包处理,则该项有内容
否则无该项
byte[0-2) 消息包总数(word(16)) 该消息分包后得总包数
byte[2-4) 包序号(word(16)) 从 1 开始
消息体
交通部 JT/T 808 协议
里有 N
种消息类型,消息ID
不同对应的消息体也不同,同时还有各种扩展消息,本示例仅展示 0x0200
(地理位置) 消息类型的解析示例。
0x0200
消息的消息体如下图所示: