数据包封装与行编码 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