1#![deny(missing_docs)]
6#![deny(warnings)]
7#![no_std]
8#![forbid(unsafe_code)]
9#![cfg_attr(docsrs, feature(doc_cfg))]
11
12pub mod prelude {
14 pub use crate::{Register, WritableRegister};
15 pub use hardware_registers::i2c::*;
16 pub use hardware_registers::register_address::{RegisterAddress6, RegisterAddress8};
17 pub use hardware_registers::sizes::R1;
18 pub use hardware_registers::spi::*;
19 pub use hardware_registers::{FromBits, HardwareRegister, ToBits, WritableHardwareRegister};
20}
21
22macro_rules! readable_register {
23 ($type:ident, $addr:expr) => {
24 impl $crate::Register for $type {}
25 impl $crate::prelude::HardwareRegister<$crate::prelude::R1> for $type {}
26
27 impl
28 $crate::prelude::I2CRegister<
29 $crate::prelude::DeviceAddress7,
30 $crate::prelude::RegisterAddress8,
31 $crate::prelude::R1,
32 > for $type
33 {
34 type Backing = u8;
35
36 const DEFAULT_DEVICE_ADDRESS: $crate::prelude::DeviceAddress7 =
37 $crate::prelude::DeviceAddress7::new(DEFAULT_DEVICE_ADDRESS);
38 const REGISTER_ADDRESS: $crate::prelude::RegisterAddress8 =
39 $crate::prelude::RegisterAddress8::new(($addr).addr());
40 }
41
42 impl $crate::prelude::SPIRegister<$crate::prelude::RegisterAddress6, $crate::prelude::R1>
43 for $type
44 {
45 type Backing = u8;
46
47 const REGISTER_ADDRESS: $crate::prelude::RegisterAddress6 =
48 $crate::prelude::RegisterAddress6::new(($addr).addr());
49 }
50
51 impl $crate::prelude::ToBits for $type {
52 type Target = u8;
53
54 #[inline]
55 fn to_bits(&self) -> Self::Target {
56 (*self).into()
57 }
58 }
59
60 impl $crate::prelude::FromBits<u8> for $type {
61 #[inline]
62 fn from_bits(value: u8) -> Self {
63 value.into()
64 }
65
66 fn from_bits_ref(value: &u8) -> Self {
67 (*value).into()
68 }
69 }
70 };
71}
72
73macro_rules! writable_register {
74 ($type:ident, $addr:expr) => {
75 readable_register!($type, $addr);
76 impl $crate::prelude::WritableHardwareRegister<$crate::prelude::R1> for $type {}
77 impl $crate::WritableRegister for $type {}
78 };
79}
80
81mod conversions;
82mod gyro;
83mod types;
84
85pub use gyro::*;
86pub use types::*;
87
88pub trait Register: prelude::I2CRegister8<prelude::DeviceAddress7> + From<u8> + Into<u8> {}
90
91pub trait WritableRegister:
93 prelude::WritableI2CRegister8<prelude::DeviceAddress7> + Register
94{
95}