From bbabd81888bd3cdd72310fe382eced747f0c4c21 Mon Sep 17 00:00:00 2001 From: "NGnius (Graham)" Date: Thu, 1 Sep 2022 00:11:35 +0000 Subject: [PATCH] Created Commands (markdown) --- Commands.md | 85 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 Commands.md diff --git a/Commands.md b/Commands.md new file mode 100644 index 0000000..a70e915 --- /dev/null +++ b/Commands.md @@ -0,0 +1,85 @@ +In case you still want some of the functionality, without the nice GUI, here's some equivalent commands. +These should all be run as superuser, i.e. run `sudo su` and then run these commands in that. + +# Enable & Disable CPU threads + +Enable: `echo 1 > /sys/devices/system/cpu/cpu{cpu_number}/online` where `{cpu_number}` is a number from 1 to 7 (inclusive). + +Disable: `echo 0 > /sys/devices/system/cpu/cpu{cpu_number}/online` where `{cpu_number}` is a number from 1 to 7 (inclusive). + +NOTE: You cannot enable or disable cpu0, hence why there are only 7 in the range for 8 cpu threads. + +# Enable & Disable CPU boost + +Enable: `echo 1 > /sys/devices/system/cpu/cpufreq/boost` enables boost across all threads. + +Disable: `echo 0 > /sys/devices/system/cpu/cpufreq/boost` disables boost across all threads. + +# Set CPU frequency + +Use `cpupower` (usage: `cpupower --help`). +This isn't strictly how PowerTools does it, but it's a multi-step process which can involve changing the CPU governor. +All that can be done automatically by `cpupower frequency-set --freq {frequency}` where `{frequency}` is `1.7G`, `2.4G` or `2.8G`. + +# Set GPU Power + +Set Slow Powerplay Table (PPT):`echo {microwatts} > /sys/class/hwmon/hwmon4/power1_cap` where `{microwatts}` is a wattage in millionths of a Watt. This doesn't seem to do a lot. + +Set Fast Powerplay Table (PPT): `echo {microwatts} > /sys/class/hwmon/hwmon4/power2_cap` where `{microwatts}` is a wattage in millionths of a Watt. + +Get the entry limits for those two commands with `cat /sys/class/hwmon/hwmon4/power{number}_cap_max` where `{number}` is `1` (slowPPT) or `2` (fastPPT). + +# Set Fan speed + +NOTE: PowerTools no longer supports this, since [Fantastic](https://github.com/NGnius/Fantastic) does it much better. + +Enable automatic control: `echo 0 > /sys/class/hwmon/hwmon5/recalculate` enables automatic fan control. + +Disable automatic control: `echo 1 > /sys/class/hwmon/hwmon5/recalculate` disables automatic (temperature-based) fan control and starts using the set fan target instead. + +Set the fan speed: `echo {rpm} > /sys/class/hwmon/hwmon5/fan1_target` where `{rpm}` is the RPM. + +Read the actual fan RPM: `cat /sys/class/hwmon/hwmon5/fan1_input` gives the fan speed. + +NOTE: There's a bug in the fan controller; if you enable automatic fan control it will forget any previously-set target despite it appearing to be set correctly (i.e. `cat /sys/class/hwmon/hwmon5/fan1_target` will display the correct value). +When you disable automatic fan control, you will need to set the fan RPM again. + +# Battery stats + +Get the battery charge right now: `cat /sys/class/hwmon/hwmon2/device/charge_now` gives charge in uAh (uAh * 7.7/1000000 = charge in Wh). + +Get the maximum battery capacity: `cat /sys/class/hwmon/hwmon2/device/charge_full` gives charge in uAh. + +Get the design battery capacity: `cat /sys/class/hwmon/hwmon2/device/charge_full_design` gives charge in uAh. + +Get whether the deck is plugged in: `cat /sys/class/hwmon/hwmon5/curr1_input` gives the charger current in mA. + +NOTE: 7.7 is the voltage of the battery -- it's not just a magic number. + +# Steam Deck kernel patches + +This is how I figured out how the fan stuff works. +I've only scratched the surface of what this code allows, I'm sure it has more useful information. +https://lkml.org/lkml/2022/2/5/391 + +# Game launch detection + +```typescript +//@ts-ignore +let lifetimeHook = SteamClient.GameSessions.RegisterForAppLifetimeNotifications((update) => { + if (update.bRunning) { + console.log("AppID " + update.unAppID.toString() + " is now running"); + } else { + console.log("AppID " + update.unAppID.toString() + " is no longer running"); + // game exit code here + // NOTE: custom games always have 0 as AppID, so AppID is bad to use as ID + } +}); +//@ts-ignore +let startHook = SteamClient.Apps.RegisterForGameActionStart((actionType, id) => { + //@ts-ignore + let gameInfo: any = appStore.GetAppOverviewByGameID(id); + // game start code here + // NOTE: GameID (variable: id) is always unique, even for custom games, so it's better to use than AppID +}); +``` \ No newline at end of file