Add normalize_peri_name.

This commit is contained in:
Dario Nieuwenhuis 2024-04-28 23:19:15 +02:00
parent ce5c57db68
commit 849ed606a1
7 changed files with 36 additions and 33 deletions

View File

@ -5,6 +5,7 @@ use stm32_data_serde::chip::core::peripheral::Pin;
use super::*; use super::*;
use crate::gpio_af::parse_signal_name; use crate::gpio_af::parse_signal_name;
use crate::normalize_peris::normalize_peri_name;
mod xml { mod xml {
use serde::Deserialize; use serde::Deserialize;
@ -1008,7 +1009,7 @@ fn process_core(
let mut peri_kinds = HashMap::new(); let mut peri_kinds = HashMap::new();
for ip in group.ips.values() { for ip in group.ips.values() {
let pname = ip.instance_name.clone(); let pname = normalize_peri_name(&ip.instance_name);
let pkind = format!("{}:{}", ip.name, ip.version); let pkind = format!("{}:{}", ip.name, ip.version);
let pkind = pkind.strip_suffix("_Cube").unwrap_or(&pkind); let pkind = pkind.strip_suffix("_Cube").unwrap_or(&pkind);
@ -1035,18 +1036,10 @@ fn process_core(
"TOUCHSENSING", "TOUCHSENSING",
]; ];
if FAKE_PERIPHERALS.contains(&pname.as_str()) { if FAKE_PERIPHERALS.contains(&pname) {
continue; continue;
} }
let pname = match pname.as_str() {
"HDMI_CEC" => "CEC".to_string(),
"SUBGHZ" => "SUBGHZSPI".to_string(),
// remove when https://github.com/stm32-rs/stm32-rs/pull/789 merges
"USB_DRD_FS" => "USB".to_string(),
_ => pname,
};
if pname.starts_with("ADC") { if pname.starts_with("ADC") {
if let Entry::Vacant(entry) = peri_kinds.entry("ADC_COMMON".to_string()) { if let Entry::Vacant(entry) = peri_kinds.entry("ADC_COMMON".to_string()) {
entry.insert(format!("ADC_COMMON:{}", ip.version.strip_suffix("_Cube").unwrap())); entry.insert(format!("ADC_COMMON:{}", ip.version.strip_suffix("_Cube").unwrap()));
@ -1057,7 +1050,7 @@ fn process_core(
entry.insert(format!("ADC3_COMMON:{}", ip.version.strip_suffix("_Cube").unwrap())); entry.insert(format!("ADC3_COMMON:{}", ip.version.strip_suffix("_Cube").unwrap()));
} }
} }
peri_kinds.insert(pname, pkind.to_string()); peri_kinds.insert(pname.to_string(), pkind.to_string());
} }
const GHOST_PERIS: &[&str] = &[ const GHOST_PERIS: &[&str] = &[
"GPIOA", "GPIOA",
@ -1169,15 +1162,7 @@ fn process_core(
continue; continue;
} }
let addr = if (chip_name.starts_with("STM32F0") let addr = if let Some(cap) = regex!(r"^FDCANRAM(?P<idx>[0-9]+)$").captures(&pname) {
|| chip_name.starts_with("STM32L1")
|| chip_name.starts_with("STM32L0"))
&& pname == "ADC"
{
defines.get_peri_addr("ADC1")
} else if chip_name.starts_with("STM32H7") && pname == "HRTIM" {
defines.get_peri_addr("HRTIM1")
} else if let Some(cap) = regex!(r"^FDCANRAM(?P<idx>[0-9]+)$").captures(&pname) {
defines.get_peri_addr("FDCANRAM").map(|addr| { defines.get_peri_addr("FDCANRAM").map(|addr| {
if chip_name.starts_with("STM32H7") { if chip_name.starts_with("STM32H7") {
addr addr
@ -1192,10 +1177,7 @@ fn process_core(
defines.get_peri_addr(&pname) defines.get_peri_addr(&pname)
}; };
let addr = match addr { let Some(addr) = addr else { continue };
Some(addr) => addr,
None => continue,
};
let mut p = stm32_data_serde::chip::core::Peripheral { let mut p = stm32_data_serde::chip::core::Peripheral {
name: if pname == "SBS" { name: if pname == "SBS" {

View File

@ -2,6 +2,8 @@ use std::collections::HashMap;
use anyhow::Context; use anyhow::Context;
use crate::normalize_peris::normalize_peri_name;
mod xml { mod xml {
use serde::Deserialize; use serde::Deserialize;
@ -150,7 +152,7 @@ impl DmaChannels {
}; };
chip_dma chip_dma
.peripherals .peripherals
.entry(target_peri_name.to_string()) .entry(normalize_peri_name(target_peri_name).to_string())
.or_default() .or_default()
.push(stm32_data_serde::chip::core::peripheral::DmaChannel { .push(stm32_data_serde::chip::core::peripheral::DmaChannel {
signal: request.to_string(), signal: request.to_string(),
@ -270,7 +272,7 @@ impl DmaChannels {
}; };
chip_dma chip_dma
.peripherals .peripherals
.entry(target_peri_name.to_string()) .entry(normalize_peri_name(target_peri_name).to_string())
.or_default() .or_default()
.push(entry); .push(entry);
} }
@ -320,7 +322,7 @@ impl DmaChannels {
}; };
chip_dma chip_dma
.peripherals .peripherals
.entry(target_peri_name.to_string()) .entry(normalize_peri_name(target_peri_name).to_string())
.or_default() .or_default()
.push(stm32_data_serde::chip::core::peripheral::DmaChannel { .push(stm32_data_serde::chip::core::peripheral::DmaChannel {
signal: request.to_string(), signal: request.to_string(),

View File

@ -1,5 +1,6 @@
use std::collections::HashMap; use std::collections::HashMap;
use crate::normalize_peris::normalize_peri_name;
use crate::regex; use crate::regex;
mod xml { mod xml {
@ -121,6 +122,6 @@ pub fn parse_signal_name(signal_name: &str) -> Option<(&str, &str)> {
Some((peri_name, signal_name.strip_suffix("OUT").unwrap_or(signal_name))) Some((peri_name, signal_name.strip_suffix("OUT").unwrap_or(signal_name)))
} else { } else {
Some((peri_name, signal_name)) Some((normalize_peri_name(peri_name), signal_name))
} }
} }

View File

@ -175,6 +175,7 @@ impl Defines {
&["OCTOSPI2_R_BASE", "OCTOSPI2_R_BASE_NS", "OCTOSPI2_REG_BASE"], &["OCTOSPI2_R_BASE", "OCTOSPI2_R_BASE_NS", "OCTOSPI2_REG_BASE"],
), ),
("FLASH", &["FLASH_R_BASE", "FLASH_REG_BASE"]), ("FLASH", &["FLASH_R_BASE", "FLASH_REG_BASE"]),
("ADC", &["ADC1_BASE", "ADC_BASE"]),
( (
"ADC_COMMON", "ADC_COMMON",
&["ADC_COMMON", "ADC1_COMMON", "ADC12_COMMON", "ADC123_COMMON"], &["ADC_COMMON", "ADC1_COMMON", "ADC12_COMMON", "ADC123_COMMON"],

View File

@ -3,6 +3,7 @@ use std::collections::{HashMap, HashSet};
use log::*; use log::*;
use crate::chips::ChipGroup; use crate::chips::ChipGroup;
use crate::normalize_peris::normalize_peri_name;
use crate::regex; use crate::regex;
mod xml { mod xml {
@ -342,6 +343,7 @@ impl ChipInterrupts {
} }
for (p, s) in interrupt_signals { for (p, s) in interrupt_signals {
let p = normalize_peri_name(&p).to_string();
let signals = chip_signals.entry(p).or_default(); let signals = chip_signals.entry(p).or_default();
let irqs = signals.entry(s).or_default(); let irqs = signals.entry(s).or_default();
irqs.insert(header_name.clone()); irqs.insert(header_name.clone());

View File

@ -5,6 +5,7 @@ mod gpio_af;
mod header; mod header;
mod interrupts; mod interrupts;
mod memory; mod memory;
mod normalize_peris;
mod rcc; mod rcc;
mod registers; mod registers;

View File

@ -0,0 +1,14 @@
#[rustfmt::skip]
static NORMALIZE: &[(&str, &str)] = &[
("HRTIM", "HRTIM1"),
("HDMI_CEC", "CEC"),
("SUBGHZ", "SUBGHZSPI"),
("USB_DRD_FS", "USB"),
];
pub fn normalize_peri_name(name: &str) -> &str {
if let Some((_, res)) = NORMALIZE.iter().find(|(n, _)| *n == name) {
return res;
}
return name;
}