From 202c900aeaa2cad27272d8b172bfd5ae1d4b81e5 Mon Sep 17 00:00:00 2001 From: Wataru Otsubo Date: Wed, 29 Jan 2025 18:48:22 +0900 Subject: [PATCH] add types --- src/lib.rs | 2 +- src/main.rs | 4 ++ src/types.rs | 138 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 143 insertions(+), 1 deletion(-) create mode 100644 src/types.rs diff --git a/src/lib.rs b/src/lib.rs index 8b13789..cd40856 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1 +1 @@ - +pub mod types; diff --git a/src/main.rs b/src/main.rs index ddf4f2e..ddfdd0a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -13,4 +13,8 @@ fn main() { .unwrap(); println!("Parsed: {:#?}", doc); println!("Root: {:?}", doc.root_element()); + { + let root = doc.root_element(); + println!("tag: {:?}", root.tag_name()); + } } diff --git a/src/types.rs b/src/types.rs new file mode 100644 index 0000000..be7c4f8 --- /dev/null +++ b/src/types.rs @@ -0,0 +1,138 @@ +pub struct Module { + pub name: String, + pub addr: u32, + pub size: u32, + pub amod: Option, + pub r#type: Option, + pub desc: Option, + pub elements_bitstring: Vec, + pub elements_other: Vec, +} + +pub enum ModuleBlockElements { + Block(Block), + Register(Register), + Memory(Memory), + Fifo(Fifo), +} + +pub struct BitString { + pub name: String, + pub size: Option, + pub mask: Option, + pub modf: Option, + pub desc: Option, + pub elements_field: Vec, +} + +pub struct Block { + pub name: String, + /// Fill this with proper calc. + pub addr: u32, + /// Fill this with proper calc. + pub r#type: DataType, + /// Fill this with proper calc. + pub modf: RwSpecifier, + // TODO: should this be expanded? + pub multiple: Option, + // TODO + pub decoder: String, + pub size: u32, + pub desc: Option, + pub elements: Vec, +} + +pub struct Register { + pub name: String, + /// Fill this with proper calc. + pub addr: u32, + pub mask: Option, + /// Fill this with proper calc. + pub modf: RwSpecifier, + pub multiple: Option, + pub default: Option, + pub desc: Option, + // BitString? + pub elements: Vec, +} + +pub struct Memory { + pub name: String, + /// Fill this with proper calc. + pub addr: u32, + pub mask: Option, + /// Fill this with proper calc + pub modf: RwSpecifier, + pub dma: Option, + pub multiple: Option, + // BitString? + pub desc: Option, + pub elements: Vec, +} + +pub struct Fifo { + pub name: String, + /// Fill this with proper calc. + pub addr: u32, + pub size: u32, + pub mask: Option, + /// Fill this with proper calc. + pub modf: RwSpecifier, + pub interface: Option, + pub multiple: Option, + // BitString? + pub desc: String, + pub elements: Vec, +} + +// TODO +pub struct Field { + pub name: String, + /// TODO: is this optional? + pub mask: u32, + /// Fill this with proper calc. + pub modf: RwSpecifier, + pub interface: Option, + pub multiple: Option, + pub default: Option, + // TODO + pub sclr: Option, + pub desc: Option, + pub elements: Vec, +} + +pub struct Value { + pub name: String, + pub data: u32, + pub desc: Option +} + +pub enum AmodValues { + A16, + A24, + A32, + CRCSR, + USER1, + USER2, +} + +pub enum DataType { + D32, +} + +pub enum RwSpecifier { + R, + W, + RW, +} + +pub struct MultipleParams { + pub multiple: u32, + pub offset: u32, +} + +pub enum FieldFifoInterface { + Vector, + Block, + Both, +}