5个版本
0.1.4 | 2024年2月12日 |
---|---|
0.1.3 | 2024年2月12日 |
0.1.2 | 2024年2月12日 |
0.1.1 | 2024年1月29日 |
0.1.0 | 2024年1月29日 |
#446 in 嵌入式开发
每月45次下载
25KB
346 行
该crate提供了一些实用类型,用于编写与基于寄存器的设备接口的抽象。通常,这将在编写嵌入式环境中的外部外设驱动程序时使用。因此,提供了一些用于在I2C或SPI总线上读取和写入设备寄存器的外部实用函数。
该crate提供了一种名为 Register
的单一特质,用于实现所有表示存储在可寻址寄存器中的值的类型。该特质仅提供了一种方法来检索与给定寄存器关联的ID。
可读寄存器
可以从中检索或读取值的寄存器表示为任何实现了 ReadableRegister
特质的类型。这个特质几乎只是一个标记特质,但它表示了一个既是 Register
又可以通过 FromByteArray
特质从字节数组创建的类型。编写可从寄存器读取的类型的大部分工作将在于实现 FromByteArray
特质。
实现了 ReadableRegister
特质的类型可以与提供的实用方法一起使用,例如 i2c
或 spi
模块提供的那些。
寄存器实现示例
use regiface::{Register, ReadableRegister, FromByteArray};
// A type we will use to represent some fictional register struct
MyRegister {
value: u8
}
// Implement the Register trait, and specify it has an ID of 42u8
impl Register for MyRegister {
type IdType = u8;
fn id() -> Self::IdType {
42
}
}
// Implement the FromByteArray trait, and specify it can be converted from a 1-byte array
impl FromByteArray for MyRegister {
type Error = core::convert::Infallible;
type Array = [u8; 1];
fn from_bytes(bytes: Self::Array) -> Result<Self, Self::Error> {
Ok(Self {
value: bytes[0]
})
}
}
// Indicate this is a readable register!
impl ReadableRegister for MyRegister {}
可写寄存器
可以写入值的寄存器表示为任何实现了 WritableRegister
特质的类型。这个特质几乎只是一个标记特质,但它表示了一个既是 Register
又可以通过 ToByteArray
特质序列化为字节数组的类型。编写可写入寄存器的类型的大部分工作将在于实现 ToByteArray
特质。
实现了 WritableRegister
特质的类型可以与提供的实用方法一起使用,例如 i2c
或 spi
模块提供的那些。
寄存器实现示例
use regiface::{Register, WritableRegister, ToByteArray};
// A type we will use to represent some fictional register
struct MyRegister {
value: u8
}
// Implement the Register trait, and specify it has an ID of 42u8
impl Register for MyRegister {
type IdType = u8;
fn id() -> Self::IdType {
42
}
}
// Implement the ToByteArray trait, and specify it can be converted to a 1-byte array
impl ToByteArray for MyRegister {
type Error = core::convert::Infallible;
type Array = [u8; 1];
fn to_bytes(self) -> Result<Self::Array, Self::Error> {
Ok([self.value])
}
}
// Indicate this is a readable register!
impl WritableRegister for MyRegister {}
依赖关系
~0.4–1MB
~24K SLoC