diff --git a/src/transform/add_peripherals.rs b/src/transform/add_peripherals.rs new file mode 100644 index 0000000..9aeece6 --- /dev/null +++ b/src/transform/add_peripherals.rs @@ -0,0 +1,20 @@ +use serde::{Deserialize, Serialize}; + +use super::common::*; +use crate::ir::*; + +#[derive(Debug, Serialize, Deserialize)] +pub struct AddPeripherals { + pub devices: RegexSet, + pub peripherals: Vec, +} + +impl AddPeripherals { + pub fn run(&self, ir: &mut IR) -> anyhow::Result<()> { + for id in match_all(ir.devices.keys().cloned(), &self.devices) { + let d = ir.devices.get_mut(&id).unwrap(); + d.peripherals.extend(self.peripherals.clone()); + } + Ok(()) + } +} diff --git a/src/transform/mod.rs b/src/transform/mod.rs index e616fcf..7b5f19c 100644 --- a/src/transform/mod.rs +++ b/src/transform/mod.rs @@ -241,6 +241,7 @@ transforms!( add_fields::AddFields, add_registers::AddRegisters, add_interrupts::AddInterrupts, + add_peripherals::AddPeripherals, delete::Delete, delete_enum_variants::DeleteEnumVariants, delete_enums::DeleteEnums,