rsiot/drivers_i2c/
i2c_devices.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
use std::time::Duration;

use crate::message::{Message, MsgDataBound};

use super::{general, I2cSlaveAddress};

/// Конфигурации устройств по шине I2C
#[allow(non_camel_case_types)]
#[derive(Clone)]
pub enum I2cDevices<TMsg>
where
    TMsg: MsgDataBound,
{
    /// Общее устройство
    General(general::Config<TMsg>),

    /// Аналого-цифровой преобразователь
    ADS1115 {
        /// Адрес. Зависит от подключения входа ADDR:
        /// - GND - 0x48
        /// - VDD - 0x49
        /// - SDA - 0x4A
        /// - SCL - 0x4B
        address: I2cSlaveAddress,

        /// Настройка входов
        inputs: Vec<super::ads1115::config::InputConfig<TMsg>>,
    },

    /// Датчик давления BMP180
    BMP180 {
        /// Адрес. По-умолчанию 0x77
        address: I2cSlaveAddress,
        /// Функция преобразования данных в исходящие сообщения
        fn_output: fn(super::bmp180::BMP180Data) -> Vec<Message<TMsg>>,
        /// Кол-во измерений для определения значения
        oversampling: super::bmp180::BMP180Oversampling,
    },

    /// Часы реального времени DS3231
    DS3231 {
        /// Адрес. По-умолчанию 0x68
        address: I2cSlaveAddress,
        /// Функция преобразования входящих сообщений в данные для записи в модуль
        fn_input: fn(Message<TMsg>) -> Option<super::ds3231::InputData>,
        /// Функция преобразования данных с модуля в исходящие сообщения
        fn_output: fn(super::ds3231::OutputData) -> Option<Vec<Message<TMsg>>>,
        /// Период чтения данных с часов
        fn_output_period: Duration,
    },

    /// Расширение GPIO PCA9555
    PCA9555 {
        /// Адрес. По-умолчанию 0x20
        address: I2cSlaveAddress,
    },

    /// Расширение GPIO PCF8575
    PCF8575 {
        /// Адрес
        address: I2cSlaveAddress,
        /// Настройка пина P00
        pin_00: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P01
        pin_01: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P02
        pin_02: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P03
        pin_03: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P04
        pin_04: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P05
        pin_05: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P06
        pin_06: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P07
        pin_07: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P10
        pin_10: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P11
        pin_11: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P12
        pin_12: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P13
        pin_13: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P14
        pin_14: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P15
        pin_15: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P16
        pin_16: super::PCF8575PinMode<TMsg>,
        /// Настройка пина P17
        pin_17: super::PCF8575PinMode<TMsg>,
    },

    /// Коммуникация с модулем PM-DI16
    PM_DI16(super::pm_di16::Config<TMsg>),

    /// Коммуникация с модулем PM-RQ8
    PM_RQ8(super::pm_rq8::Config<TMsg>),

    /// Коммуникация с LED-экраном
    SSD1306 {},
}