| Crates.io | smartaudio |
| lib.rs | smartaudio |
| version | 0.2.1 |
| created_at | 2025-10-22 22:05:00.806621+00 |
| updated_at | 2025-11-07 00:59:09.187925+00 |
| description | A `no_std` Rust library for parsing the TBS smartaudio protocol |
| homepage | https://github.com/jettify/smartaudio |
| repository | https://github.com/jettify/smartaudio |
| max_upload_size | |
| id | 1896322 |
| size | 62,654 |
This is a no_std platform-agnostic implementation of the TBS SmartAudio protocol in Rust.
no_std, does not use the standard library or an allocator.SmartAudio protocols 1.0, 2.0 and 2.1.Here is a basic example of how to parse buffer using iterator:
use smartaudio::SmartAudioParser;
fn main() {
let raw: [u8; 72] = [
0xAA, 0x55, 0x01, 0x06, 0x00, 0x00, 0x01, 0x16, 0xE9, 0x4D, // frame0
0xAA, 0x55, 0x09, 0x06, 0x01, 0x00, 0x1A, 0x16, 0xE9, 0x0A, // frome1
0xAA, 0x55, 0x11, 0x0C, 0x00, 0x00, 0x00, 0x16, 0xE9, 0x0E, 0x03, 0x00, 0x0E, 0x14, 0x1A,
0x01, // frame2
0xAA, 0x55, 0x02, 0x03, 0x00, 0x01, 0x0F, // frame3
0xAA, 0x55, 0x02, 0x03, 0x0E, 0x01, 0x6D, // frame4
0xAA, 0x55, 0x03, 0x03, 0x00, 0x01, 0x4A, // frame5
0xAA, 0x55, 0x04, 0x04, 0x16, 0xE9, 0x01, 0xF8, // frame6
0xAA, 0x55, 0x05, 0x03, 0x0A, 0x01, 0x4F, // frame7
];
println!("Parssing frame from buffer using iterator:");
let mut parser = SmartAudioParser::new();
for frame in parser.iter_responses(&raw[..]) {
println!("{:#?}", frame.unwrap())
}
}
Here is a basic example feeding data stream one byte at time:
use smartaudio::Response;
use smartaudio::SmartAudioParser;
fn main() {
let mut parser = SmartAudioParser::new();
let raw_settings_v20: [u8; 10] = [
0xAA, 0x55, // Headers
0x09, // Version/Command
0x06, // Length
0x01, // Channel
0x00, // Power Level
0x1A, // Operation/Mode
0x16, 0xE9, // Current Frequency 5865
0x0A, // CRC8
];
println!("Parssing raw packet:");
for b in &raw_settings_v20[0..raw_settings_v20.len()] {
let reult = parser.push_byte(*b);
match reult {
Ok(Some(Response::GetSettings(settings))) => {
println!("{:#?}", settings);
println!("\n");
println!("Version: {:?}", settings.version);
println!("Channel: {:?}", settings.channel);
println!("Power Level: {:?}", settings.power_level);
println!("Unlocked: {:?}", settings.unlocked);
}
Err(e) => eprintln!("Error parsing packet: {:?}", e),
_ => (),
}
}
}
Add smartaudio to your Cargo.toml:
[dependencies]
smartaudio = "*" # replace * by the latest version of the crate.
Or use the command line:
cargo add smartaudio
This project is licensed under the Apache 2.0. See the LICENSE file for details.