|
3 | 3 | //! Can be easily re-used from any OS or UEFI shell.
|
4 | 4 | //! We have implemented both in the `framework_tool` and `framework_uefi` crates.
|
5 | 5 |
|
| 6 | +use alloc::format; |
6 | 7 | use alloc::string::String;
|
7 | 8 | use alloc::string::ToString;
|
8 | 9 | use alloc::vec::Vec;
|
@@ -525,39 +526,72 @@ fn compare_version(device: Option<HardwareDeviceType>, version: String, ec: &Cro
|
525 | 526 | }
|
526 | 527 | }
|
527 | 528 |
|
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); |
542 | 533 |
|
543 | 534 | if ver.contains(&version) {
|
544 | 535 | return 0;
|
545 | 536 | } else {
|
546 | 537 | return 1;
|
547 | 538 | }
|
548 | 539 | }
|
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 | + } |
557 | 573 | } else {
|
| 574 | + error!("Failed to get charging information"); |
| 575 | + // Not charging is the safe default |
558 | 576 | return 1;
|
559 | 577 | }
|
560 | 578 | }
|
| 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 | + _ => {} |
561 | 595 | }
|
562 | 596 |
|
563 | 597 | if let Some(esrt) = esrt::get_esrt() {
|
@@ -647,7 +681,7 @@ pub fn run_with_args(args: &Cli, _allupdate: bool) -> i32 {
|
647 | 681 | print_esrt();
|
648 | 682 | } else if let Some(compare_version_ver) = &args.compare_version {
|
649 | 683 | 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); |
651 | 685 | return compare_ret;
|
652 | 686 | } else if args.intrusion {
|
653 | 687 | println!("Chassis status:");
|
|
0 commit comments