#parser #packet-parser #protocols #crossfire

crsf

该软件包提供了对crossfire协议的#[no_std]解析器

5个版本 (3个稳定版本)

2.0.1 2024年4月15日
2.0.0 2024年4月3日
1.0.1 2024年2月22日
0.2.0 2024年2月4日
0.1.0 2023年10月13日

#45 in #packet-parser

MIT 许可证

28KB
678

crsf-rs

该软件包提供了对crossfire协议的#[no_std]解析器。

CRSF协议规范

示例

查看示例目录

文档

暂不可用。

许可证

根据MIT许可证许可。

贡献

欢迎贡献代码,因为这个项目仍在进行中。


lib.rs:

该软件包提供了对crossfire协议的#[no_std]解析器。

使用方法

数据包解析

use crsf::{PacketParser, PacketAddress, PacketType};

let mut parser = PacketParser::<1024>::new();

// Sync
parser.push_bytes(&[PacketAddress::Controller as u8]);
// Len
parser.push_bytes(&[24]);
// Type
parser.push_bytes(&[PacketType::RcChannelsPacked as u8]);
// Payload
parser.push_bytes(&[0; 22]);
// Checksum
parser.push_bytes(&[239]);

while let Some(Ok((dest, packet))) = parser.next_packet() {
    println!("{:?} {:?}", dest, packet);
}

数据包构建

use crsf::{Packet, PacketAddress, RcChannels};

let channels: [u16; 16] = [0xffff; 16];
let packet = Packet::RcChannels(RcChannels(channels));
let raw_packet = packet.into_raw(PacketAddress::Transmitter);
println!("{:?}", raw_packet.data());

依赖

~0.5–1MB
~23K SLoC