Add layer parameter for LED_GET_MODE and LED_SET_MODE commands

This commit is contained in:
Jeremy Soller 2021-03-04 11:00:49 -07:00 committed by Jeremy Soller
parent 301eef6f21
commit aab45bfcc1
2 changed files with 15 additions and 8 deletions

View File

@ -250,20 +250,22 @@ impl<A: Access> Ec<A> {
self.command(Cmd::LedSetColor, &mut data) 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 = [ let mut data = [
layer,
0, 0,
0, 0,
]; ];
self.command(Cmd::LedGetMode, &mut data)?; self.command(Cmd::LedGetMode, &mut data)?;
Ok(( 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 = [ let mut data = [
layer,
mode, mode,
speed, speed,
]; ];

View File

@ -359,6 +359,10 @@ fn main() {
) )
) )
.subcommand(SubCommand::with_name("led_mode") .subcommand(SubCommand::with_name("led_mode")
.arg(Arg::with_name("layer")
.validator(validate_from_str::<u8>)
.required(true)
)
.arg(Arg::with_name("mode") .arg(Arg::with_name("mode")
.validator(validate_from_str::<u8>) .validator(validate_from_str::<u8>)
.requires("speed") .requires("speed")
@ -543,24 +547,25 @@ fn main() {
} }
}, },
("led_mode", Some(sub_m)) => { ("led_mode", Some(sub_m)) => {
let layer = sub_m.value_of("layer").unwrap().parse::<u8>().unwrap();
let mode = sub_m.value_of("mode").map(|x| x.parse::<u8>().unwrap()); let mode = sub_m.value_of("mode").map(|x| x.parse::<u8>().unwrap());
let speed = sub_m.value_of("speed").map(|x| x.parse::<u8>().unwrap()); let speed = sub_m.value_of("speed").map(|x| x.parse::<u8>().unwrap());
if let (Some(mode), Some(speed)) = (mode, speed) { 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(()) => (), Ok(()) => (),
Err(err) => { 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); process::exit(1);
}, },
} }
} else { } else {
match unsafe { ec.led_get_mode() } { match unsafe { ec.led_get_mode(layer) } {
Ok((mode, speed)) => { Ok((mode, speed)) => {
println!("mode: {}", mode); println!("mode: {}", mode);
println!("speed: {}", speed); println!("speed: {}", speed);
}, },
Err(err) => { Err(err) => {
eprintln!("failed to get mode: {:X?}", err); eprintln!("failed to get mode for layer {}: {:X?}", layer, err);
process::exit(1); process::exit(1);
}, },
} }