Skip to content

Commit 4416d38

Browse files
Merge pull request #166 from FrameworkComputer/3pds
Add support for dynamic number of PDs
2 parents 3169053 + 26d6eca commit 4416d38

File tree

6 files changed

+56
-24
lines changed

6 files changed

+56
-24
lines changed

framework_lib/src/ccgx/device.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,9 @@ impl PdPort {
3939
));
4040

4141
Ok(match (platform, self) {
42-
(Platform::GenericFramework((left, _), _), PdPort::Left01) => *left,
43-
(Platform::GenericFramework((_, right), _), PdPort::Right23) => *right,
42+
(Platform::GenericFramework((left, _, _), _), PdPort::Left01) => *left,
43+
(Platform::GenericFramework((_, right, _), _), PdPort::Right23) => *right,
44+
(Platform::GenericFramework((_, _, back), _), PdPort::Back) => *back,
4445
// Framework AMD Platforms (CCG8)
4546
(
4647
Platform::Framework13Amd7080
@@ -54,6 +55,7 @@ impl PdPort {
5455
| Platform::Framework16Amd7080,
5556
PdPort::Right23,
5657
) => 0x40,
58+
(Platform::Framework16Amd7080, PdPort::Back) => 0x42,
5759
(Platform::FrameworkDesktopAmdAiMax300, PdPort::Back) => 0x08,
5860
(Platform::FrameworkDesktopAmdAiMax300, _) => unsupported?,
5961
// Framework Intel Platforms (CCG5 and CCG6)
@@ -90,8 +92,9 @@ impl PdPort {
9092
)));
9193

9294
Ok(match (platform, self) {
93-
(Platform::GenericFramework(_, (left, _)), PdPort::Left01) => *left,
94-
(Platform::GenericFramework(_, (_, right)), PdPort::Right23) => *right,
95+
(Platform::GenericFramework(_, (left, _, _)), PdPort::Left01) => *left,
96+
(Platform::GenericFramework(_, (_, right, _)), PdPort::Right23) => *right,
97+
(Platform::GenericFramework(_, (_, _, back)), PdPort::Back) => *back,
9598
(Platform::IntelGen11, _) => 6,
9699
(Platform::IntelGen12 | Platform::IntelGen13, PdPort::Left01) => 6,
97100
(Platform::IntelGen12 | Platform::IntelGen13, PdPort::Right23) => 7,
@@ -111,6 +114,7 @@ impl PdPort {
111114
| Platform::Framework12IntelGen13,
112115
PdPort::Right23,
113116
) => 2,
117+
(Platform::Framework16Amd7080, PdPort::Back) => 5,
114118
(Platform::FrameworkDesktopAmdAiMax300, PdPort::Back) => 1,
115119
(Platform::FrameworkDesktopAmdAiMax300, _) => unsupported?,
116120
(Platform::UnknownSystem, _) => {

framework_lib/src/commandline/clap_std.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -238,12 +238,12 @@ struct ClapCli {
238238
driver: Option<CrosEcDriverType>,
239239

240240
/// Specify I2C addresses of the PD chips (Advanced)
241-
#[clap(number_of_values = 2, requires("pd_ports"))]
241+
#[clap(number_of_values = 3, requires("pd_ports"))]
242242
#[arg(long)]
243243
pd_addrs: Vec<u16>,
244244

245245
/// Specify I2C ports of the PD chips (Advanced)
246-
#[clap(number_of_values = 2, requires("pd_addrs"))]
246+
#[clap(number_of_values = 3, requires("pd_addrs"))]
247247
#[arg(long)]
248248
pd_ports: Vec<u8>,
249249

@@ -317,13 +317,13 @@ pub fn parse(args: &[String]) -> Cli {
317317
.unwrap();
318318

319319
let pd_addrs = match args.pd_addrs.len() {
320-
2 => Some((args.pd_addrs[0], args.pd_addrs[1])),
320+
3 => Some((args.pd_addrs[0], args.pd_addrs[1], args.pd_addrs[2])),
321321
0 => None,
322322
// Checked by clap
323323
_ => unreachable!(),
324324
};
325325
let pd_ports = match args.pd_ports.len() {
326-
2 => Some((args.pd_ports[0], args.pd_ports[1])),
326+
3 => Some((args.pd_ports[0], args.pd_ports[1], args.pd_ports[2])),
327327
0 => None,
328328
// Checked by clap
329329
_ => unreachable!(),

framework_lib/src/commandline/mod.rs

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ pub struct Cli {
193193
pub reboot_ec: Option<RebootEcArg>,
194194
pub ec_hib_delay: Option<Option<u32>>,
195195
pub hash: Option<String>,
196-
pub pd_addrs: Option<(u16, u16)>,
197-
pub pd_ports: Option<(u8, u8)>,
196+
pub pd_addrs: Option<(u16, u16, u16)>,
197+
pub pd_ports: Option<(u8, u8, u8)>,
198198
pub help: bool,
199199
pub info: bool,
200200
pub flash_gpu_descriptor: Option<(u8, String)>,
@@ -234,11 +234,14 @@ fn print_pd_details(ec: &CrosEc) {
234234
}
235235
let pd_01 = PdController::new(PdPort::Left01, ec.clone());
236236
let pd_23 = PdController::new(PdPort::Right23, ec.clone());
237+
let pd_back = PdController::new(PdPort::Back, ec.clone());
237238

238239
println!("Left / Ports 01");
239240
print_single_pd_details(&pd_01);
240241
println!("Right / Ports 23");
241242
print_single_pd_details(&pd_23);
243+
println!("Back");
244+
print_single_pd_details(&pd_back);
242245
}
243246

244247
#[cfg(feature = "hidapi")]
@@ -474,6 +477,27 @@ fn print_versions(ec: &CrosEc) {
474477
left.main_fw.app, left.active_fw
475478
);
476479
}
480+
} else if let Ok(PdVersions::Many(versions)) = ccgx_pd_vers {
481+
for (i, version) in versions.into_iter().enumerate() {
482+
if version.main_fw.app != version.backup_fw.app {
483+
println!(" PD {}", 1);
484+
println!(
485+
" Main: {}{}",
486+
version.main_fw.app,
487+
active_mode(&version.active_fw, FwMode::MainFw)
488+
);
489+
println!(
490+
" Backup: {}{}",
491+
version.backup_fw.app,
492+
active_mode(&version.active_fw, FwMode::BackupFw)
493+
);
494+
} else {
495+
println!(
496+
" PD {}: {} ({:?})",
497+
i, version.main_fw.app, version.active_fw
498+
);
499+
}
500+
}
477501
} else if let Ok(PdVersions::Single(pd)) = ccgx_pd_vers {
478502
if pd.main_fw.app != pd.backup_fw.app {
479503
println!(

framework_lib/src/commandline/uefi.rs

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -602,35 +602,39 @@ pub fn parse(args: &[String]) -> Cli {
602602
};
603603
found_an_option = true;
604604
} else if arg == "--pd-addrs" {
605-
cli.pd_addrs = if args.len() > i + 2 {
605+
cli.pd_addrs = if args.len() > i + 3 {
606606
let left = args[i + 1].parse::<u16>();
607607
let right = args[i + 2].parse::<u16>();
608-
if left.is_ok() && right.is_ok() {
609-
Some((left.unwrap(), right.unwrap()))
608+
let back = args[i + 3].parse::<u16>();
609+
if left.is_ok() && right.is_ok() && back.is_ok() {
610+
Some((left.unwrap(), right.unwrap(), back.unwrap()))
610611
} else {
611612
println!(
612-
"Invalid values for --pd-addrs: '{} {}'. Must be u16 integers.",
613+
"Invalid values for --pd-addrs: '{} {} {}'. Must be u16 integers.",
613614
args[i + 1],
614-
args[i + 2]
615+
args[i + 2],
616+
args[i + 3]
615617
);
616618
None
617619
}
618620
} else {
619-
println!("--pd-addrs requires two arguments, one for each address");
621+
println!("--pd-addrs requires three arguments, one for each address");
620622
None
621623
};
622624
found_an_option = true;
623625
} else if arg == "--pd-ports" {
624-
cli.pd_ports = if args.len() > i + 2 {
626+
cli.pd_ports = if args.len() > i + 3 {
625627
let left = args[i + 1].parse::<u8>();
626628
let right = args[i + 2].parse::<u8>();
627-
if left.is_ok() && right.is_ok() {
628-
Some((left.unwrap(), right.unwrap()))
629+
let back = args[i + 3].parse::<u8>();
630+
if left.is_ok() && right.is_ok() && back.is_ok() {
631+
Some((left.unwrap(), right.unwrap(), back.unwrap()))
629632
} else {
630633
println!(
631-
"Invalid values for --pd-ports: '{} {}'. Must be u16 integers.",
634+
"Invalid values for --pd-ports: '{} {} {}'. Must be u16 integers.",
632635
args[i + 1],
633-
args[i + 2]
636+
args[i + 2],
637+
args[i + 3]
634638
);
635639
None
636640
}

framework_lib/src/smbios.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ pub enum ConfigDigit0 {
4747
pub fn is_framework() -> bool {
4848
if matches!(
4949
get_platform(),
50-
Some(Platform::GenericFramework((_, _), (_, _))) | Some(Platform::UnknownSystem)
50+
Some(Platform::GenericFramework((_, _, _), (_, _, _))) | Some(Platform::UnknownSystem)
5151
) {
5252
return true;
5353
}
@@ -292,7 +292,7 @@ pub fn get_platform() -> Option<Platform> {
292292
let platform = &(*config).as_ref().unwrap().platform;
293293
if matches!(
294294
platform,
295-
Platform::GenericFramework((_, _), (_, _)) | Platform::UnknownSystem
295+
Platform::GenericFramework((_, _, _), (_, _, _)) | Platform::UnknownSystem
296296
) {
297297
return Some(*platform);
298298
}

framework_lib/src/util.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ pub enum Platform {
3737
FrameworkDesktopAmdAiMax300,
3838
/// Generic Framework device
3939
/// pd_addrs, pd_ports
40-
GenericFramework((u16, u16), (u8, u8)),
40+
GenericFramework((u16, u16, u16), (u8, u8, u8)),
4141
UnknownSystem,
4242
}
4343

0 commit comments

Comments
 (0)