device-driver-macros 0.5.0

Proc macro implementation for the `device-driver` crate
Documentation

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

A toolkit to write better device drivers, faster.

This crate is a set of traits to represent devices and registers. You can make use of macros to implement the registers in a convenient way.

With quite some ease you can give users a blocking and an async interface to the device.

Currently you've got these options:

  • Macro using rust-like syntax: example
  • Generating from external json file: example
  • Generating from external yaml file: example

Feedback and feature requests are appreciated! Just open an issue on github. I want to add more features to this crate, but only once I (or maybe you) need them.

Still wanted:

  • Add ability to read multiple registers in one go
  • CLI to generate implementation once (better compile times for driver users)

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Changelog

0.5.0 (07-01-24)

  • Breaking: Built up the crate from the ground up again. Now more dependent on the type-system and all macros are proc-macros. This makes it a whole lot more maintainable and expandable.
  • New register trait
  • New device trait
  • Almost all old features still supported

0.4.1 (13-12-22)

  • Accidentally left the async flag on by default for 0.4.0 which caused it not to compile on stable.

0.4.0 (13-12-22) (yanked)

  • Added async support for the register interfaces. Use the async feature flag to activate it. When you do, you will have access to the ll::register_async module that will generate async code for you.
  • Updated dependencies (mainly bitvec to 1.0, which makes this release a technically breaking change)

0.3.1 (22-12-21)

  • Added docs to low level error (#14)

0.3.0 (02-05-21)

  • Added better Debug impls to all register R that prints the raw value in hex. There's now also the option (#[generate(Debug)]) to get an even better Debug impl that also prints out all the fields, but does require all fields to impl Debug themselves. See (#10) to see how it works.

0.2.0 (19-04-21)

  • All user interaction with a 'W' is now through &mut instead of directly to support more kinds of code structuring (#7)