rsiot/components/cmp_esp_led/
config.rs

1use esp_idf_svc::hal::{gpio::AnyIOPin, peripheral::Peripheral, rmt::RmtChannel};
2use serde::{Deserialize, Serialize};
3use ws2812_esp32_rmt_driver::RGB8;
4
5use crate::message::{Message, MsgDataBound};
6
7/// Конфигурация cmp_esp_led
8pub struct Config<TMsg, TPeripheral, TRmt>
9where
10    TMsg: MsgDataBound,
11    TPeripheral: RmtChannel,
12    TRmt: Peripheral<P = TPeripheral> + 'static,
13{
14    /// Пин для управляющего сигнала
15    pub pin: AnyIOPin,
16
17    /// Канал для управления сигналом RMT
18    pub rmt_channel: TRmt,
19
20    /// Функция преобразования входящих сообщений в значение цвета
21    pub fn_input: fn(&Message<TMsg>) -> Option<Vec<(u8, ConfigRgb)>>,
22}
23
24/// Задание цвета
25#[derive(Deserialize, Clone, Copy, Debug, Default, PartialEq, Serialize)]
26pub struct ConfigRgb
27where
28    Self: Sized,
29{
30    /// R
31    pub r: u8,
32    /// G
33    pub g: u8,
34    /// B
35    pub b: u8,
36}
37
38impl From<ConfigRgb> for RGB8 {
39    fn from(value: ConfigRgb) -> Self {
40        RGB8 {
41            r: value.r,
42            g: value.g,
43            b: value.b,
44        }
45    }
46}