rsiot/drivers_i2c/
i2c_devices.rs

1use std::time::Duration;
2
3use crate::message::{Message, MsgDataBound};
4
5use super::{general, I2cSlaveAddress};
6
7/// Конфигурации устройств по шине I2C
8#[allow(non_camel_case_types)]
9#[derive(Clone)]
10pub enum I2cDevices<TMsg>
11where
12    TMsg: MsgDataBound,
13{
14    /// Общее устройство
15    General(general::Config<TMsg>),
16
17    /// Аналого-цифровой преобразователь
18    ADS1115 {
19        /// Адрес. Зависит от подключения входа ADDR:
20        /// - GND - 0x48
21        /// - VDD - 0x49
22        /// - SDA - 0x4A
23        /// - SCL - 0x4B
24        address: I2cSlaveAddress,
25
26        /// Настройка входов
27        inputs: Vec<super::ads1115::config::InputConfig<TMsg>>,
28    },
29
30    /// Датчик давления BMP180
31    BMP180 {
32        /// Адрес. По-умолчанию 0x77
33        address: I2cSlaveAddress,
34        /// Функция преобразования данных в исходящие сообщения
35        fn_output: fn(super::bmp180::BMP180Data) -> Vec<Message<TMsg>>,
36        /// Кол-во измерений для определения значения
37        oversampling: super::bmp180::BMP180Oversampling,
38    },
39
40    /// Часы реального времени DS3231
41    DS3231 {
42        /// Адрес. По-умолчанию 0x68
43        address: I2cSlaveAddress,
44        /// Функция преобразования входящих сообщений в данные для записи в модуль
45        fn_input: fn(Message<TMsg>) -> Option<super::ds3231::InputData>,
46        /// Функция преобразования данных с модуля в исходящие сообщения
47        fn_output: fn(super::ds3231::OutputData) -> Option<Vec<Message<TMsg>>>,
48        /// Период чтения данных с часов
49        fn_output_period: Duration,
50    },
51
52    /// Расширение GPIO PCA9555
53    PCA9555 {
54        /// Адрес. По-умолчанию 0x20
55        address: I2cSlaveAddress,
56    },
57
58    /// Расширение GPIO PCF8575
59    PCF8575 {
60        /// Адрес
61        address: I2cSlaveAddress,
62        /// Настройка пина P00
63        pin_00: super::PCF8575PinMode<TMsg>,
64        /// Настройка пина P01
65        pin_01: super::PCF8575PinMode<TMsg>,
66        /// Настройка пина P02
67        pin_02: super::PCF8575PinMode<TMsg>,
68        /// Настройка пина P03
69        pin_03: super::PCF8575PinMode<TMsg>,
70        /// Настройка пина P04
71        pin_04: super::PCF8575PinMode<TMsg>,
72        /// Настройка пина P05
73        pin_05: super::PCF8575PinMode<TMsg>,
74        /// Настройка пина P06
75        pin_06: super::PCF8575PinMode<TMsg>,
76        /// Настройка пина P07
77        pin_07: super::PCF8575PinMode<TMsg>,
78        /// Настройка пина P10
79        pin_10: super::PCF8575PinMode<TMsg>,
80        /// Настройка пина P11
81        pin_11: super::PCF8575PinMode<TMsg>,
82        /// Настройка пина P12
83        pin_12: super::PCF8575PinMode<TMsg>,
84        /// Настройка пина P13
85        pin_13: super::PCF8575PinMode<TMsg>,
86        /// Настройка пина P14
87        pin_14: super::PCF8575PinMode<TMsg>,
88        /// Настройка пина P15
89        pin_15: super::PCF8575PinMode<TMsg>,
90        /// Настройка пина P16
91        pin_16: super::PCF8575PinMode<TMsg>,
92        /// Настройка пина P17
93        pin_17: super::PCF8575PinMode<TMsg>,
94    },
95
96    /// Коммуникация с модулем PM-DI16
97    PM_DI16(super::pm_di16::Config<TMsg>),
98
99    /// Коммуникация с модулем PM-RQ8
100    PM_RQ8(super::pm_rq8::Config<TMsg>),
101
102    /// Коммуникация с LED-экраном
103    SSD1306 {},
104}