1 Commits

Author SHA1 Message Date
copilot-swe-agent[bot]
25b93e7597 Initial plan 2025-11-02 10:47:52 +00:00
8 changed files with 24 additions and 71 deletions

7
60-cros_ec_python.rules Normal file
View File

@@ -0,0 +1,7 @@
# CrOS_EC_Python udev rules
# LPC Access
KERNEL=="port", TAG+="uaccess"
# /dev/cros_ec Access
KERNEL=="cros_ec", TAG+="uaccess"

View File

@@ -15,9 +15,7 @@ YAFI is also available on [Flathub](https://flathub.org/en/apps/au.stevetech.yaf
### Linux ### Linux
To allow YAFI to communicate with the EC, you will need to enable user access to the `/dev/cros_ec` device. You can do this by running `echo KERNEL=="cros_ec", TAG+="uaccess" | sudo tee /etc/udev/rules.d/60-yafi.rules`, and then reload the rules with `sudo udevadm control --reload-rules && sudo udevadm trigger`. To allow YAFI to communicate with the EC, you need to copy the [`60-cros_ec_python.rules`](60-cros_ec_python.rules) file to `/etc/udev/rules.d/` and reload the rules with `sudo udevadm control --reload-rules && sudo udevadm trigger`.
You can also do this by running `curl -fL yafi.stevetech.au/udev.sh | sudo sh` which will run the [`add-udev-rules.sh`](add-udev-rules.sh) script.
### Windows ### Windows
@@ -86,7 +84,7 @@ It is possible to run YAFI on Windows using [gvsbuild](https://github.com/wingtk
### `[Errno 13] Permission denied: '/dev/cros_ec'` ### `[Errno 13] Permission denied: '/dev/cros_ec'`
This error occurs when the udev rules are not installed or not working. Make sure you have installed the udev rules as described in the [Linux Installation](#linux) section. This error occurs when the udev rules are not installed or not working. Make sure you have copied the `60-cros_ec_python.rules` file to `/etc/udev/rules.d/` and reloaded the rules with `sudo udevadm control --reload-rules && sudo udevadm trigger`.
### `Could not auto detect device, check you have the required permissions, or specify manually.` ### `Could not auto detect device, check you have the required permissions, or specify manually.`

View File

@@ -1,7 +0,0 @@
#!/bin/bash
set -e
echo Installing udev rules for YAFI to /etc/udev/rules.d/60-yafi.rules
echo KERNEL=="cros_ec", TAG+="uaccess" > /etc/udev/rules.d/60-yafi.rules
udevadm control --reload-rules
udevadm trigger
echo udev rules installed successfully.

View File

@@ -19,8 +19,6 @@
<p>You will need to install the udev rules to allow non-root access to the EC device. See the README for more information.</p> <p>You will need to install the udev rules to allow non-root access to the EC device. See the README for more information.</p>
<p>Alternatively, you can run <code>curl -fL yafi.stevetech.au/udev.sh | sudo sh</code> to install the udev rules.</p>
<p>YAFI is not affiliated with Framework Computer Inc. in any way.</p> <p>YAFI is not affiliated with Framework Computer Inc. in any way.</p>
</description> </description>

View File

@@ -28,11 +28,9 @@ class LedsPage(Gtk.Box):
__gtype_name__ = 'LedsPage' __gtype_name__ = 'LedsPage'
first_run = True first_run = True
fp_led_version = 1
led_pwr = Gtk.Template.Child() led_pwr = Gtk.Template.Child()
led_pwr_scale = Gtk.Template.Child() led_pwr_scale = Gtk.Template.Child()
led_pwr_scale_adj = Gtk.Template.Child()
led_kbd = Gtk.Template.Child() led_kbd = Gtk.Template.Child()
led_kbd_scale = Gtk.Template.Child() led_kbd_scale = Gtk.Template.Child()
@@ -44,60 +42,24 @@ class LedsPage(Gtk.Box):
def setup(self, app): def setup(self, app):
# Power LED # Power LED
fp_led_level_text = ["High", "Medium", "Low", "Ultra Low"]
try: try:
def handle_led_pwr(scale): def handle_led_pwr(scale):
match self.fp_led_version: value = int(abs(scale.get_value() - 2))
case 0: ec_commands.framework_laptop.set_fp_led_level(app.cros_ec, value)
value = int(abs(scale.get_value() - 2)) self.led_pwr.set_subtitle(["High", "Medium", "Low"][value])
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}%")
if self.fp_led_version == 1: try:
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( current_fp_level = ec_commands.framework_laptop.get_fp_led_level(
app.cros_ec app.cros_ec
).value ).value
if current_fp_level < len(fp_led_level_text): self.led_pwr_scale.set_value(abs(current_fp_level - 2))
self.led_pwr_scale_adj.set_upper(2) self.led_pwr.set_subtitle(["High", "Medium", "Low"][current_fp_level])
self.led_pwr_scale.set_value(abs(current_fp_level - 2)) except ValueError:
self.led_pwr.set_subtitle(f"{fp_led_level_text[current_fp_level]}") # LED isn't a normal value
else: current_fp_level = ec_commands.framework_laptop.get_fp_led_level_int(
# Disable if an unsupported level is set app.cros_ec
self.led_pwr_scale.set_sensitive(False) )
current_fp_percent = ( self.led_pwr.set_subtitle(f"Custom ({current_fp_level}%)")
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) self.led_pwr_scale.connect("value-changed", handle_led_pwr)
except ec_exceptions.ECError as e: except ec_exceptions.ECError as e:

View File

@@ -1,6 +0,0 @@
<?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,10 +26,11 @@
<child> <child>
<object class="GtkScale" id="led_pwr_scale"> <object class="GtkScale" id="led_pwr_scale">
<property name="adjustment"> <property name="adjustment">
<object class="GtkAdjustment" id="led_pwr_scale_adj"> <object class="GtkAdjustment">
<property name="page-increment">1.0</property> <property name="page-increment">1.0</property>
<property name="step-increment">1.0</property> <property name="step-increment">1.0</property>
<property name="upper">100.0</property> <property name="upper">2.0</property>
<property name="value">2.0</property>
</object> </object>
</property> </property>
<property name="hexpand">True</property> <property name="hexpand">True</property>

Binary file not shown.