rsiot/components/cmp_esp_i2c_slave/
config.rs1use std::fmt::Debug;
2use std::time::Duration;
3
4use esp_idf_svc::hal::{gpio::AnyIOPin, i2c::I2c, peripheral::Peripheral};
5use serde::{de::DeserializeOwned, Serialize};
6
7use crate::message::{Message, MsgDataBound};
8
9use super::BufferData;
10
11pub type FnInput<TMsg, TBufferData> = fn(&Message<TMsg>, &mut TBufferData);
13
14pub type FnOutput<TMsg, TBufferData> = fn(&TBufferData) -> Vec<Message<TMsg>>;
16
17pub type FnI2cComm<TI2cRequest, TI2cResponse, TBufferData> =
19 fn(TI2cRequest, &mut TBufferData) -> anyhow::Result<TI2cResponse>;
20
21pub struct Config<TMsg, TI2c, TPeripheral, TI2cRequest, TI2cResponse, TBufferData>
23where
24 TMsg: MsgDataBound,
25 TI2c: Peripheral<P = TPeripheral> + 'static,
26 TPeripheral: I2c,
27 TI2cRequest: Debug + DeserializeOwned + 'static,
28 TI2cResponse: Debug + Serialize + 'static,
29 TBufferData: BufferData,
30{
31 pub i2c: TI2c,
33
34 pub sda: AnyIOPin,
36
37 pub scl: AnyIOPin,
39
40 pub slave_address: u8,
42
43 pub fn_input: FnInput<TMsg, TBufferData>,
51
52 pub fn_output: FnOutput<TMsg, TBufferData>,
62
63 pub fn_output_period: Duration,
65
66 pub fn_i2c_comm: FnI2cComm<TI2cRequest, TI2cResponse, TBufferData>,
68
69 pub buffer_data_default: TBufferData,
71
72 pub start_i2ccomm_delay: Duration,
75}