rsiot/components/shared_tasks/fieldbus_execution/mod.rs
1//! Запуск задач, общих для всех компонентов, выполняющих опрос устройств по шине
2//!
3//! Структура компонентов, выполняющих функцию опроса устройств по протоколам I2C, SPI и UART,
4//! практически идентична. Компоненты, работающие по заданной структуре:
5//!
6//! – cmp_linux_i2c_master
7//!
8//! – cmp_linux_spi_master
9//!
10//! – cmp_linux_uart_master
11//!
12//! – cmp_esp_i2c_master
13//!
14//! – cmp_esp_spi_master
15//!
16//! – cmp_esp_uart_master
17//!
18//! – cmp_modbus_client
19//!
20//! Цифрами 1, 2, 3, 4 помечены каналы передачи данных, соответствующие каналам на структуре
21//! драйвера устройства.
22//!
23#![doc = include_str!("doc/diagram.svg")]
24//!
25//! | Название | Описание |
26//! |----------|----------|
27//! | MsgbusToBroadcast | Задача принимает входящие сообщения из шины MsgBus и рассылает их всем драйверам устройств DeviceDriver_i |
28//! | DeviceDriver_i | Драйвера устройств. На основе входящих сообщений создают запросы для передачи по шине. Также формируют периодические запросы. |
29//! | AddIndex_i | Добавляет индекс драйвера устройства к запросу. Индекс необходим для передачи ответа из шины конкретному драйверу устройства. |
30//! | FieldbusProcess | Задача коммуникации через интерфейс. Конкретная реализация для разных компонентов отличается (I2C, SPI и т.д.). |
31//! | Split | Задача принимает ответные данные из интерфейса и передаёт конкретному драйверу устройства по индексу. |
32//! | DeviceDriver_i | Драйвера устройств. В данном случае драйвера обрабатывают ответы из интерфейса и формируют исходящие сообщения. |
33//! | FilterIdentical | Фильтрация исходящих сообщений. На выход передаются только те сообщения, в которых изменились данные. Фильтрация необходима, чтобы снизить нагрузку на шину сообщений. |
34//! | MpscToMsgbus | Передаёт полученные сообщения в шину MsgBus. |
35//!
36//! Документация по драйверам устройств - [master_device](crate::components_config::master_device)
37//!
38
39mod task_add_index;
40mod task_fieldbus_execution;
41mod task_split_responses;
42
43use super::filter_identical_data;
44
45pub use task_fieldbus_execution::FieldbusExecution;