rsiot/components/cmp_esp_spi_master/
config.rs1use esp_idf_svc::hal::gpio::AnyIOPin;
2use esp_idf_svc::hal::spi::Spi;
3use esp_idf_svc::hal::spi::config::{MODE_0, MODE_1, MODE_2, MODE_3};
4
5use crate::components_config::master_device::DeviceTrait;
6use crate::components_config::spi_master::{self, ConfigDeviceSpiMode};
7use crate::message::MsgDataBound;
8
9pub struct Config<TMsg, TSpi>
12where
13 TMsg: MsgDataBound,
14 TSpi: Spi + 'static,
15{
16 pub spi: TSpi,
18
19 pub pin_miso: AnyIOPin<'static>,
21
22 pub pin_mosi: AnyIOPin<'static>,
24
25 pub pin_sck: AnyIOPin<'static>,
27
28 pub devices_comm_settings: Vec<ConfigDevicesCommSettings>,
32
33 pub devices:
35 Vec<Box<dyn DeviceTrait<TMsg, spi_master::FieldbusRequest, spi_master::FieldbusResponse>>>,
36}
37pub struct ConfigDevicesCommSettings {
42 pub pin_cs: AnyIOPin<'static>,
44
45 pub baudrate: u32,
47
48 pub spi_mode: ConfigDeviceSpiMode,
50}
51impl From<ConfigDeviceSpiMode> for esp_idf_svc::hal::spi::config::Mode {
54 fn from(value: ConfigDeviceSpiMode) -> Self {
55 match value {
56 ConfigDeviceSpiMode::Mode0 => MODE_0,
57 ConfigDeviceSpiMode::Mode1 => MODE_1,
58 ConfigDeviceSpiMode::Mode2 => MODE_2,
59 ConfigDeviceSpiMode::Mode3 => MODE_3,
60 }
61 }
62}