#devices #driver #toolkit #no-std #yaml #json-file

no-std device-driver-macros

device-driver crate的进程宏实现

4个版本 (2个破坏性更新)

0.7.0 2024年8月22日
0.6.0 2024年5月26日
0.5.3 2024年1月8日
0.5.0 2024年1月7日

#29 in #device

Download history 167/week @ 2024-05-26 11/week @ 2024-06-02 4/week @ 2024-06-09 3/week @ 2024-06-16 8/week @ 2024-06-30 30/week @ 2024-07-28 133/week @ 2024-08-18

每月下载量163次
device-driver中使用

MIT/Apache

130KB
3K SLoC

Device driver toolkit #![no_std] crates.io Documentation

编写更好的设备驱动程序的工具包,更快速。

此crate包含一组特质,用于表示设备、寄存器和命令。您可以使用宏以方便的方式实现寄存器和命令。

您可以用相当简单的方式为用户提供阻塞和非阻塞的设备接口。

目前您有以下选项

欢迎反馈和功能请求!只需在github上提交一个问题。我想为这个crate添加更多功能,但前提是(或许是你)需要它们。

我意识到文档有些不足,但示例应该相当直观。对于使用此crate的实际驱动程序示例,您还可以查看:https://github.com/diondokter/s2lp

仍然需要

  • 添加一次读取多个寄存器的功能
  • CLI生成实现(为驱动程序用户提高编译时间)

注意:直到https://github.com/illicitonion/num_enum/pull/77合并,您需要在使用device-driver宏的crate中导入num_enum。这需要添加到Cargo.toml中。尝试从device-driver导入重新导出是不够的。

架构

此crate由三部分组成

  • 设备驱动程序:主要包,重新导出所需的一切。它定义了一组代表设备和寄存器的特质。设备特质由驱动程序包实现,以便系统了解如何读写寄存器。所有这些都通过寄存器特质完成,该特质包含有关寄存器的所有信息。可以手动实现寄存器和它们的字段,但此包提供了生成所有内容的非常实用的功能。
  • 设备驱动程序生成:这就像是后端。它定义了设备及其寄存器和字段的一种中间表示形式。从那里可以生成实现上述设备驱动程序特质的Rust代码。它还提供了针对各种类型的自定义serde反序列化例程,以便它们可以方便地表达。
  • 设备驱动程序宏:包含所有进程宏。一个宏接受定义文件的路径。然后使用serde将其反序列化到'生成'表示形式。另一个宏定义自定义Rust语法并将其转换为'生成'表示形式。然后两者都生成寄存器和它们的字段的实现。

语义版本

任何可能会破坏用户代码的东西都将导致破坏性的语义版本号升级。这包括宏格式和文件寄存器定义格式。

生成包被视为内部包,因此它们在语义版本号升级方面可能不会那么严格。这主要是为了使它们与主包的版本保持一致。

如果您直接依赖这些包,请告诉我!如果我知道它们有直接的用户,我将对版本更加严格。

许可证

根据您的选择,许可如下

贡献

除非您明确声明,否则任何有意提交以包含在您的工作中的贡献,根据Apache-2.0许可证的定义,将根据上述内容双许可,不附加任何其他条款或条件。

变更日志

未发布

0.7.0 (22-08-24)

  • 破坏性:改进了命令分发的API
  • 添加了缓冲区支持
  • 添加了严格模式转换。这使得类型需要From<原始类型>而不是TryFrom<原始类型>。但读取寄存器字段的结果不再是。
  • 向寄存器添加了字节序选项,以便它们可以以小端格式读取和存储。(当未指定时,默认为大端)
  • 向寄存器结构添加了BitAnd、BitOr和BitXor。它不像我希望的那样一致,但希望在下一个版本中修复。
  • 添加了对寄存器块的支持

0.6.0 (26-05-24)

  • 破坏性:将宏重命名,使其不包含单词'寄存器'
  • 添加了定义命令的方法

0.5.3 (08-01-24)

  • 改进了README,包括硬链接和更多说明
  • 现在还记录了生成的设备寄存器函数

0.5.2 (08-01-24)

  • 异步读取和修改现在与寄存器而不是它们的读取和写入类型一起工作

0.5.1 (08-01-24)

  • 删除了意外的依赖项,该依赖项强制使用std

0.5.0 (07-01-24)

  • 更新:从头开始重新构建了 crate。现在更多依赖于类型系统和所有宏都是 proc-macros。这使得它更容易维护和扩展。
  • 新的寄存器特征
  • 新的设备特征
  • 几乎所有旧功能仍然支持

0.4.1 (13-12-22)

  • 意外地将异步标志默认设置为 0.4.0,导致它无法在稳定版本上编译。

0.4.0 (13-12-22) (已撤销)

  • 为寄存器接口添加了异步支持。使用 async 功能标志来激活它。当这样做时,您将可以访问生成异步代码的 ll::register_async 模块。
  • 更新了依赖项(主要是将 bitvec 更新到 1.0,这使得这次发布在技术上是一个重大变更)

0.3.1 (22-12-21)

  • 为低级错误添加了文档(#14

0.3.0 (02-05-21)

  • 为所有寄存器 R 添加了更好的 Debug 实现,打印十六进制原始值。现在还有一个选项(#[generate(Debug)])来获取更好的 Debug 实现,它还会打印出所有字段,但要求所有字段都实现 Debug。请参阅(《a href="https://github.com/diondokter/device-driver/pull/10" rel="noopener ugc nofollow">#10)了解其工作原理。

0.2.0 (19-04-21)

  • 现在所有与 'W' 的用户交互都通过 &mut 进行,而不是直接,以支持更多类型的代码结构(#7

依赖关系

~2–3MB
~58K SLoC