rsiot/drivers_i2c/pm_rq8/
config.rsuse std::sync::Arc;
use tokio::sync::Mutex;
use crate::{
drivers_i2c::I2cSlaveAddress,
message::{Message, MsgDataBound},
};
pub type FnInput<TMsg> = fn(&Message<TMsg>, &mut Buffer) -> ();
#[derive(Clone)]
pub struct Config<TMsg>
where
TMsg: MsgDataBound,
{
pub address: I2cSlaveAddress,
pub fn_input: FnInput<TMsg>,
}
#[derive(Clone, Debug, Default, PartialEq)]
pub struct Buffer {
pub output_0: bool,
pub output_1: bool,
pub output_2: bool,
pub output_3: bool,
pub output_4: bool,
pub output_5: bool,
pub output_6: bool,
pub output_7: bool,
}
impl From<Buffer> for u8 {
fn from(value: Buffer) -> Self {
let mut sum = 0;
if value.output_0 {
sum += 2_u8.pow(0);
}
if value.output_1 {
sum += 2_u8.pow(1);
}
if value.output_2 {
sum += 2_u8.pow(2);
}
if value.output_3 {
sum += 2_u8.pow(3);
}
if value.output_4 {
sum += 2_u8.pow(4);
}
if value.output_5 {
sum += 2_u8.pow(5);
}
if value.output_6 {
sum += 2_u8.pow(6);
}
if value.output_7 {
sum += 2_u8.pow(7);
}
sum
}
}
impl From<Buffer> for Arc<Mutex<Buffer>> {
fn from(value: Buffer) -> Self {
Arc::new(Mutex::new(value))
}
}