1个不稳定版本
0.1.0 | 2024年3月12日 |
---|
#703 在 科学
每月 21 次下载
32KB
640 代码行
又一个带有内置编码和解码功能的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