#header-parser #aerospace #space #parser #packet #secondary #primary

ccsds_spacepacket

该库试图实现一个通用解析器,用于解析空间数据包,可以解释空间数据包协议的通用方面(即主头)以及次要头中提供的任何自定义字段。尽管目前该库仅实现主头,但其未来的目标是使其成为一个更全面的空间数据包解析器。

2个不稳定版本

0.2.0 2021年11月4日
0.1.0 2021年10月28日

#11 in #secondary

Apache-2.0

12KB
88

CCSDS空间数据包协议

Crates.io Crates.io (recent)

这是CCSDS空间数据包协议的Rust实现。

关于协议

空间数据包协议是一个标准化的数据包协议,用于航空航天应用,由包括NASA、JAXA、ESA在内的主要航天机构联盟开发。

空间数据包协议定义了三个主要部分:主头、次要头和有效载荷。

主头由标准设置,包括版本、标识符、序列计数器、标志和数据包的数据长度字段。

次要头留作空间,组织可以在将最终规范提交给承包商或项目实施之前指定自己的自定义头值。

有效载荷也没有指定,可以包含几乎所有数据,如文件或其他数据包。

次要头和有效载荷构成了“用户数据字段”,所有空间数据包都必须至少包含这两个组件中的任何一个。

该库的功能

该库试图实现一个通用解析器,用于解析空间数据包,可以解释空间数据包协议的通用方面(即主头)以及次要头中提供的任何自定义字段。

通过允许库用户传递一个解析器来解释根据其项目或组织指定的次要头,实现了次要头解析。

当前状态

目前,该库仅实现主头解析,但将其扩展到能够处理具有用户定义的自定义次要头的完整、通用的空间数据包(类似于编程中的泛型)是项目的主要目标之一。

使用方法

	// say you have some bytes you want to turn into a PrimaryHeader
	let raw = b"\x00\x00\xc0\x00\x00\x40\xff\xff";

	let expected = PrimaryHeader {
		version: 0,
		packet_type: types::PacketType::Data,
		sec_header_flag: types::SecondaryHeaderFlag::NotPresent,
		app_proc_id: 0,
		sequence_flags: types::SeqFlag::Unsegmented,
		sequence_count: 0,
		data_length: 64,
	};

	// do the parsing and save the parsed header and any remaining bytes
	let (rest, parsed) = PrimaryHeader::from_bytes((raw, 0)).expect("failed to parse header");

	assert_eq!(parsed, expected);
	assert_eq!(rest.0, [255,255])

依赖关系

~3MB
~69K SLoC