2个版本
0.1.1 | 2022年7月17日 |
---|---|
0.1.0 | 2022年7月17日 |
#895 in 嵌入式开发
30KB
480 代码行
dfr0299
Rust对DFR0299 MP3播放器模块的串行协议实现
此crate提供了对DFR02999 MP3播放器模块支持的命令的零分配、无std兼容的序列化和反序列化。
模块通信通过9600-8-N-1的UART进行。
示例
提供了两个示例:一个使用mio_serial
,另一个用于RP2040
cargo run --package serial_port
cargo run --release --package pico --target thumbv6m-none-eabi
将命令序列化到缓冲区
use dfr0299::{Command};
let mut buf = [0u8; 10];
Command::Reset.serialise(&mut buf)?;
// do something with the buffer, e.g. write to a uart peripheral
Command::Track(1).serialise(&mut buf)?;
// send the buffer, e.g.
// uart.write_full_blocking(&buf)?;
解析响应消息
use dfr0299::{Parser, ParseResult};
fn process<R: std::io::Read>(mut uart: R) ->
Result<(), Box<dyn std::error::Error>> {
let mut parser = Parser::new();
let mut buf = [0u8; 1];
loop {
uart.read_exact(&mut buf)?;
match parser.process_byte(buf[0]) {
Ok(ParseResult::Incomplete) => {}
Ok(ParseResult::Complete(msg)) => {
println!("Message received: {msg:?}");
}
Err(e) => {
println!("Parse error: {e}");
}
}
}
}
注意,数据表中序列化的示例消息校验和错误。校验和算法在数据表中没有描述,但在官方Arduino库代码中有
许可证
此crate根据Mozilla Public License Version 2.0的条款进行分发。
依赖项
~1.5MB
~36K SLoC