diff --git a/tool/src/ec.rs b/tool/src/ec.rs index 1cdd639..c685181 100644 --- a/tool/src/ec.rs +++ b/tool/src/ec.rs @@ -250,20 +250,22 @@ impl Ec { self.command(Cmd::LedSetColor, &mut data) } - pub unsafe fn led_get_mode(&mut self) -> Result<(u8, u8), Error> { + pub unsafe fn led_get_mode(&mut self, layer: u8) -> Result<(u8, u8), Error> { let mut data = [ + layer, 0, 0, ]; self.command(Cmd::LedGetMode, &mut data)?; Ok(( - data[0], - data[1] + data[1], + data[2] )) } - pub unsafe fn led_set_mode(&mut self, mode: u8, speed: u8) -> Result<(), Error> { + pub unsafe fn led_set_mode(&mut self, layer: u8, mode: u8, speed: u8) -> Result<(), Error> { let mut data = [ + layer, mode, speed, ]; diff --git a/tool/src/main.rs b/tool/src/main.rs index bba78d3..90de8f4 100644 --- a/tool/src/main.rs +++ b/tool/src/main.rs @@ -359,6 +359,10 @@ fn main() { ) ) .subcommand(SubCommand::with_name("led_mode") + .arg(Arg::with_name("layer") + .validator(validate_from_str::) + .required(true) + ) .arg(Arg::with_name("mode") .validator(validate_from_str::) .requires("speed") @@ -543,24 +547,25 @@ fn main() { } }, ("led_mode", Some(sub_m)) => { + let layer = sub_m.value_of("layer").unwrap().parse::().unwrap(); let mode = sub_m.value_of("mode").map(|x| x.parse::().unwrap()); let speed = sub_m.value_of("speed").map(|x| x.parse::().unwrap()); if let (Some(mode), Some(speed)) = (mode, speed) { - match unsafe { ec.led_set_mode(mode, speed) } { + match unsafe { ec.led_set_mode(layer, mode, speed) } { Ok(()) => (), Err(err) => { - eprintln!("failed to set mode {} at speed {}: {:X?}", mode, speed, err); + eprintln!("failed to set layer {} mode {} at speed {}: {:X?}", layer, mode, speed, err); process::exit(1); }, } } else { - match unsafe { ec.led_get_mode() } { + match unsafe { ec.led_get_mode(layer) } { Ok((mode, speed)) => { println!("mode: {}", mode); println!("speed: {}", speed); }, Err(err) => { - eprintln!("failed to get mode: {:X?}", err); + eprintln!("failed to get mode for layer {}: {:X?}", layer, err); process::exit(1); }, }