From 1c8acf6de378c0950d13ff72b5a5a64e641c3105 Mon Sep 17 00:00:00 2001 From: Denis Benato Date: Thu, 18 Dec 2025 02:10:45 +0100 Subject: [PATCH] Feat: implement keyboard control for TUFs via asus-armoury --- rog-control-center/src/ui/setup_system.rs | 24 ++++++++++++ rog-control-center/ui/pages/system.slint | 46 +++++++++++++++++++++++ rog-platform/src/asus_armoury.rs | 16 ++++++++ 3 files changed, 86 insertions(+) diff --git a/rog-control-center/src/ui/setup_system.rs b/rog-control-center/src/ui/setup_system.rs index c0953417..fb41168c 100644 --- a/rog-control-center/src/ui/setup_system.rs +++ b/rog-control-center/src/ui/setup_system.rs @@ -40,6 +40,10 @@ pub fn setup_system_page(ui: &MainWindow, _config: Arc>) { ui.global::().set_platform_profile(-1); ui.global::().set_panel_overdrive(-1); ui.global::().set_boot_sound(-1); + ui.global::().set_kbd_leds_awake(-1); + ui.global::().set_kbd_leds_sleep(-1); + ui.global::().set_kbd_leds_boot(-1); + ui.global::().set_kbd_leds_shutdown(-1); ui.global::().set_screen_auto_brightness(-1); ui.global::().set_mcu_powersave(-1); ui.global::().set_mini_led_mode(-1); @@ -669,6 +673,26 @@ pub fn setup_system_page_callbacks(ui: &MainWindow, _states: Arc>) setup_callback!(boot_sound, handle, attr, i32); setup_external!(boot_sound, i32, handle, attr, value) } + FirmwareAttribute::KbdLedsAwake => { + init_property!(kbd_leds_awake, handle, value, i32); + setup_callback!(kbd_leds_awake, handle, attr, i32); + setup_external!(kbd_leds_awake, i32, handle, attr, value) + } + FirmwareAttribute::KbdLedsSleep => { + init_property!(kbd_leds_sleep, handle, value, i32); + setup_callback!(kbd_leds_sleep, handle, attr, i32); + setup_external!(kbd_leds_sleep, i32, handle, attr, value) + } + FirmwareAttribute::KbdLedsBoot => { + init_property!(kbd_leds_boot, handle, value, i32); + setup_callback!(kbd_leds_boot, handle, attr, i32); + setup_external!(kbd_leds_boot, i32, handle, attr, value) + } + FirmwareAttribute::KbdLedsShutdown => { + init_property!(kbd_leds_shutdown, handle, value, i32); + setup_callback!(kbd_leds_shutdown, handle, attr, i32); + setup_external!(kbd_leds_shutdown, i32, handle, attr, value) + } FirmwareAttribute::ScreenAutoBrightness => { init_property!(screen_auto_brightness, handle, value, i32); setup_callback!(screen_auto_brightness, handle, attr, i32); diff --git a/rog-control-center/ui/pages/system.slint b/rog-control-center/ui/pages/system.slint index 788d8c16..1e8a43d2 100644 --- a/rog-control-center/ui/pages/system.slint +++ b/rog-control-center/ui/pages/system.slint @@ -51,6 +51,14 @@ export global SystemPageData { callback cb_panel_overdrive(int); in-out property boot_sound; callback cb_boot_sound(int); + in-out property kbd_leds_awake; + callback cb_kbd_leds_awake(int); + in-out property kbd_leds_sleep; + callback cb_kbd_leds_sleep(int); + in-out property kbd_leds_boot; + callback cb_kbd_leds_boot(int); + in-out property kbd_leds_shutdown; + callback cb_kbd_leds_shutdown(int); in-out property screen_auto_brightness; callback cb_screen_auto_brightness(int); in-out property mcu_powersave; @@ -278,6 +286,44 @@ export component PageSystem inherits Rectangle { } } + GroupBox { + title: @tr("Keyboard Power Management"); + HorizontalLayout { + spacing: 10px; + if SystemPageData.kbd_leds_awake != -1: SystemToggleInt { + text: @tr("Keyboard Awake Effect"); + checked_int <=> SystemPageData.kbd_leds_awake; + toggled => { + SystemPageData.cb_kbd_leds_awake(SystemPageData.kbd_leds_awake) + } + } + + if SystemPageData.kbd_leds_sleep != -1: SystemToggleInt { + text: @tr("Keyboard Sleep Effect"); + checked_int <=> SystemPageData.kbd_leds_sleep; + toggled => { + SystemPageData.cb_kbd_leds_sleep(SystemPageData.kbd_leds_sleep) + } + } + + if SystemPageData.kbd_leds_boot != -1: SystemToggleInt { + text: @tr("Keyboard Boot Effect"); + checked_int <=> SystemPageData.kbd_leds_boot; + toggled => { + SystemPageData.cb_kbd_leds_boot(SystemPageData.kbd_leds_boot) + } + } + + if SystemPageData.kbd_leds_shutdown != -1: SystemToggleInt { + text: @tr("Keyboard Shutdown Effect"); + checked_int <=> SystemPageData.kbd_leds_shutdown; + toggled => { + SystemPageData.cb_kbd_leds_shutdown(SystemPageData.kbd_leds_shutdown) + } + } + } + } + HorizontalBox { padding: 0px; spacing: 10px; diff --git a/rog-platform/src/asus_armoury.rs b/rog-platform/src/asus_armoury.rs index d4e4e083..a7453822 100644 --- a/rog-platform/src/asus_armoury.rs +++ b/rog-platform/src/asus_armoury.rs @@ -286,6 +286,10 @@ define_attribute_getters!( dgpu_tgp, charge_mode, boot_sound, + kbd_leds_awake, + kbd_leds_sleep, + kbd_leds_boot, + kbd_leds_shutdown, mcu_powersave, panel_od, panel_hd_mode, @@ -342,6 +346,10 @@ pub enum FirmwareAttribute { PptEnabled = 24, None = 25, ScreenAutoBrightness = 26, + KbdLedsAwake = 27, + KbdLedsSleep = 28, + KbdLedsBoot = 29, + KbdLedsShutdown = 30, } impl FirmwareAttribute { @@ -386,6 +394,10 @@ impl From<&str> for FirmwareAttribute { "nv_tgp" => Self::DgpuTgp, "charge_mode" => Self::ChargeMode, "boot_sound" => Self::BootSound, + "kbd_leds_awake" => Self::KbdLedsAwake, + "kbd_leds_sleep" => Self::KbdLedsSleep, + "kbd_leds_boot" => Self::KbdLedsBoot, + "kbd_leds_shutdown" => Self::KbdLedsShutdown, "mcu_powersave" => Self::McuPowersave, "panel_overdrive" => Self::PanelOverdrive, "panel_hd_mode" => Self::PanelHdMode, @@ -431,6 +443,10 @@ impl From for &str { FirmwareAttribute::DgpuDisable => "dgpu_disable", FirmwareAttribute::GpuMuxMode => "gpu_mux_mode", FirmwareAttribute::MiniLedMode => "mini_led_mode", + FirmwareAttribute::KbdLedsAwake => "kbd_leds_awake", + FirmwareAttribute::KbdLedsSleep => "kbd_leds_sleep", + FirmwareAttribute::KbdLedsBoot => "kbd_leds_boot", + FirmwareAttribute::KbdLedsShutdown => "kbd_leds_shutdown", FirmwareAttribute::PendingReboot => "pending_reboot", FirmwareAttribute::ScreenAutoBrightness => "screen_auto_brightness", FirmwareAttribute::None => "none",