Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion completions/bash/framework_tool
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ _framework_tool() {

case "${cmd}" in
framework_tool)
opts="-v -q -t -f -h --flash-gpu-descriptor --verbose --quiet --versions --version --features --esrt --device --compare-version --power --thermal --sensors --fansetduty --fansetrpm --autofanctrl --pdports --info --meinfo --pd-info --pd-reset --pd-disable --pd-enable --dp-hdmi-info --dp-hdmi-update --audio-card-info --privacy --pd-bin --ec-bin --capsule --dump --h2o-capsule --dump-ec-flash --flash-ec --flash-ro-ec --flash-rw-ec --intrusion --inputdeck --inputdeck-mode --expansion-bay --charge-limit --charge-current-limit --charge-rate-limit --get-gpio --fp-led-level --fp-brightness --kblight --remap-key --rgbkbd --ps2-enable --tablet-mode --touchscreen-enable --stylus-battery --console --reboot-ec --ec-hib-delay --uptimeinfo --s0ix-counter --hash --driver --pd-addrs --pd-ports --test --test-retimer --boardid --force --dry-run --flash-gpu-descriptor-file --dump-gpu-descriptor-file --nvidia --host-command --generate-completions --help"
opts="-v -q -t -f -h --flash-gpu-descriptor --verbose --quiet --versions --version --features --esrt --device --compare-version --power --thermal --sensors --fansetduty --fansetrpm --autofanctrl --pdports --info --meinfo --pd-info --pd-reset --pd-disable --pd-enable --dp-hdmi-info --dp-hdmi-update --audio-card-info --privacy --pd-bin --ec-bin --capsule --dump --h2o-capsule --dump-ec-flash --flash-ec --flash-ro-ec --flash-rw-ec --intrusion --inputdeck --inputdeck-mode --expansion-bay --charge-limit --charge-current-limit --charge-rate-limit --get-gpio --set-gpio --fp-led-level --fp-brightness --kblight --remap-key --rgbkbd --ps2-enable --tablet-mode --touchscreen-enable --stylus-battery --console --reboot-ec --ec-hib-delay --uptimeinfo --s0ix-counter --hash --driver --pd-addrs --pd-ports --test --test-retimer --boardid --force --dry-run --flash-gpu-descriptor-file --dump-gpu-descriptor-file --nvidia --host-command --generate-completions --help"
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
COMPREPLY=( $(compgen -W "${opts}" -- "${cur}") )
return 0
Expand Down Expand Up @@ -129,6 +129,10 @@ _framework_tool() {
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--set-gpio)
COMPREPLY=($(compgen -f "${cur}"))
return 0
;;
--fp-led-level)
COMPREPLY=($(compgen -W "high medium low ultra-low auto" -- "${cur}"))
return 0
Expand Down
1 change: 1 addition & 0 deletions completions/fish/framework_tool.fish
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ complete -c framework_tool -l charge-limit -d 'Get or set max charge limit' -r
complete -c framework_tool -l charge-current-limit -d 'Set max charge current limit' -r
complete -c framework_tool -l charge-rate-limit -d 'Set max charge current limit' -r
complete -c framework_tool -l get-gpio -d 'Get GPIO value by name or all, if no name provided' -r
complete -c framework_tool -l set-gpio -d 'Set GPIO value by name. Args: <NAME> <0|1> (Dangerous, requires --force)' -r
complete -c framework_tool -l fp-led-level -d 'Get or set fingerprint LED brightness level' -r -f -a "high\t''
medium\t''
low\t''
Expand Down
1 change: 1 addition & 0 deletions completions/zsh/_framework_tool
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ _framework_tool() {
'*--charge-current-limit=[Set max charge current limit]:CHARGE_CURRENT_LIMIT:_default' \
'*--charge-rate-limit=[Set max charge current limit]:CHARGE_RATE_LIMIT:_default' \
'--get-gpio=[Get GPIO value by name or all, if no name provided]::GET_GPIO:_default' \
'*--set-gpio=[Set GPIO value by name. Args\: <NAME> <0|1> (Dangerous, requires --force)]:NAME:_default:NAME:_default' \
'--fp-led-level=[Get or set fingerprint LED brightness level]::FP_LED_LEVEL:(high medium low ultra-low auto)' \
'--fp-brightness=[Get or set fingerprint LED brightness percentage]::FP_BRIGHTNESS:_default' \
'--kblight=[Set keyboard backlight percentage or get, if no value provided]::KBLIGHT:_default' \
Expand Down
10 changes: 10 additions & 0 deletions framework_lib/src/commandline/clap_std.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,11 @@ struct ClapCli {
#[arg(long)]
get_gpio: Option<Option<String>>,

/// Set GPIO value by name. Args: <NAME> <0|1> (Dangerous, requires --force)
#[arg(long, value_names(["NAME", "VALUE"]))]
#[clap(num_args = 2)]
set_gpio: Vec<String>,

/// Get or set fingerprint LED brightness level
#[arg(long)]
fp_led_level: Option<Option<FpBrightnessArg>>,
Expand Down Expand Up @@ -424,6 +429,10 @@ pub fn parse(args: &[String]) -> Cli {
)),
_ => None,
};
let set_gpio = match args.set_gpio.len() {
2 => Some((args.set_gpio[0].clone(), args.set_gpio[1].clone())),
_ => None,
};
let host_command = if args.host_command.len() >= 2 {
let cmd_ver = if let Ok(cmd_ver) = u8::try_from(args.host_command[1]) {
cmd_ver
Expand Down Expand Up @@ -514,6 +523,7 @@ pub fn parse(args: &[String]) -> Cli {
charge_current_limit,
charge_rate_limit,
get_gpio: args.get_gpio,
set_gpio,
fp_led_level: args.fp_led_level,
fp_brightness: args.fp_brightness,
kblight: args.kblight,
Expand Down
17 changes: 17 additions & 0 deletions framework_lib/src/commandline/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,7 @@ pub struct Cli {
pub charge_current_limit: Option<(u32, Option<u32>)>,
pub charge_rate_limit: Option<(f32, Option<f32>)>,
pub get_gpio: Option<Option<String>>,
pub set_gpio: Option<(String, String)>,
pub fp_led_level: Option<Option<FpBrightnessArg>>,
pub fp_brightness: Option<Option<u8>>,
pub kblight: Option<Option<u8>>,
Expand Down Expand Up @@ -290,6 +291,7 @@ pub fn parse(args: &[String]) -> Cli {
// charge_current_limit
// charge_rate_limit
get_gpio: cli.get_gpio,
// set_gpio
fp_led_level: cli.fp_led_level,
fp_brightness: cli.fp_brightness,
kblight: cli.kblight,
Expand Down Expand Up @@ -1413,6 +1415,20 @@ pub fn run_with_args(args: &Cli, _allupdate: bool) -> i32 {
} else {
print_err(ec.get_all_gpios());
}
} else if let Some((gpio_name, gpio_value)) = &args.set_gpio {
if args.force {
let value = match gpio_value.as_str() {
"0" => false,
"1" => true,
_ => {
error!("GPIO value must be 0 or 1");
return 1;
}
};
print_err(ec.set_gpio(gpio_name, value));
} else {
error!("--set-gpio is a dangerous command that can brick or burn your system. Not supported without --force");
}
} else if let Some(maybe_led_level) = &args.fp_led_level {
print_err(handle_fp_led_level(&ec, *maybe_led_level));
} else if let Some(maybe_brightness) = &args.fp_brightness {
Expand Down Expand Up @@ -1854,6 +1870,7 @@ Options:
--charge-current-limit [<VAL>] Get or set battery current charge limit (Percentage number as arg, e.g. '100')
--charge-rate-limit [<VAL>] Set max charge rate limit
--get-gpio <GET_GPIO> Get GPIO value by name or all, if no name provided
--set-gpio <NAME> <0|1> Set GPIO value by name (Dangerous, requires --force)
--fp-led-level [<VAL>] Get or set fingerprint LED brightness level [possible values: high, medium, low]
--fp-brightness [<VAL>]Get or set fingerprint LED brightness percentage
--kblight [<KBLIGHT>] Set keyboard backlight percentage or get, if no value provided
Expand Down
8 changes: 8 additions & 0 deletions framework_lib/src/commandline/uefi.rs
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ pub fn parse(args: &[String]) -> Cli {
charge_current_limit: None,
charge_rate_limit: None,
get_gpio: None,
set_gpio: None,
fp_led_level: None,
fp_brightness: None,
kblight: None,
Expand Down Expand Up @@ -348,6 +349,13 @@ pub fn parse(args: &[String]) -> Cli {
Some(None)
};
found_an_option = true;
} else if arg == "--set-gpio" {
if args.len() > i + 2 {
cli.set_gpio = Some((args[i + 1].clone(), args[i + 2].clone()));
} else {
println!("--set-gpio requires two arguments: <NAME> <0|1>");
}
found_an_option = true;
} else if arg == "--kblight" {
cli.kblight = if args.len() > i + 1 {
if let Ok(percent) = args[i + 1].parse::<u8>() {
Expand Down
Loading