#ccsds #byte #packets #parser #packet #space-protocols

spacepacket

符合CCSDS规范的带有CRC和Sink/Stream支持的空包编解码器

1个不稳定版本

0.1.0 2024年3月12日

#703科学

每月 21 次下载

自定义许可证

32KB
640 代码行

ci

又一个带有内置编码和解码功能的CCSDS空间包协议实现。

为什么还需要另一个数据包库?

此库的接口为CCSDS数据包有效载荷(包括次要标题)提供了一个包装器,而不仅仅是解析标题字节。整个数据包被解析为SpacePacket结构体,所有有效载荷编码长度(包括CRC验证)的开销都由最终用户处理。

创建此库是在查看其他基于Rust的CCSDS库并希望有更友好的数据包交互用户界面之后。

目前此库假定所有字节流都为大端。尽管这可能在将来变为端序通用的。

可选功能

CRC支持

此库通过crc crate提供通过CRC-16计算的数据验证。

Sink/Stream支持

此库提供的另一个可选功能是通过async-codec和tokio-codec功能支持空间包的I/O(通过sinks和stream)。这使得用户可以轻松创建具有可选同步标记和CRC支持的空间包异步监听器。

示例

use spacepacket::{GroupingFlag, PacketType, SpacePacket};

let payload = b"secret payload".to_vec();
let packet = SpacePacket::new(
    0,
    PacketType::Command,
    0x012,
    GroupingFlag::Unsegm,
    3,
    true,
    payload,
);

let bytestream = packet.encode();
let recovered_packet = SpacePacket::decode(&mut bytestream.as_slice()).unwrap();
assert_eq!(packet, recovered_packet)

依赖关系

~0.2–1.3MB
~23K SLoC