From 0db4da10f81bd2fd83f95fe752dcf3c3352c3af5 Mon Sep 17 00:00:00 2001 From: Dario Nieuwenhuis Date: Mon, 22 Nov 2021 02:37:46 +0100 Subject: [PATCH] stm32-metapac-gen: separate data structs --- stm32-metapac-gen/src/data.rs | 105 ++++++++++++++++++++++++++++++++++ stm32-metapac-gen/src/lib.rs | 105 +--------------------------------- 2 files changed, 107 insertions(+), 103 deletions(-) create mode 100644 stm32-metapac-gen/src/data.rs diff --git a/stm32-metapac-gen/src/data.rs b/stm32-metapac-gen/src/data.rs new file mode 100644 index 00000000..deaf09d3 --- /dev/null +++ b/stm32-metapac-gen/src/data.rs @@ -0,0 +1,105 @@ +use serde::Deserialize; +use std::collections::{BTreeMap, HashMap}; + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] +pub struct Chip { + pub name: String, + pub family: String, + pub line: String, + pub cores: Vec, + pub flash: Memory, + pub ram: Memory, + pub packages: Vec, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] +pub struct Memory { + pub bytes: u32, + pub regions: HashMap, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] +pub struct MemoryRegion { + pub base: u32, + pub bytes: Option, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] +pub struct Core { + pub name: String, + pub peripherals: BTreeMap, + pub interrupts: BTreeMap, + pub dma_channels: BTreeMap, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] +pub struct Package { + pub name: String, + pub package: String, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] +pub struct Peripheral { + pub address: u64, + #[serde(default)] + pub kind: Option, + #[serde(default)] + pub block: Option, + #[serde(default)] + pub clock: Option, + #[serde(default)] + pub pins: Vec, + #[serde(default)] + pub dma_channels: BTreeMap>, + #[serde(default)] + pub interrupts: BTreeMap, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] +pub struct Pin { + pub pin: String, + pub signal: String, + pub af: Option, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] +pub struct DmaChannel { + pub dma: String, + pub channel: u32, + pub dmamux: Option, + pub dmamux_channel: Option, +} + +#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Hash)] +pub struct PeripheralDmaChannel { + pub channel: Option, + pub dmamux: Option, + pub request: Option, +} + +pub struct BlockInfo { + /// usart_v1/USART -> usart + pub module: String, + /// usart_v1/USART -> v1 + pub version: String, + /// usart_v1/USART -> USART + pub block: String, +} + +impl BlockInfo { + pub fn parse(s: &str) -> Self { + let mut s = s.split('/'); + let module = s.next().unwrap(); + let block = s.next().unwrap(); + assert!(s.next().is_none()); + let mut s = module.split('_'); + let module = s.next().unwrap(); + let version = s.next().unwrap(); + assert!(s.next().is_none()); + Self { + module: module.to_string(), + version: version.to_string(), + block: block.to_string(), + } + } +} diff --git a/stm32-metapac-gen/src/lib.rs b/stm32-metapac-gen/src/lib.rs index 3480ac36..00268bb0 100644 --- a/stm32-metapac-gen/src/lib.rs +++ b/stm32-metapac-gen/src/lib.rs @@ -1,7 +1,6 @@ use chiptool::generate::CommonModule; use chiptool::ir::IR; use regex::Regex; -use serde::Deserialize; use std::collections::{BTreeMap, HashMap, HashSet}; use std::env; use std::fmt::Write as _; @@ -14,108 +13,8 @@ use std::path::PathBuf; use chiptool::util::ToSanitizedSnakeCase; use chiptool::{generate, ir, transform}; -#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] -pub struct Chip { - pub name: String, - pub family: String, - pub line: String, - pub cores: Vec, - pub flash: Memory, - pub ram: Memory, - pub packages: Vec, -} - -#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] -pub struct Memory { - pub bytes: u32, - pub regions: HashMap, -} - -#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] -pub struct MemoryRegion { - pub base: u32, - pub bytes: Option, -} - -#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] -pub struct Core { - pub name: String, - pub peripherals: BTreeMap, - pub interrupts: BTreeMap, - pub dma_channels: BTreeMap, -} - -#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] -pub struct Package { - pub name: String, - pub package: String, -} - -#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] -pub struct Peripheral { - pub address: u64, - #[serde(default)] - pub kind: Option, - #[serde(default)] - pub block: Option, - #[serde(default)] - pub clock: Option, - #[serde(default)] - pub pins: Vec, - #[serde(default)] - pub dma_channels: BTreeMap>, - #[serde(default)] - pub interrupts: BTreeMap, -} - -#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] -pub struct Pin { - pub pin: String, - pub signal: String, - pub af: Option, -} - -#[derive(Debug, Eq, PartialEq, Clone, Deserialize)] -pub struct DmaChannel { - pub dma: String, - pub channel: u32, - pub dmamux: Option, - pub dmamux_channel: Option, -} - -#[derive(Debug, Eq, PartialEq, Clone, Deserialize, Hash)] -pub struct PeripheralDmaChannel { - pub channel: Option, - pub dmamux: Option, - pub request: Option, -} - -struct BlockInfo { - /// usart_v1/USART -> usart - module: String, - /// usart_v1/USART -> v1 - version: String, - /// usart_v1/USART -> USART - block: String, -} - -impl BlockInfo { - fn parse(s: &str) -> Self { - let mut s = s.split("/"); - let module = s.next().unwrap(); - let block = s.next().unwrap(); - assert!(s.next().is_none()); - let mut s = module.split("_"); - let module = s.next().unwrap(); - let version = s.next().unwrap(); - assert!(s.next().is_none()); - Self { - module: module.to_string(), - version: version.to_string(), - block: block.to_string(), - } - } -} +mod data; +use data::*; fn find_reg<'c>(rcc: &'c ir::IR, reg_regex: &str, field_name: &str) -> Option<(&'c str, &'c str)> { let reg_regex = Regex::new(reg_regex).unwrap();