rsiot/components/cmp_linux_spi_master/
config.rs1use linux_embedded_hal::spidev::SpiModeFlags;
2
3use crate::{
4 components_config::{
5 master_device::DeviceTrait,
6 spi_master::{self, ConfigDeviceSpiMode},
7 },
8 message::MsgDataBound,
9};
10
11pub struct Config<TMsg>
13where
14 TMsg: MsgDataBound,
15{
16 pub devices_comm_settings: Vec<ConfigDevicesCommSettings>,
20
21 pub devices:
23 Vec<Box<dyn DeviceTrait<TMsg, spi_master::FieldbusRequest, spi_master::FieldbusResponse>>>,
24}
25
26pub struct ConfigDevicesCommSettings {
28 pub linux_device: LinuxDevice,
30
31 pub baudrate: u32,
33
34 pub spi_mode: ConfigDeviceSpiMode,
36}
37
38pub enum LinuxDevice {
40 Spi {
42 dev_spi: String,
44 },
45 SpiWithCs {
47 dev_spi: String,
49 dev_gpio: String,
51 gpio_line: u8,
53 },
54}
55
56impl From<ConfigDeviceSpiMode> for SpiModeFlags {
57 fn from(value: ConfigDeviceSpiMode) -> Self {
58 match value {
59 ConfigDeviceSpiMode::Mode0 => SpiModeFlags::SPI_MODE_0,
60 ConfigDeviceSpiMode::Mode1 => SpiModeFlags::SPI_MODE_1,
61 ConfigDeviceSpiMode::Mode2 => SpiModeFlags::SPI_MODE_2,
62 ConfigDeviceSpiMode::Mode3 => SpiModeFlags::SPI_MODE_3,
63 }
64 }
65}