Skip to content

Commit 69c97b0

Browse files
committed
compare_version: Allow checking ac charging state
Signed-off-by: Daniel Schaefer <[email protected]>
1 parent 8935ba2 commit 69c97b0

File tree

3 files changed

+60
-23
lines changed

3 files changed

+60
-23
lines changed

framework_lib/src/chromium_ec/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -873,6 +873,8 @@ pub enum HardwareDeviceType {
873873
PD1,
874874
RTM01,
875875
RTM23,
876+
AcLeft,
877+
AcRight,
876878
}
877879

878880
impl CrosEcDriver for CrosEc {

framework_lib/src/commandline/mod.rs

Lines changed: 57 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
//! Can be easily re-used from any OS or UEFI shell.
44
//! We have implemented both in the `framework_tool` and `framework_uefi` crates.
55
6+
use alloc::format;
67
use alloc::string::String;
78
use alloc::string::ToString;
89
use alloc::vec::Vec;
@@ -525,39 +526,72 @@ fn compare_version(device: Option<HardwareDeviceType>, version: String, ec: &Cro
525526
}
526527
}
527528

528-
if device == Some(HardwareDeviceType::EC) {
529-
let ver = print_err(ec.version_info()).unwrap_or_else(|| "UNKNOWN".to_string());
530-
println!("Comparing EC version {:?}", ver);
531-
532-
if ver.contains(&version) {
533-
return 0;
534-
} else {
535-
return 1;
536-
}
537-
}
538-
if device == Some(HardwareDeviceType::PD0) {
539-
if let Ok(pd_versions) = ccgx::get_pd_controller_versions(ec) {
540-
let ver = pd_versions.controller01.active_fw_ver();
541-
println!("Comparing PD0 version {:?}", ver);
529+
match device {
530+
Some(HardwareDeviceType::EC) => {
531+
let ver = print_err(ec.version_info()).unwrap_or_else(|| "UNKNOWN".to_string());
532+
println!("Comparing EC version {:?}", ver);
542533

543534
if ver.contains(&version) {
544535
return 0;
545536
} else {
546537
return 1;
547538
}
548539
}
549-
}
550-
if device == Some(HardwareDeviceType::PD1) {
551-
if let Ok(pd_versions) = ccgx::get_pd_controller_versions(ec) {
552-
let ver = pd_versions.controller23.active_fw_ver();
553-
println!("Comparing PD1 version {:?}", ver);
554-
555-
if ver.contains(&version) {
556-
return 0;
540+
Some(HardwareDeviceType::PD0) => {
541+
if let Ok(pd_versions) = ccgx::get_pd_controller_versions(ec) {
542+
let ver = pd_versions.controller01.active_fw_ver();
543+
println!("Comparing PD0 version {:?}", ver);
544+
545+
if ver.contains(&version) {
546+
return 0;
547+
} else {
548+
return 1;
549+
}
550+
}
551+
}
552+
Some(HardwareDeviceType::PD1) => {
553+
if let Ok(pd_versions) = ccgx::get_pd_controller_versions(ec) {
554+
let ver = pd_versions.controller23.active_fw_ver();
555+
println!("Comparing PD1 version {:?}", ver);
556+
557+
if ver.contains(&version) {
558+
return 0;
559+
} else {
560+
return 1;
561+
}
562+
}
563+
}
564+
Some(HardwareDeviceType::AcLeft) => {
565+
if let Ok((_right, left)) = power::is_charging(ec) {
566+
let ver = format!("{}", left as i32);
567+
println!("Comparing AcLeft {:?}", ver);
568+
if ver == version {
569+
return 0;
570+
} else {
571+
return 1;
572+
}
557573
} else {
574+
error!("Failed to get charging information");
575+
// Not charging is the safe default
558576
return 1;
559577
}
560578
}
579+
Some(HardwareDeviceType::AcRight) => {
580+
if let Ok((right, _left)) = power::is_charging(ec) {
581+
let ver = format!("{}", right as i32);
582+
println!("Comparing AcRight {:?}", ver);
583+
if ver == version {
584+
return 0;
585+
} else {
586+
return 1;
587+
}
588+
} else {
589+
error!("Failed to get charging information");
590+
// Not charging is the safe default
591+
return 1;
592+
}
593+
}
594+
_ => {}
561595
}
562596

563597
if let Some(esrt) = esrt::get_esrt() {
@@ -647,7 +681,7 @@ pub fn run_with_args(args: &Cli, _allupdate: bool) -> i32 {
647681
print_esrt();
648682
} else if let Some(compare_version_ver) = &args.compare_version {
649683
let compare_ret = compare_version(args.device, compare_version_ver.to_string(), &ec);
650-
println!("Compared version: {}", compare_ret);
684+
println!("Comparison Result: {}", compare_ret);
651685
return compare_ret;
652686
} else if args.intrusion {
653687
println!("Chassis status:");

framework_lib/src/power.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,7 @@ pub fn get_and_print_pd_info(ec: &CrosEc) {
560560
}
561561

562562
// TODO: Improve return type to be more obvious
563+
// (right, left)
563564
pub fn is_charging(ec: &CrosEc) -> EcResult<(bool, bool)> {
564565
let port0 = check_ac(ec, 0)?.role == UsbPowerRoles::Sink;
565566
let port1 = check_ac(ec, 1)?.role == UsbPowerRoles::Sink;

0 commit comments

Comments
 (0)