Skip to content

Commit 8bfae9c

Browse files
bors[bot]burrbull
andauthored
Merge #182
182: merge register with registerinfo, same with other info r=Emilgardis a=burrbull As `register` now contain only type alias, no sense to have 2 separate files for Register and RegisterInfo Co-authored-by: Andrey Zgarbul <zgarbul.andrey@gmail.com>
2 parents ad05b80 + 98fe606 commit 8bfae9c

33 files changed

+2072
-2123
lines changed

svd-encoder/src/cluster.rs

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
use super::{Element, ElementMerge, Encode, EncodeError};
1+
use super::{new_node, Element, ElementMerge, Encode, EncodeChildren, EncodeError, XMLNode};
22

3-
use crate::svd::Cluster;
3+
use crate::svd::{Cluster, ClusterInfo};
44

55
impl Encode for Cluster {
66
type Error = EncodeError;
@@ -17,3 +17,44 @@ impl Encode for Cluster {
1717
}
1818
}
1919
}
20+
21+
impl Encode for ClusterInfo {
22+
type Error = EncodeError;
23+
24+
fn encode(&self) -> Result<Element, EncodeError> {
25+
let mut e = Element::new("cluster");
26+
27+
e.children.push(new_node("name", self.name.clone()));
28+
29+
if let Some(v) = &self.description {
30+
e.children.push(new_node("description", v.clone()));
31+
}
32+
33+
if let Some(v) = &self.alternate_cluster {
34+
e.children.push(new_node("alternateCluster", v.clone()));
35+
}
36+
37+
if let Some(v) = &self.header_struct_name {
38+
e.children.push(new_node("headerStructName", v.clone()));
39+
}
40+
41+
e.children.push(new_node(
42+
"addressOffset",
43+
format!("{}", self.address_offset),
44+
));
45+
46+
e.children
47+
.extend(self.default_register_properties.encode()?);
48+
49+
for c in &self.children {
50+
e.children.push(XMLNode::Element(c.encode()?));
51+
}
52+
53+
if let Some(v) = &self.derived_from {
54+
e.attributes
55+
.insert(String::from("derivedFrom"), v.to_string());
56+
}
57+
58+
Ok(e)
59+
}
60+
}

svd-encoder/src/clusterinfo.rs

Lines changed: 0 additions & 44 deletions
This file was deleted.

svd-encoder/src/field.rs

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
use super::{Element, ElementMerge, Encode, EncodeError};
1+
use super::{new_node, Element, ElementMerge, Encode, EncodeError, XMLNode};
2+
use crate::bitrange::encode_bitrange;
23

3-
use crate::svd::Field;
4+
use crate::svd::{Field, FieldInfo};
45

56
impl Encode for Field {
67
type Error = EncodeError;
@@ -17,3 +18,50 @@ impl Encode for Field {
1718
}
1819
}
1920
}
21+
22+
impl Encode for FieldInfo {
23+
type Error = EncodeError;
24+
25+
fn encode(&self) -> Result<Element, EncodeError> {
26+
let mut elem = Element::new("field");
27+
elem.children.push(new_node("name", self.name.clone()));
28+
29+
if let Some(description) = &self.description {
30+
elem.children
31+
.push(new_node("description", description.clone()))
32+
}
33+
34+
// Add bit range
35+
elem.children.append(&mut encode_bitrange(&self.bit_range)?);
36+
37+
if let Some(v) = &self.access {
38+
elem.children.push(v.encode_node()?);
39+
}
40+
41+
if let Some(v) = &self.modified_write_values {
42+
elem.children.push(v.encode_node()?);
43+
}
44+
45+
if let Some(v) = &self.write_constraint {
46+
elem.children.push(v.encode_node()?);
47+
}
48+
49+
if let Some(v) = &self.read_action {
50+
elem.children.push(v.encode_node()?);
51+
}
52+
53+
let enumerated_values: Result<Vec<XMLNode>, EncodeError> = self
54+
.enumerated_values
55+
.iter()
56+
.map(|v| v.encode_node())
57+
.collect();
58+
elem.children.append(&mut enumerated_values?);
59+
60+
if let Some(v) = &self.derived_from {
61+
elem.attributes
62+
.insert(String::from("derivedFrom"), v.to_string());
63+
}
64+
65+
Ok(elem)
66+
}
67+
}

