rsiot/drivers_i2c/pm_rq8/
config.rs1use std::sync::Arc;
2
3use tokio::sync::Mutex;
4
5use crate::{
6 drivers_i2c::I2cSlaveAddress,
7 message::{Message, MsgDataBound},
8};
9
10pub type FnInput<TMsg> = fn(&Message<TMsg>, &mut Buffer) -> ();
11
12#[derive(Clone)]
14pub struct Config<TMsg>
15where
16 TMsg: MsgDataBound,
17{
18 pub address: I2cSlaveAddress,
20 pub fn_input: FnInput<TMsg>,
22}
23
24#[derive(Clone, Debug, Default, PartialEq)]
26pub struct Buffer {
27 pub output_0: bool,
29 pub output_1: bool,
31 pub output_2: bool,
33 pub output_3: bool,
35 pub output_4: bool,
37 pub output_5: bool,
39 pub output_6: bool,
41 pub output_7: bool,
43}
44
45impl From<Buffer> for u8 {
46 fn from(value: Buffer) -> Self {
47 let mut sum = 0;
48 if value.output_0 {
49 sum += 2_u8.pow(0);
50 }
51 if value.output_1 {
52 sum += 2_u8.pow(1);
53 }
54 if value.output_2 {
55 sum += 2_u8.pow(2);
56 }
57 if value.output_3 {
58 sum += 2_u8.pow(3);
59 }
60 if value.output_4 {
61 sum += 2_u8.pow(4);
62 }
63 if value.output_5 {
64 sum += 2_u8.pow(5);
65 }
66 if value.output_6 {
67 sum += 2_u8.pow(6);
68 }
69 if value.output_7 {
70 sum += 2_u8.pow(7);
71 }
72 sum
73 }
74}
75
76impl From<Buffer> for Arc<Mutex<Buffer>> {
77 fn from(value: Buffer) -> Self {
78 Arc::new(Mutex::new(value))
79 }
80}