From 8810aa01e50ac741e6f9da92c651df5de7cc4305 Mon Sep 17 00:00:00 2001 From: Stephen Horvath Date: Thu, 6 Nov 2025 14:09:50 +1000 Subject: [PATCH] Add FP LED v1 support --- yafi/leds.py | 62 +++++++++++++++++++++++++++++++++++--------- yafi/ui/leds.cmb | 6 +++++ yafi/ui/leds.ui | 5 ++-- yafi/yafi.gresource | Bin 28436 -> 28428 bytes 4 files changed, 58 insertions(+), 15 deletions(-) create mode 100644 yafi/ui/leds.cmb diff --git a/yafi/leds.py b/yafi/leds.py index eec72d5..187b649 100644 --- a/yafi/leds.py +++ b/yafi/leds.py @@ -28,9 +28,11 @@ class LedsPage(Gtk.Box): __gtype_name__ = 'LedsPage' first_run = True + fp_led_version = 1 led_pwr = Gtk.Template.Child() led_pwr_scale = Gtk.Template.Child() + led_pwr_scale_adj = Gtk.Template.Child() led_kbd = Gtk.Template.Child() led_kbd_scale = Gtk.Template.Child() @@ -42,24 +44,60 @@ class LedsPage(Gtk.Box): def setup(self, app): # Power LED + fp_led_level_text = ["High", "Medium", "Low", "Ultra Low"] try: def handle_led_pwr(scale): - value = int(abs(scale.get_value() - 2)) - ec_commands.framework_laptop.set_fp_led_level(app.cros_ec, value) - self.led_pwr.set_subtitle(["High", "Medium", "Low"][value]) + match self.fp_led_version: + case 0: + value = int(abs(scale.get_value() - 2)) + ec_commands.framework_laptop.set_fp_led_level( + app.cros_ec, value + ) + self.led_pwr.set_subtitle(fp_led_level_text[value]) + case 1: + value = int(scale.get_value()) + ec_commands.framework_laptop.set_fp_led_percent( + app.cros_ec, value + ) + self.led_pwr.set_subtitle(f"{value}%") - try: + if self.fp_led_version == 1: + try: + current_fp_levels = ( + ec_commands.framework_laptop.get_fp_led_levels_v1( + app.cros_ec + ).value + ) + self.led_pwr_scale.set_value(current_fp_levels["percentage"]) + if current_fp_levels["level"] < len(fp_led_level_text): + self.led_pwr.set_subtitle( + f"{fp_led_level_text[current_fp_levels['level']]} ({current_fp_levels['percentage']}%)" + ) + else: + self.led_pwr.set_subtitle(f"{current_fp_levels['percentage']}%") + + except ec_exceptions.ECError as e: + if e.ec_status == ec_exceptions.EcStatus.EC_RES_INVALID_VERSION: + self.fp_led_version = 0 + else: + raise e + + if self.fp_led_version == 0: current_fp_level = ec_commands.framework_laptop.get_fp_led_level( app.cros_ec ).value - self.led_pwr_scale.set_value(abs(current_fp_level - 2)) - self.led_pwr.set_subtitle(["High", "Medium", "Low"][current_fp_level]) - except ValueError: - # LED isn't a normal value - current_fp_level = ec_commands.framework_laptop.get_fp_led_level_int( - app.cros_ec - ) - self.led_pwr.set_subtitle(f"Custom ({current_fp_level}%)") + if current_fp_level < len(fp_led_level_text): + self.led_pwr_scale_adj.set_upper(2) + self.led_pwr_scale.set_value(abs(current_fp_level - 2)) + self.led_pwr.set_subtitle(f"{fp_led_level_text[current_fp_level]}") + else: + # Disable if an unsupported level is set + self.led_pwr_scale.set_sensitive(False) + current_fp_percent = ( + ec_commands.framework_laptop.get_fp_led_percent(app.cros_ec) + ) + self.led_pwr_scale.set_value(current_fp_percent) + self.led_pwr.set_subtitle(f"Custom {current_fp_percent}%") self.led_pwr_scale.connect("value-changed", handle_led_pwr) except ec_exceptions.ECError as e: diff --git a/yafi/ui/leds.cmb b/yafi/ui/leds.cmb new file mode 100644 index 0000000..f6bf499 --- /dev/null +++ b/yafi/ui/leds.cmb @@ -0,0 +1,6 @@ + + + + + + diff --git a/yafi/ui/leds.ui b/yafi/ui/leds.ui index 4cd4375..0b22a33 100644 --- a/yafi/ui/leds.ui +++ b/yafi/ui/leds.ui @@ -26,11 +26,10 @@ - + 1.0 1.0 - 2.0 - 2.0 + 100.0 True diff --git a/yafi/yafi.gresource b/yafi/yafi.gresource index 7e4aff9cebed1e5c589dc9f4af99ec480d5cce05..4ee43b7d1b745c9d427284bf982f13f325d28ee6 100644 GIT binary patch delta 172 zcmbPokFn<-#AkjC40}?xd|_i?U;wc>8GIN%0O>D4eD-^k9y?GR#AatGV_@)S zU|1c(z%bvjX)Q<`#O4Bu?*P);DGUtyf-YfPKyeUT4k#V~qqWqj#7}+<40}?xd|_i?U;wc>8GIQ20BHt)28OfWqx9H;Oc0x$p^Sk8 zNN)~dV3_aNv=$@|Vsin-4*+T76b1%;L6YwEzGB