#transceiver #driver #ezurio #laird #aerocomm

no-std ac4490

Rust版本的Ezurio / Laird / Aerocomm AC4490收发器驱动程序

5个不稳定版本

0.3.0 2024年8月18日
0.2.2 2024年8月18日
0.2.1 2024年8月18日
0.2.0 2024年8月18日
0.1.0 2024年8月18日

#3 in #transceiver

Download history

每月 78 次下载

MIT 许可证

99KB
1K SLoC

ac4490-rs

这是一个为Ezurio(以前是Laird,以前是Aerocomm)的AC4490收发器编写的驱动程序。驱动程序是接口无关的,因此可以与嵌入式或桌面应用程序一起使用。

在此处查看文档 https://docs.rs/ac4490.

快速入门

对于使用 embassy_stm32::usart::Uart 的设备

struct MyDeviceInterface(Uart<'static, embassy_stm32::mode::Async>);

impl DeviceInterface for MyDeviceInterface {
    async fn write(&mut self, data: &[u8]) -> Result<(), ac4490::Error> {
        self.0.write(data).await.map_err(|_| ac4490::Error::WriteError)
    }

    async fn read(&mut self, data: &mut [u8]) -> Result<(), ac4490::Error> {
        self.0.read(data).await.map_err(|_| ac4490::Error::ReadError)
    }
}

// ...

    let usart6 = usart::Uart::new(
        p.USART6,
        p.PC7,
        p.PC6,
        Irqs,
        p.GPDMA1_CH0,
        p.GPDMA1_CH1,
        uart_config,
    )
    .expect("Failed to initialize USART6");

    // Init AC4490
    let mut ac4490 = AC4490::new(
        Ac4490UartInterface(usart6)
    );

对于使用 serialport::SerialPort 的设备

use ac4490::DeviceInterface;
use serialport::SerialPort;

struct SerialPortDeviceInterface(Box<dyn serialport::SerialPort>);

impl DeviceInterface for SerialPortDeviceInterface {
    async fn write(&mut self, data: &[u8]) -> std::result::Result<(), ac4490::Error> {
        self.0.write_all(data).map_err(|_| ac4490::Error::WriteError)?;
        Ok(())
    }

    async fn read(&mut self, buf: &mut [u8]) -> std::result::Result<(), ac4490::Error> {
        self.0.read(buf).map_err(|_| ac4490::Error::ReadError)?;
        Ok(())
    }
}

async fn main() -> Result<()> {
    let port = serialport::new("/dev/ttyUSB0", 9600).open()?;
    let mut transceiver = AC4490::new(SerialPortDeviceInterface(port));
    Ok(())
} 

依赖项

~0.5–1MB
~22K SLoC