~ruther/map-led-strip

ref: 9eb4d9b498f88d738e5d3f2580004338e406ea7e map-led-strip/src/commands/set_command.rs -rw-r--r-- 1.7 KiB
9eb4d9b4 — František Boháček feat: reset animation in reset command 1 year, 9 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
use esp_println::println;
use crate::commands::command_handler::{CommandHandleError, SpecificCommandHandler};
use crate::commands::command_handler::CommandHandleError::WrongArguments;
use crate::commands::command_data::CommandData;

#[derive(Default)]
pub struct SetCommand;

impl SpecificCommandHandler for SetCommand {
    fn handle(&self, command: CommandData) -> Result<(), CommandHandleError> {
        let (cmd, map) = command.deconstruct_map();

        if cmd.parsed_arguments().len() < 5 {
            println!("Less than 5 args.");
            return Err(WrongArguments);
        }

        let led_id = cmd.parsed_arguments()[1];
        let led_id = if let Some(id) = led_id.try_to_integer() {
            Some(id as usize)
        } else {
            map.get_index_by_name(led_id.chars()).ok()
        };

        if led_id.is_none() {
            println!("Could not parse led id.");
            return Err(WrongArguments);
        }

        let r = cmd.parsed_arguments()[2].try_to_integer();
        let g = cmd.parsed_arguments()[3].try_to_integer();
        let b = cmd.parsed_arguments()[4].try_to_integer();

        if r.is_none() || g.is_none() || b.is_none() {
            println!("Cold not parse r, g, b.");
            return Err(WrongArguments);
        }

        let r = r.unwrap();
        let g = g.unwrap();
        let b = b.unwrap();

        if r > 255 || g > 255 || b > 255 {
            return Err(WrongArguments);
        }

        map.set_rgb(led_id.unwrap(), Some(r as u8), Some(g as u8), Some(b as u8)).ok().unwrap();

        Ok(())
    }

    fn help(&self) -> &'static str {
        "<id or name> <R> <G> <B> - Set the specified LED to the given color levels"
    }
}
Do not follow this link