hyperion/instance/device/
dummy.rs1use async_trait::async_trait;
2
3use crate::{color::AnsiDisplayExt, models};
4
5use super::{common::*, DeviceError};
6
7pub type DummyDevice = Rewriter<DummyDeviceImpl>;
8
9pub struct DummyDeviceImpl {
10 leds: Vec<models::Color>,
11 mode: models::DummyDeviceMode,
12 ansi_buf: String,
13}
14
15#[async_trait]
16impl WritingDevice for DummyDeviceImpl {
17 type Config = models::Dummy;
18
19 fn new(config: &Self::Config) -> Result<Self, DeviceError> {
20 Ok(Self {
21 leds: vec![Default::default(); config.hardware_led_count as _],
22 mode: config.mode,
23 ansi_buf: String::new(),
24 })
25 }
26
27 async fn set_let_data(
28 &mut self,
29 _config: &Self::Config,
30 led_data: &[models::Color],
31 ) -> Result<(), DeviceError> {
32 self.leds.copy_from_slice(led_data);
33 Ok(())
34 }
35
36 async fn write(&mut self) -> Result<(), DeviceError> {
37 match self.mode {
39 models::DummyDeviceMode::Text => {
40 for (i, led) in self.leds.iter().enumerate() {
41 info!(
42 led = %format_args!("{:3}", i),
43 red = %format_args!("{:3}", led.red),
44 green = %format_args!("{:3}", led.green),
45 blue = %format_args!("{:3}", led.blue),
46 );
47 }
48 }
49
50 models::DummyDeviceMode::Ansi => {
51 self.ansi_buf.clear();
53
54 self.leds
55 .iter()
56 .copied()
57 .to_ansi_truecolor(&mut self.ansi_buf);
58
59 info!("{}", &self.ansi_buf);
61 }
62 }
63
64 Ok(())
65 }
66}