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