|
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 | + } |
| 573 | + } else { |
| 574 | + error!("Failed to get charging information"); |
| 575 | + // Not charging is the safe default |
| 576 | + return 1; |
| 577 | + } |
| 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 | + } |
557 | 588 | } else { |
| 589 | + error!("Failed to get charging information"); |
| 590 | + // Not charging is the safe default |
558 | 591 | return 1; |
559 | 592 | } |
560 | 593 | } |
| 594 | + None | _ => {} |
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