use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
#[serde(rename_all = "snake_case")]
pub enum Core {
Cm7,
Cm4,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct Ir {
pub mcu: String,
pub package: String,
pub clocks: Clocks,
pub pinctrl: Vec<Pin>,
pub peripherals: IndexMap<String, Peripheral>,
#[serde(default)]
pub pwr: Power,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
pub struct Clocks {
#[serde(default)]
pub pll: IndexMap<String, Pll>,
#[serde(default)]
pub kernels: IndexMap<String, String>,
#[serde(default)]
pub init_by: Option<Core>,
#[serde(default)]
pub sys_src: Option<String>,
#[serde(default)]
pub pll_src: Option<String>,
#[serde(default)]
pub hse_hz: Option<u32>,
#[serde(default)]
pub d1cpu: Option<String>,
#[serde(default)]
pub d1ppre: Option<String>,
#[serde(default)]
pub d2ppre1: Option<String>,
#[serde(default)]
pub d2ppre2: Option<String>,
#[serde(default)]
pub d3ppre: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Default)]
pub struct Power {
#[serde(default)]
pub supply: Option<String>,
#[serde(default)]
pub sdlevel: Option<String>,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct Pll {
pub m: u8,
pub n: u16,
pub p: u8,
pub q: u8,
pub r: u8,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct Pin {
pub pin: String,
pub func: String,
#[serde(default)]
pub label: Option<String>,
pub af: u8,
}
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq)]
pub struct Peripheral {
pub class: String,
#[serde(default)]
pub signals: IndexMap<String, String>,
#[serde(default)]
pub core: Option<Core>,
}