Skip to main content

rsiot/components/cmp_esp_i2c_slave/
component.rs

1use std::fmt::Debug;
2
3use async_trait::async_trait;
4use esp_idf_svc::hal::i2c::I2c;
5use serde::{Serialize, de::DeserializeOwned};
6
7use crate::{
8    executor::{CmpResult, Component, IComponentProcess, MsgBusLinker},
9    message::MsgDataBound,
10};
11
12use super::{BufferData, config::Config, fn_process::fn_process};
13
14/// Название компонента
15pub const COMPONENT_NAME: &str = "cmp_esp_i2c_slave";
16
17#[cfg_attr(not(feature = "single-thread"), async_trait)]
18#[cfg_attr(feature = "single-thread", async_trait(?Send))]
19impl<TMsg, TI2c, TI2cRequest, TI2cResponse, TBufferData>
20    IComponentProcess<Config<TMsg, TI2c, TI2cRequest, TI2cResponse, TBufferData>, TMsg>
21    for Component<Config<TMsg, TI2c, TI2cRequest, TI2cResponse, TBufferData>, TMsg>
22where
23    TMsg: MsgDataBound + 'static,
24    TI2c: I2c + 'static,
25    TI2cRequest: Debug + DeserializeOwned + 'static,
26    TI2cResponse: Debug + Serialize + 'static,
27    TBufferData: BufferData + 'static,
28{
29    async fn process(
30        &self,
31        config: Config<TMsg, TI2c, TI2cRequest, TI2cResponse, TBufferData>,
32        msgbus_linker: MsgBusLinker<TMsg>,
33    ) -> CmpResult {
34        fn_process(config, msgbus_linker.init(COMPONENT_NAME)).await?;
35        Ok(())
36    }
37}
38
39/// Компонент cmp_esp_i2c_slave
40pub type Cmp<TMsg, TI2c, TI2cRequest, TI2cResponse, TBufferData> =
41    Component<Config<TMsg, TI2c, TI2cRequest, TI2cResponse, TBufferData>, TMsg>;