svd-encoder/src/fieldinfo.rs

Lines changed: 0 additions & 51 deletions
This file was deleted.

svd-encoder/src/lib.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,24 +66,20 @@ mod access;
6666
mod addressblock;
6767
mod bitrange;
6868
mod cluster;
69-
mod clusterinfo;
7069
mod cpu;
7170
mod device;
7271
mod dimelement;
7372
mod endian;
7473
mod enumeratedvalue;
7574
mod enumeratedvalues;
7675
mod field;
77-
mod fieldinfo;
7876
mod interrupt;
7977
mod modifiedwritevalues;
8078
mod peripheral;
81-
mod peripheralinfo;
8279
mod protection;
8380
mod readaction;
8481
mod register;
8582
mod registercluster;
86-
mod registerinfo;
8783
mod registerproperties;
8884
mod usage;
8985
mod writeconstraint;

svd-encoder/src/peripheral.rs

Lines changed: 81 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
use super::{Element, ElementMerge, Encode, EncodeError};
1+
use super::{new_node, Element, ElementMerge, Encode, EncodeChildren, EncodeError, XMLNode};
22

3-
use crate::svd::Peripheral;
3+
use crate::svd::{Interrupt, Peripheral, PeripheralInfo};
44

55
impl Encode for Peripheral {
66
type Error = EncodeError;
@@ -17,3 +17,82 @@ impl Encode for Peripheral {
1717
}
1818
}
1919
}
20+
21+
impl Encode for PeripheralInfo {
22+
type Error = EncodeError;
23+
24+
fn encode(&self) -> Result<Element, EncodeError> {
25+
let mut elem = Element::new("peripheral");
26+
elem.children.push(new_node("name", self.name.clone()));
27+
28+
if let Some(v) = &self.display_name {
29+
elem.children.push(new_node("displayName", v.to_string()));
30+
}
31+
32+
if let Some(v) = &self.version {
33+
elem.children.push(new_node("version", v.to_string()));
34+
}
35+
36+
if let Some(v) = &self.description {
37+
elem.children.push(new_node("description", v.to_string()));
38+
}
39+
40+
if let Some(v) = &self.alternate_peripheral {
41+
elem.children
42+
.push(new_node("alternatePeripheral", v.to_string()));
43+
}
44+
45+
if let Some(v) = &self.group_name {
46+
elem.children.push(new_node("groupName", v.to_string()));
47+
}
48+
49+
if let Some(v) = &self.prepend_to_name {
50+
elem.children.push(new_node("prependToName", v.to_string()));
51+
}
52+
53+
if let Some(v) = &self.append_to_name {
54+
elem.children.push(new_node("appendToName", v.to_string()));
55+
}
56+
57+
if let Some(v) = &self.header_struct_name {
58+
elem.children
59+
.push(new_node("headerStructName", v.to_string()));
60+
}
61+
62+
elem.children.push(new_node(
63+
"baseAddress",
64+
format!("0x{:.08X}", self.base_address),
65+
));
66+
67+
elem.children
68+
.extend(self.default_register_properties.encode()?);
69+
70+
if let Some(v) = &self.address_block {
71+
for ab in v {
72+
elem.children.push(ab.encode_node()?);
73+
}
74+
}
75+
76+
let interrupts: Result<Vec<_>, _> =
77+
self.interrupt.iter().map(Interrupt::encode_node).collect();
78+
79+
elem.children.append(&mut interrupts?);
80+
81+
if let Some(v) = &self.registers {
82+
let children: Result<Vec<_>, _> = v.iter().map(|e| e.encode_node()).collect();
83+
84+
elem.children.push({
85+
let mut e = Element::new("registers");
86+
e.children = children?;
87+
XMLNode::Element(e)
88+
});
89+
}
90+
91+
if let Some(v) = &self.derived_from {
92+
elem.attributes
93+
.insert(String::from("derivedFrom"), v.to_string());
94+
}
95+
96+
Ok(elem)
97+
}
98+
}

0 commit comments

Comments
 (0)