diff --git a/asusctl/src/cli_opts.rs b/asusctl/src/cli_opts.rs index 281dc6a9..bbef427e 100644 --- a/asusctl/src/cli_opts.rs +++ b/asusctl/src/cli_opts.rs @@ -12,16 +12,6 @@ use crate::slash_cli::SlashCommand; pub struct CliStart { #[argh(switch, description = "show supported functions of this laptop")] pub show_supported: bool, - - #[argh(option, description = "keyboard brightness ")] - pub kbd_bright: Option, - - #[argh(switch, description = "toggle to next keyboard brightness")] - pub next_kbd_bright: bool, - - #[argh(switch, description = "toggle to previous keyboard brightness")] - pub prev_kbd_bright: bool, - #[argh(option, description = "set your battery charge limit <20-100>")] pub chg_limit: Option, @@ -39,6 +29,7 @@ pub enum CliCommand { Aura(LedModeCommand), AuraPowerOld(LedPowerCommand1), AuraPower(LedPowerCommand2), + Brightness(BrightnessCommand), Profile(ProfileCommand), FanCurve(FanCurveCommand), Anime(AnimeCommand), @@ -211,3 +202,60 @@ pub struct BacklightCommand { description = "show program version and system info" )] pub struct InfoCommand {} + +#[derive(FromArgs, Debug)] +#[argh(subcommand, name = "leds", description = "keyboard brightness control")] +pub struct BrightnessCommand { + #[argh(subcommand)] + pub command: BrightnessSubCommand, +} + +#[derive(FromArgs, Debug)] +#[argh(subcommand)] +pub enum BrightnessSubCommand { + Set(BrightnessSetCommand), + Get(BrightnessGetCommand), + Next(BrightnessNextCommand), + Prev(BrightnessPrevCommand), +} + +impl Default for BrightnessSubCommand { + fn default() -> Self { + BrightnessSubCommand::Get(BrightnessGetCommand::default()) + } +} + +#[derive(FromArgs, Debug)] +#[argh( + subcommand, + name = "set", + description = "set keyboard brightness " +)] +pub struct BrightnessSetCommand { + #[argh(positional, description = "brightness level: off, low, med, high")] + pub level: LedBrightness, +} + +#[derive(FromArgs, Debug, Default)] +#[argh( + subcommand, + name = "get", + description = "get current keyboard brightness" +)] +pub struct BrightnessGetCommand {} + +#[derive(FromArgs, Debug, Default)] +#[argh( + subcommand, + name = "next", + description = "toggle to next keyboard brightness" +)] +pub struct BrightnessNextCommand {} + +#[derive(FromArgs, Debug, Default)] +#[argh( + subcommand, + name = "prev", + description = "toggle to previous keyboard brightness" +)] +pub struct BrightnessPrevCommand {} diff --git a/asusctl/src/main.rs b/asusctl/src/main.rs index baa6ab44..31d2b856 100644 --- a/asusctl/src/main.rs +++ b/asusctl/src/main.rs @@ -190,6 +190,7 @@ fn do_parsed( Some(CliCommand::Aura(mode)) => handle_led_mode(mode)?, Some(CliCommand::AuraPowerOld(pow)) => handle_led_power1(pow)?, Some(CliCommand::AuraPower(pow)) => handle_led_power2(pow)?, + Some(CliCommand::Brightness(cmd)) => handle_brightness(cmd)?, Some(CliCommand::Profile(cmd)) => { handle_throttle_profile(&conn, supported_properties, cmd)? } @@ -207,56 +208,12 @@ fn do_parsed( print_info(); } None => { - if !parsed.show_supported - && parsed.kbd_bright.is_none() - && parsed.chg_limit.is_none() - && !parsed.next_kbd_bright - && !parsed.prev_kbd_bright - && !parsed.one_shot_chg - { + if !parsed.show_supported && parsed.chg_limit.is_none() && !parsed.one_shot_chg { println!("No command given. Run 'asusctl --help' for usage and 'asusctl --help' for subcommands."); } } } - if let Some(brightness) = &parsed.kbd_bright { - if let Ok(aura) = find_iface::("xyz.ljones.Aura") { - for aura in aura.iter() { - match brightness.level() { - None => { - let level = aura.brightness()?; - println!("Current keyboard led brightness: {level:?}"); - } - Some(level) => aura.set_brightness(rog_aura::LedBrightness::from(level))?, - } - } - } else { - println!("No aura interface found"); - } - } - - if parsed.next_kbd_bright { - if let Ok(aura) = find_iface::("xyz.ljones.Aura") { - for aura in aura.iter() { - let brightness = aura.brightness()?; - aura.set_brightness(brightness.next())?; - } - } else { - println!("No aura interface found"); - } - } - - if parsed.prev_kbd_bright { - if let Ok(aura) = find_iface::("xyz.ljones.Aura") { - for aura in aura.iter() { - let brightness = aura.brightness()?; - aura.set_brightness(brightness.prev())?; - } - } else { - println!("No aura interface found"); - } - } - if parsed.show_supported { println!("Supported Core Functions:\n{:#?}", supported_interfaces); println!( @@ -328,6 +285,48 @@ fn handle_backlight(cmd: &BacklightCommand) -> Result<(), Box Result<(), Box> { + let Ok(aura_proxies) = find_iface::("xyz.ljones.Aura") else { + println!("No aura interface found"); + return Ok(()); + }; + + match &cmd.command { + BrightnessSubCommand::Set(s) => { + for aura in aura_proxies.iter() { + if let Some(level) = s.level.level() { + aura.set_brightness(rog_aura::LedBrightness::from(level))?; + } else { + let current = aura.brightness()?; + println!("Current keyboard led brightness: {current:?}"); + } + } + } + BrightnessSubCommand::Get(_) => { + for aura in aura_proxies.iter() { + let level = aura.brightness()?; + println!("Current keyboard led brightness: {level:?}"); + } + + return Ok(()); + } + BrightnessSubCommand::Next(_) => { + for aura in aura_proxies.iter() { + let brightness = aura.brightness()?; + aura.set_brightness(brightness.next())?; + } + } + BrightnessSubCommand::Prev(_) => { + for aura in aura_proxies.iter() { + let brightness = aura.brightness()?; + aura.set_brightness(brightness.prev())?; + } + } + } + + Ok(()) +} + fn handle_anime(cmd: &AnimeCommand) -> Result<(), Box> { if cmd.command.is_none() && cmd.enable_display.is_none()