ads1263/register/
bitfield.rs1use crate::register::register::Register;
2
3pub trait BitField: Into<u8> + Copy {
4 fn start(&self) -> u8;
5 fn end(&self) -> u8;
6 fn register(&self) -> Register;
7 fn len(&self) -> u8 {
8 self.end() - self.start() + 1
9 }
10 fn mask(&self) -> u8 {
11 (((1 << (self.len())) - 1) as u8) << self.start()
12 }
13}
14
15#[macro_export]
16macro_rules! impl_bitfield {
17 ($t:ty, $start:expr, $end:expr, $register:expr) => {
18 impl BitField for $t {
19 fn start(&self) -> u8 {
20 $start
21 }
22 fn end(&self) -> u8 {
23 $end
24 }
25 fn register(&self) -> Register {
26 $register
27 }
28 }
29
30 impl From<$t> for u8 {
31 fn from(a: $t) -> u8 {
32 a as u8
33 }
34 }
35 };
36}