Add per-package pinouts.
This commit is contained in:
parent
f1297385e9
commit
893d7ff36b
@ -12,7 +12,7 @@ families, including:
|
|||||||
- :x: GPIO mappings for F1
|
- :x: GPIO mappings for F1
|
||||||
- :construction: Register blocks for all peripherals
|
- :construction: Register blocks for all peripherals
|
||||||
- :heavy_check_mark: DMA stream mappings
|
- :heavy_check_mark: DMA stream mappings
|
||||||
- :x: Per-package pinouts
|
- :heavy_check_mark: Per-package pinouts
|
||||||
- :heavy_check_mark: Links to applicable reference manuals, datasheets, appnotes PDFs.
|
- :heavy_check_mark: Links to applicable reference manuals, datasheets, appnotes PDFs.
|
||||||
|
|
||||||
:heavy_check_mark: = done, :construction: = work in progress, :x: = to do
|
:heavy_check_mark: = done, :construction: = work in progress, :x: = to do
|
||||||
|
@ -38,6 +38,8 @@ mod xml {
|
|||||||
pub struct Pin {
|
pub struct Pin {
|
||||||
#[serde(rename = "Name")]
|
#[serde(rename = "Name")]
|
||||||
pub name: String,
|
pub name: String,
|
||||||
|
#[serde(rename = "Position")]
|
||||||
|
pub position: String,
|
||||||
#[serde(rename = "Signal", default)]
|
#[serde(rename = "Signal", default)]
|
||||||
pub signals: Vec<PinSignal>,
|
pub signals: Vec<PinSignal>,
|
||||||
}
|
}
|
||||||
@ -885,6 +887,25 @@ fn parse_group(
|
|||||||
group_idx
|
group_idx
|
||||||
});
|
});
|
||||||
|
|
||||||
|
let mut package_pins: HashMap<String, Vec<String>> = HashMap::new();
|
||||||
|
for pin in &parsed.pins {
|
||||||
|
package_pins
|
||||||
|
.entry(pin.position.clone())
|
||||||
|
.or_default()
|
||||||
|
.push(gpio_af::clean_pin(&pin.name).unwrap_or_else(|| pin.name.clone()));
|
||||||
|
}
|
||||||
|
let mut package_pins: Vec<stm32_data_serde::chip::PackagePin> = package_pins
|
||||||
|
.into_iter()
|
||||||
|
.map(|(position, mut signals)| {
|
||||||
|
signals.sort();
|
||||||
|
stm32_data_serde::chip::PackagePin { position, signals }
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
package_pins.sort_by_key(|p| match p.position.parse::<u32>() {
|
||||||
|
Ok(n) => (Some(n), None),
|
||||||
|
Err(_) => (None, Some(p.position.clone())),
|
||||||
|
});
|
||||||
|
|
||||||
for (package_i, package_name) in package_names.iter().enumerate() {
|
for (package_i, package_name) in package_names.iter().enumerate() {
|
||||||
let chip_name = chip_name_from_package_name(package_name);
|
let chip_name = chip_name_from_package_name(package_name);
|
||||||
if !chips.contains_key(&chip_name) {
|
if !chips.contains_key(&chip_name) {
|
||||||
@ -905,6 +926,7 @@ fn parse_group(
|
|||||||
.push(stm32_data_serde::chip::Package {
|
.push(stm32_data_serde::chip::Package {
|
||||||
name: package_name.clone(),
|
name: package_name.clone(),
|
||||||
package: parsed.package.clone(),
|
package: parsed.package.clone(),
|
||||||
|
pins: package_pins.clone(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,6 +34,13 @@ pub mod chip {
|
|||||||
pub struct Package {
|
pub struct Package {
|
||||||
pub name: String,
|
pub name: String,
|
||||||
pub package: String,
|
pub package: String,
|
||||||
|
pub pins: Vec<PackagePin>,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Eq, PartialEq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||||
|
pub struct PackagePin {
|
||||||
|
pub position: String,
|
||||||
|
pub signals: Vec<String>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Eq, PartialEq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
#[derive(Clone, Debug, Eq, PartialEq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user