Skip to main content

rsiot/components/cmp_linux_gpio/
config.rs

1use crate::message::MsgDataBound;
2
3// ANCHOR: Config
4/// Конфигурация компонента cmp_linux_gpio
5#[derive(Clone)]
6pub struct Config<TMsg>
7where
8    TMsg: MsgDataBound,
9{
10    /// Конфигурация чтения состояния GPIO
11    pub gpio_input: Vec<ConfigGpioInput<TMsg>>,
12
13    /// Конфигурация записи состояния GPIO
14    pub gpio_output: Vec<ConfigGpioOutput<TMsg>>,
15}
16// ANCHOR: Config
17
18// ANCHOR: ConfigGpioInput
19/// Обработка одного выхода
20#[derive(Clone)]
21pub struct ConfigGpioInput<TMsg> {
22    /// Устройство GPIO, например  "/dev/gpiochip0"
23    pub dev_gpio: &'static str,
24
25    /// Номер линии GPIO. 0 .. 31
26    pub gpio_line: u8,
27
28    /// Описание пина. Выводится командой gpioinfo
29    pub description: &'static str,
30
31    /// Преобразование состояния пина в сообщение
32    pub fn_gpio_input: fn(bool) -> TMsg,
33}
34// ANCHOR: ConfigGpioInput
35
36// ANCHOR: ConfigGpioOutput
37/// Обработка одного выхода
38#[derive(Clone)]
39pub struct ConfigGpioOutput<TMsg> {
40    /// Устройство GPIO, например  "/dev/gpiochip0"
41    pub dev_gpio: &'static str,
42
43    /// Номер линии GPIO. 0 .. 31
44    pub gpio_line: u8,
45
46    /// Описание пина. Выводится командой gpioinfo
47    pub description: &'static str,
48
49    /// Преобразование входящего сообщения в состояние пина
50    pub fn_gpio_output: fn(TMsg) -> Option<bool>,
51
52    /// Состояние пина при запуске программы
53    pub default_state: bool,
54}
55// ANCHOR: ConfigGpioOutput