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],
);