39 lines
2.4 KiB
Plaintext
39 lines
2.4 KiB
Plaintext
数据包封装与行编码
|
||
HULC协议使用字节0x1A作为数据包的起始标记(SOP)。为了避免误将正常数据字节0x1A解释为SOP标记,每次遇到数据字节0x1A时,会在数据流中对其进行转义(即“转义”操作),
|
||
即将0x1A替换为两个0x1A字节。接收端需要在接收时识别每个后续不是0x1A的0x1A字节作为SOP标记,并将每次出现的连续0x1A字节还原为一个0x1A的数据字节(即“解除转义”操作)。
|
||
以下是一个包含SOP标记和数据字节0x1A的数据包示例:
|
||
转义前: 1A 32 27 1A E8 57 F0 1A 6C
|
||
传输中: 1A 32 27 1A 1A E8 57 F0 1A 1A 6C
|
||
解除转义后: 1A 32 27 1A E8 57 F0 1A 6C
|
||
|
||
|
||
|
||
|
||
所有类型的数据消息(0x31、0x32、0x33)具有以下结构:
|
||
0x1A TYPE 时间戳 RSSI数据 Mode-S或Mode-A/C
|
||
1 1 6 1 2/7/14
|
||
各字段说明:
|
||
TYPE(类型):8位,表示数据类型。0x31代表Mode-A/C,0x32代表Mode-S短报文,0x33代表Mode-S扩展报文。
|
||
时间戳(Timestamp):48位,包含两个部分:
|
||
高18位:自当天00:00:00 UTC以来的秒数。
|
||
低30位:当前秒的纳秒部分。
|
||
RSSI(信号强度指示):8位,表示信号强度的对数值(未校准)。
|
||
数据(Data):N * 8位的原始数据,具体长度取决于数据类型:
|
||
对于Type 0x31,数据长度为2字节;
|
||
对于Type 0x32,数据长度为7字节;
|
||
对于Type 0x33,数据长度为14字节。
|
||
备注:数据采用MSB(最高位优先)格式。
|
||
|
||
|
||
|
||
时间戳格式
|
||
时间戳有两种格式,分别是绝对时间戳和相对时间戳,取决于是否连接了GPS接收器。可以通过检查HULC状态消息中的状态标志字段的第15位(Gps Detected)来确定使用的是哪种格式。两种时间戳格式与Beast二进制协议中的相应时间戳格式兼容。
|
||
1.相对时间戳(无GPS):
|
||
如果没有连接GPS接收器,则时间戳是一个48位的无符号整数,表示12 MHz的时钟周期数。该时间戳大约每271天会回绕一次。
|
||
2.绝对时间戳(有GPS):
|
||
如果连接了适当的GPS接收器,则48位的时间戳字段分为两部分:
|
||
高18位:表示自当天00:00:00 UTC以来的秒数。
|
||
低30位:表示当前秒的纳秒部分。纳秒数保证小于1秒。
|
||
|
||
示例: 时间戳0x3746554be940代表的时间为:
|
||
56601秒 + 357296448纳秒 = UTC时间:15:43:21.357296448 |