rsiot/components_config/spi_master/
fieldbus_request.rs

1use std::time::{Duration, Instant};
2
3use crate::components_config::master_device::RequestResponseBound;
4
5/// Структура отдельного запроса на коммуникацию по шине SPI
6#[derive(Clone, Debug)]
7pub struct FieldbusRequest {
8    /// Время создания запроса.
9    ///
10    /// Можно контролировать время выполнения запросов
11    pub request_creation_time: Instant,
12
13    /// Вид запроса.
14    ///
15    /// Необходим для правильной расшифровки ответа
16    pub request_kind: u8,
17
18    /// Массив операций
19    pub operations: Vec<Operation>,
20}
21
22impl FieldbusRequest {
23    /// Создание запроса. Адрес задается позже
24    pub fn new(request_kind: impl Into<u8>, operations: Vec<Operation>) -> Self {
25        Self {
26            request_creation_time: Instant::now(),
27            request_kind: request_kind.into(),
28            operations,
29        }
30    }
31}
32
33/// Виды операций
34#[derive(Clone, Debug)]
35pub enum Operation {
36    /// Задержка между операциями
37    Delay(Duration),
38
39    /// Запрос записи и  чтения. Вложенные данные - количество байт для чтения
40    WriteRead(Vec<u8>, u8),
41
42    /// Запрос записи. Вложенные данные - массив байт для записи
43    Write(Vec<u8>),
44}
45
46impl RequestResponseBound for FieldbusRequest {}