#queue #mode #lockless #output #parse #rvc #bno08x

no-std bno08x-rvc

一个用于解析bno08x-sensor (bno080, bno085, bno086) 在RVC模式下输出的小型库。基于无锁队列。

2个版本

0.1.2 2021年11月19日
0.1.1 2021年11月15日
0.1.0 2021年11月11日

#1164 in 嵌入式开发

每月24次下载

MIT/Apache

28KB
631 代码行

bno08x-rvc

一个小型库,用于解析BNO08x传感器(BNO080/85/86)在RVC模式下的输出。

基于无锁队列: [bbqueue].

BNO08x传感器UART-RVC模式的资料: [资料]

NUCLEO-L476RG示例: [代码] / [资料]

示例用法

use bbqueue::BBBuffer;
use bno08x_rvc;
use std::borrow::Borrow;

static BB: BBBuffer<{ bno08x_rvc::BUFFER_SIZE }> = BBBuffer::new();

fn main() -> std::io::Result<()> {
    let test_data: Vec<u8> = vec![
        0x34, 0x45, 0x32, 0xAA, 0xAA, 0xDE, 0x01, 0x00, 0x92, 0xFF, 0x25, 0x08, 0x8D, 0xFE, 0xEC,
        0xFF, 0xD1, 0x03, 0x00, 0x00, 0x00, 0xE7, 0xFF, 0xBB, 0xAA,
    ];

    let (mut proc, mut parser) = match bno08x_rvc::create(BB.borrow()) {
        Ok((proc, pars)) => (proc, pars),
        Err(e) => {
            println!("Can't create bno08x-rvc : {:?}", e);
            return Ok(());
        }
    };

    proc.process_slice(test_data.as_slice()).unwrap();

    println!("Get last raw frame: {:?}", parser.get_last_raw_frame());

    match parser.worker(|frame| {
        println!("Worker Frame: {:?}", frame);
    }) {
        Ok(_) => {}
        Err(e) => {
            println!("Worker error: {:?}", e)
        }
    }

    println!("Get last raw frame: {:?}", parser.get_last_raw_frame());
    
    println!(
        "Get last pretty frame: {:?}", parser.get_last_raw_frame().unwrap().as_pretty_frame()
    );
    
    Ok(())
}

依赖项

~0.6–1.2MB
~28K SLoC