hardware_registers/
i2c.rs1mod device_address;
4
5pub use crate::i2c::device_address::{DeviceAddress, DeviceAddress10, DeviceAddress7};
6pub use crate::register_address::{RegisterAddress, RegisterAddress16, RegisterAddress8};
7use crate::sizes::{RegisterSizeInformation, R1, R2};
8use crate::{FromBits, HardwareRegister, ToBits, WritableHardwareRegister};
9
10pub trait I2CRegister<D, R, Size>:
12 HardwareRegister<Size> + ToBits<Target = Self::Backing> + FromBits<Self::Backing>
13where
14 D: DeviceAddress,
15 R: RegisterAddress,
16 Size: RegisterSizeInformation,
17{
18 const DEFAULT_DEVICE_ADDRESS: D;
20
21 const REGISTER_ADDRESS: R;
23
24 type Backing;
26}
27
28pub trait WritableI2CRegister<D, R, Size>:
30 I2CRegister<D, R, Size> + WritableHardwareRegister<Size>
31where
32 D: DeviceAddress,
33 R: RegisterAddress,
34 Size: RegisterSizeInformation,
35{
36}
37
38impl<I, D, R, Size> WritableI2CRegister<D, R, Size> for I
40where
41 I: I2CRegister<D, R, Size> + WritableHardwareRegister<Size>,
42 D: DeviceAddress,
43 R: RegisterAddress,
44 Size: RegisterSizeInformation,
45{
46}
47
48pub trait I2CRegister8<D>:
50 I2CRegister<D, RegisterAddress8, R1, Backing = u8>
51 + HardwareRegister<R1>
52 + Copy
53 + Clone
54 + ToBits<Target = u8>
55 + FromBits<u8>
56where
57 D: DeviceAddress,
58{
59}
60
61pub trait WritableI2CRegister8<D>:
63 WritableI2CRegister<D, RegisterAddress8, R1> + WritableHardwareRegister<R1> + Copy + Clone
64where
65 D: DeviceAddress,
66{
67}
68
69pub trait I2CRegister16<D>:
71 I2CRegister<D, RegisterAddress16, R2> + HardwareRegister<R2> + Copy + Clone
72where
73 D: DeviceAddress,
74{
75}
76
77pub trait WritableI2CRegister16<D>:
79 WritableI2CRegister<D, RegisterAddress16, R2> + WritableHardwareRegister<R2> + Copy + Clone
80where
81 D: DeviceAddress,
82{
83}
84
85impl<I, D> I2CRegister8<D> for I
87where
88 I: I2CRegister<D, RegisterAddress8, R1, Backing = u8>
89 + HardwareRegister<R1>
90 + Copy
91 + Clone
92 + ToBits<Target = u8>
93 + FromBits<u8>,
94 D: DeviceAddress,
95{
96}
97
98impl<I, D> WritableI2CRegister8<D> for I
100where
101 I: WritableI2CRegister<D, RegisterAddress8, R1> + WritableHardwareRegister<R1> + Copy + Clone,
102 D: DeviceAddress,
103{
104}
105
106impl<I, D> I2CRegister16<D> for I
108where
109 I: I2CRegister<D, RegisterAddress16, R2> + HardwareRegister<R2> + Copy + Clone,
110 D: DeviceAddress,
111{
112}
113
114impl<I, D> WritableI2CRegister16<D> for I
116where
117 I: WritableI2CRegister<D, RegisterAddress16, R2> + WritableHardwareRegister<R2> + Copy + Clone,
118 D: DeviceAddress,
119{
120}