diff --git a/EXAMPLES.md b/EXAMPLES.md index 084c88aa..f59576fd 100644 --- a/EXAMPLES.md +++ b/EXAMPLES.md @@ -64,3 +64,15 @@ ALS: 76 Lux APU: 42 C Fan Speed: 0 RPM ``` + +## Check expansion bay (Framework 16) + +``` +> sudo framework_tool --expansion-bay +Expansion Bay + Enabled: true + Has fault: false + Hatch closed: true + Board: DualInterposer + Serial Number: FRAXXXXXXXXXXXXXXX +``` diff --git a/README.md b/README.md index ded23458..db57686c 100644 --- a/README.md +++ b/README.md @@ -181,6 +181,7 @@ Options: --inputmodules Show status of the input modules (Framework 16 only) --input-deck-mode Set input deck power mode [possible values: auto, off, on] (Framework 16 only) [possible values: auto, off, on] + --expansion-bay Show status of the expansion bay (Framework 16 only) --charge-limit [] Get or set max charge limit --get-gpio diff --git a/framework_lib/src/chromium_ec/mod.rs b/framework_lib/src/chromium_ec/mod.rs index f35595ba..e1a53c20 100644 --- a/framework_lib/src/chromium_ec/mod.rs +++ b/framework_lib/src/chromium_ec/mod.rs @@ -817,6 +817,27 @@ impl CrosEc { res } + pub fn check_bay_status(&self) -> EcResult<()> { + println!("Expansion Bay"); + + let info = EcRequestExpansionBayStatus {}.send_command(self)?; + println!(" Enabled: {}", info.module_enabled()); + println!(" Has fault: {}", info.module_fault()); + println!(" Hatch closed: {}", info.hatch_switch_closed()); + match info.expansion_bay_board() { + Ok(board) => println!(" Board: {:?}", board), + Err(err) => println!(" Board: {:?}", err), + } + + if let Ok(sn) = self.get_gpu_serial() { + println!(" Serial Number: {}", sn); + } else { + println!(" Serial Number: Unknown"); + } + + Ok(()) + } + /// Get the GPU Serial /// pub fn get_gpu_serial(&self) -> EcResult { diff --git a/framework_lib/src/commandline/clap_std.rs b/framework_lib/src/commandline/clap_std.rs index 1d62e9e6..38ef8f5f 100644 --- a/framework_lib/src/commandline/clap_std.rs +++ b/framework_lib/src/commandline/clap_std.rs @@ -147,6 +147,10 @@ struct ClapCli { #[arg(long)] input_deck_mode: Option, + /// Show status of the expansion bay (Framework 16 only) + #[arg(long)] + expansion_bay: bool, + /// Get or set max charge limit #[arg(long)] charge_limit: Option>, @@ -352,6 +356,7 @@ pub fn parse(args: &[String]) -> Cli { intrusion: args.intrusion, inputmodules: args.inputmodules, input_deck_mode: args.input_deck_mode, + expansion_bay: args.expansion_bay, charge_limit: args.charge_limit, get_gpio: args.get_gpio, fp_led_level: args.fp_led_level, diff --git a/framework_lib/src/commandline/mod.rs b/framework_lib/src/commandline/mod.rs index dd3f7cd6..2a88db09 100644 --- a/framework_lib/src/commandline/mod.rs +++ b/framework_lib/src/commandline/mod.rs @@ -173,6 +173,7 @@ pub struct Cli { pub intrusion: bool, pub inputmodules: bool, pub input_deck_mode: Option, + pub expansion_bay: bool, pub charge_limit: Option>, pub get_gpio: Option, pub fp_led_level: Option>, @@ -761,6 +762,10 @@ pub fn run_with_args(args: &Cli, _allupdate: bool) -> i32 { } else if let Some(mode) = &args.input_deck_mode { println!("Set mode to: {:?}", mode); ec.set_input_deck_mode((*mode).into()).unwrap(); + } else if args.expansion_bay { + if let Err(err) = ec.check_bay_status() { + error!("{:?}", err); + } } else if let Some(maybe_limit) = args.charge_limit { print_err(handle_charge_limit(&ec, maybe_limit)); } else if let Some(gpio_name) = &args.get_gpio { @@ -1080,6 +1085,7 @@ Options: --intrusion Show status of intrusion switch --inputmodules Show status of the input modules (Framework 16 only) --input-deck-mode Set input deck power mode [possible values: auto, off, on] (Framework 16 only) + --expansion-bay Show status of the expansion bay (Framework 16 only) --charge-limit [] Get or set battery charge limit (Percentage number as arg, e.g. '100') --get-gpio Get GPIO value by name --fp-led-level [] Get or set fingerprint LED brightness level [possible values: high, medium, low] diff --git a/framework_lib/src/commandline/uefi.rs b/framework_lib/src/commandline/uefi.rs index 8e612eef..9d3239a5 100644 --- a/framework_lib/src/commandline/uefi.rs +++ b/framework_lib/src/commandline/uefi.rs @@ -86,6 +86,7 @@ pub fn parse(args: &[String]) -> Cli { intrusion: false, inputmodules: false, input_deck_mode: None, + expansion_bay: false, charge_limit: None, get_gpio: None, fp_led_level: None, @@ -247,6 +248,9 @@ pub fn parse(args: &[String]) -> Cli { None }; found_an_option = true; + } else if arg == "--expansion-bay" { + cli.expansion_bay = true; + found_an_option = true; } else if arg == "--charge-limit" { cli.charge_limit = if args.len() > i + 1 { if let Ok(percent) = args[i + 1].parse::() {