From c7ac67ac3708051996ef528b2ed1884f0f9ee15a Mon Sep 17 00:00:00 2001 From: Daniel Schaefer Date: Wed, 29 Oct 2025 14:48:20 +0800 Subject: [PATCH] autofanctrl: Allow specifying fan index Signed-off-by: Daniel Schaefer --- EXAMPLES.md | 4 ++++ framework_lib/src/commandline/clap_std.rs | 2 +- framework_lib/src/commandline/mod.rs | 8 +++++--- framework_lib/src/commandline/uefi.rs | 16 ++++++++++++++-- 4 files changed, 24 insertions(+), 6 deletions(-) diff --git a/EXAMPLES.md b/EXAMPLES.md index 557d8349..8cf74a0d 100644 --- a/EXAMPLES.md +++ b/EXAMPLES.md @@ -441,6 +441,10 @@ Accelerometers: F75303_DDR: 38 C APU: 42 C Fan Speed: 0 RPM + +# Or just for a specific fan (e.g. on Framework Desktop) +> sudo framework_tool --autofanctrl 0 +> sudo framework_tool --autofanctrl 1 ``` ## Check expansion bay (Framework 16) diff --git a/framework_lib/src/commandline/clap_std.rs b/framework_lib/src/commandline/clap_std.rs index cefd2319..6609c9c1 100644 --- a/framework_lib/src/commandline/clap_std.rs +++ b/framework_lib/src/commandline/clap_std.rs @@ -69,7 +69,7 @@ struct ClapCli { /// Turn on automatic fan speed control #[arg(long)] - autofanctrl: bool, + autofanctrl: Option>, /// Show information about USB-C PD ports #[arg(long)] diff --git a/framework_lib/src/commandline/mod.rs b/framework_lib/src/commandline/mod.rs index dab66c02..aba40e7e 100644 --- a/framework_lib/src/commandline/mod.rs +++ b/framework_lib/src/commandline/mod.rs @@ -167,7 +167,7 @@ pub struct Cli { pub sensors: bool, pub fansetduty: Option<(Option, u32)>, pub fansetrpm: Option<(Option, u32)>, - pub autofanctrl: bool, + pub autofanctrl: Option>, pub pdports: bool, pub privacy: bool, pub pd_info: bool, @@ -1184,7 +1184,9 @@ pub fn run_with_args(args: &Cli, _allupdate: bool) -> i32 { print_err(ec.fan_set_duty(fan, percent)); } else if let Some((fan, rpm)) = args.fansetrpm { print_err(ec.fan_set_rpm(fan, rpm)); - } else if args.autofanctrl { + } else if let Some(Some(fan_id)) = args.autofanctrl { + print_err(ec.autofanctrl(Some(fan_id))); + } else if let Some(None) = args.autofanctrl { print_err(ec.autofanctrl(None)); } else if args.pdports { power::get_and_print_pd_info(&ec); @@ -1457,7 +1459,7 @@ Options: --sensors Print sensor information (ALS, G-Sensor) --fansetduty Set fan duty cycle (0-100%) --fansetrpm Set fan RPM (limited by EC fan table max RPM) - --autofanctrl Turn on automatic fan speed control + --autofanctrl []Turn on automatic fan speed control (optionally provide fan index) --pdports Show information about USB-C PD ports --info Show info from SMBIOS (Only on UEFI) --pd-info Show details about the PD controllers diff --git a/framework_lib/src/commandline/uefi.rs b/framework_lib/src/commandline/uefi.rs index 2a18cabd..af174399 100644 --- a/framework_lib/src/commandline/uefi.rs +++ b/framework_lib/src/commandline/uefi.rs @@ -39,7 +39,7 @@ pub fn parse(args: &[String]) -> Cli { sensors: false, fansetduty: None, fansetrpm: None, - autofanctrl: false, + autofanctrl: None, pdports: false, pd_info: false, pd_reset: None, @@ -195,7 +195,19 @@ pub fn parse(args: &[String]) -> Cli { }; found_an_option = true; } else if arg == "--autofanctrol" { - cli.autofanctrl = true; + cli.autofanctrl = if args.len() > i + 1 { + if let Ok(fan_id) = args[i + 1].parse::() { + Some(Some(fan_id)) + } else { + println!( + "Invalid value for --autofanctrl: '{}'. Must be integer < 256.", + args[i + 1] + ); + None + } + } else { + Some(None) + }; found_an_option = true; } else if arg == "--pdports" { cli.pdports = true;