~ruther/map-led-strip

ca6d33bf252720b350b50b4dabba7a4a23bdf09f — František Boháček 1 year, 9 months ago ea65b1e
feat: add all command
3 files changed, 58 insertions(+), 1 deletions(-)

M src/commands.rs
A src/commands/all_command.rs
M src/main.rs
M src/commands.rs => src/commands.rs +2 -1
@@ 3,4 3,5 @@ pub mod command_handler;
pub mod command;
pub mod command_argument;
pub mod set_command;
pub mod reset_command;
\ No newline at end of file
pub mod reset_command;
pub mod all_command;
\ No newline at end of file

A src/commands/all_command.rs => src/commands/all_command.rs +53 -0
@@ 0,0 1,53 @@
use esp_println::println;
use crate::commands::command_handler::{CommandData, CommandHandleError, SpecificCommandHandler};
use crate::commands::command_handler::CommandHandleError::WrongArguments;

pub struct AllCommand {
}

impl AllCommand {
    pub fn new() -> Self {
        Self {}
    }
}

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

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

        let r = cmd.parsed_arguments[1].try_to_integer();
        let g = cmd.parsed_arguments[2].try_to_integer();
        let b = cmd.parsed_arguments[3].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);
        }

        for led in command.map.get_map_mut() {
            led.r = r as u8;
            led.g = g as u8;
            led.b = b as u8;
        }

        Ok(())
    }

    fn help(&self) -> &'static str {
        "<R> <G> <B> - light up all LEDs to the given color"
    }
}
\ No newline at end of file

M src/main.rs => src/main.rs +3 -0
@@ 14,6 14,7 @@ use hal::uart::TxRxPins;
use nb::block;
use nb::Error::{WouldBlock, Other};
use smart_leds::{RGB8, SmartLedsWrite};
use crate::commands::all_command::AllCommand;
use crate::commands::command_handler::{CommandHandler};
use crate::commands::command_handler;
use crate::commands::hello_world_command::HelloWorldCommand;


@@ 95,11 96,13 @@ fn main() -> ! {
    let world_command = HelloWorldCommand::new();
    let set_command = SetCommand::new();
    let reset_command = ResetCommand::new();
    let all_command = AllCommand::new();
    let mut handler = CommandHandler::new(
        [
            ("HELLO_WORLD", &world_command),
            ("SET", &set_command),
            ("RESET", &reset_command),
            ("ALL", &all_command)
        ],
        ['\0'; COMMAND_BUFFER],
    );

Do not follow this link