ads1263/register/
bitfield.rs

1use 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}