Add FP LED v1 support

This commit is contained in:
Stephen Horvath
2025-11-06 14:09:50 +10:00
parent 1fc4b94237
commit 8810aa01e5
4 changed files with 58 additions and 15 deletions

View File

@@ -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:

6
yafi/ui/leds.cmb Normal file
View File

@@ -0,0 +1,6 @@
<?xml version='1.0' encoding='UTF-8' standalone='no'?>
<!DOCTYPE cambalache-project SYSTEM "cambalache-project.dtd">
<!-- Created with Cambalache 0.96.1 -->
<cambalache-project version="0.96.0" target_tk="gtk-4.0">
<ui template-class="LedsPage" filename="leds.ui" sha256="a52e82a54a64ff7e5ca5a83af2ee096c1be44c379cc286c65fbee8eaf2400324"/>
</cambalache-project>

View File

@@ -26,11 +26,10 @@
<child>
<object class="GtkScale" id="led_pwr_scale">
<property name="adjustment">
<object class="GtkAdjustment">
<object class="GtkAdjustment" id="led_pwr_scale_adj">
<property name="page-increment">1.0</property>
<property name="step-increment">1.0</property>
<property name="upper">2.0</property>
<property name="value">2.0</property>
<property name="upper">100.0</property>
</object>
</property>
<property name="hexpand">True</property>

Binary file not shown.