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}