rsiot/components/cmp_esp_spi_master/
config.rs1use esp_idf_svc::hal::gpio::AnyIOPin;
2use esp_idf_svc::hal::spi::config::{MODE_0, MODE_1, MODE_2, MODE_3};
3use esp_idf_svc::hal::{peripheral::Peripheral, spi::Spi};
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, TPeripheral>
11where
12 TMsg: MsgDataBound,
13 TSpi: Peripheral<P = TPeripheral> + 'static,
14 TPeripheral: Spi,
15{
16 pub spi: TSpi,
18
19 pub pin_miso: AnyIOPin,
21
22 pub pin_mosi: AnyIOPin,
24
25 pub pin_sck: AnyIOPin,
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}
37
38pub struct ConfigDevicesCommSettings {
40 pub pin_cs: AnyIOPin,
42
43 pub baudrate: u32,
45
46 pub spi_mode: ConfigDeviceSpiMode,
48}
49
50impl From<ConfigDeviceSpiMode> for esp_idf_svc::hal::spi::config::Mode {
51 fn from(value: ConfigDeviceSpiMode) -> Self {
52 match value {
53 ConfigDeviceSpiMode::Mode0 => MODE_0,
54 ConfigDeviceSpiMode::Mode1 => MODE_1,
55 ConfigDeviceSpiMode::Mode2 => MODE_2,
56 ConfigDeviceSpiMode::Mode3 => MODE_3,
57 }
58 }
59}