@@ -28,9 +28,11 @@ class LedsPage(Gtk.Box):
2828 __gtype_name__ = 'LedsPage'
2929
3030 first_run = True
31+ fp_led_version = 1
3132
3233 led_pwr = Gtk .Template .Child ()
3334 led_pwr_scale = Gtk .Template .Child ()
35+ led_pwr_scale_adj = Gtk .Template .Child ()
3436
3537 led_kbd = Gtk .Template .Child ()
3638 led_kbd_scale = Gtk .Template .Child ()
@@ -42,24 +44,60 @@ def __init__(self, **kwargs):
4244
4345 def setup (self , app ):
4446 # Power LED
47+ fp_led_level_text = ["High" , "Medium" , "Low" , "Ultra Low" ]
4548 try :
4649 def handle_led_pwr (scale ):
47- value = int (abs (scale .get_value () - 2 ))
48- ec_commands .framework_laptop .set_fp_led_level (app .cros_ec , value )
49- self .led_pwr .set_subtitle (["High" , "Medium" , "Low" ][value ])
50+ match self .fp_led_version :
51+ case 0 :
52+ value = int (abs (scale .get_value () - 2 ))
53+ ec_commands .framework_laptop .set_fp_led_level (
54+ app .cros_ec , value
55+ )
56+ self .led_pwr .set_subtitle (fp_led_level_text [value ])
57+ case 1 :
58+ value = int (scale .get_value ())
59+ ec_commands .framework_laptop .set_fp_led_percent (
60+ app .cros_ec , value
61+ )
62+ self .led_pwr .set_subtitle (f"{ value } %" )
63+
64+ if self .fp_led_version == 1 :
65+ try :
66+ current_fp_levels = (
67+ ec_commands .framework_laptop .get_fp_led_levels_v1 (
68+ app .cros_ec
69+ ).value
70+ )
71+ self .led_pwr_scale .set_value (current_fp_levels ["percentage" ])
72+ if current_fp_levels ["level" ] < len (fp_led_level_text ):
73+ self .led_pwr .set_subtitle (
74+ f"{ fp_led_level_text [current_fp_levels ['level' ]]} ({ current_fp_levels ['percentage' ]} %)"
75+ )
76+ else :
77+ self .led_pwr .set_subtitle (f"{ current_fp_levels ['percentage' ]} %" )
5078
51- try :
79+ except ec_exceptions .ECError as e :
80+ if e .ec_status == ec_exceptions .EcStatus .EC_RES_INVALID_VERSION :
81+ self .fp_led_version = 0
82+ else :
83+ raise e
84+
85+ if self .fp_led_version == 0 :
5286 current_fp_level = ec_commands .framework_laptop .get_fp_led_level (
5387 app .cros_ec
5488 ).value
55- self .led_pwr_scale .set_value (abs (current_fp_level - 2 ))
56- self .led_pwr .set_subtitle (["High" , "Medium" , "Low" ][current_fp_level ])
57- except ValueError :
58- # LED isn't a normal value
59- current_fp_level = ec_commands .framework_laptop .get_fp_led_level_int (
60- app .cros_ec
61- )
62- self .led_pwr .set_subtitle (f"Custom ({ current_fp_level } %)" )
89+ if current_fp_level < len (fp_led_level_text ):
90+ self .led_pwr_scale_adj .set_upper (2 )
91+ self .led_pwr_scale .set_value (abs (current_fp_level - 2 ))
92+ self .led_pwr .set_subtitle (f"{ fp_led_level_text [current_fp_level ]} " )
93+ else :
94+ # Disable if an unsupported level is set
95+ self .led_pwr_scale .set_sensitive (False )
96+ current_fp_percent = (
97+ ec_commands .framework_laptop .get_fp_led_percent (app .cros_ec )
98+ )
99+ self .led_pwr_scale .set_value (current_fp_percent )
100+ self .led_pwr .set_subtitle (f"Custom { current_fp_percent } %" )
63101
64102 self .led_pwr_scale .connect ("value-changed" , handle_led_pwr )
65103 except ec_exceptions .ECError as e :
0 commit comments