Skip to content

Commit 4d18aef

Browse files
bors[bot]burrbull
andauthored
Merge #167
167: add protection r=Emilgardis a=burrbull Co-authored-by: Andrey Zgarbul <[email protected]>
2 parents 18144ed + fd12341 commit 4d18aef

16 files changed

+119
-4
lines changed

svd-encoder/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
77

88
## Unreleased
99

10+
- Add `protection` encoding
1011
- Add `readAction` encoding
1112
- Add array support for peripherals
1213

svd-encoder/src/addressblock.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ impl Encode for crate::svd::AddressBlock {
44
type Error = EncodeError;
55

66
fn encode(&self) -> Result<Element, EncodeError> {
7-
let children = vec![
7+
let mut children = vec![
88
new_node("offset", format!("0x{:X}", self.offset)),
99
new_node("size", format!("0x{:X}", self.size)),
1010
self.usage.encode_node()?,
1111
];
12+
if let Some(v) = &self.protection {
13+
children.push(v.encode_node()?);
14+
};
1215
let mut elem = Element::new("addressBlock");
1316
elem.children = children;
1417
Ok(elem)

svd-encoder/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ mod interrupt;
7979
mod modifiedwritevalues;
8080
mod peripheral;
8181
mod peripheralinfo;
82+
mod protection;
8283
mod readaction;
8384
mod register;
8485
mod registercluster;

svd-encoder/src/protection.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
use super::{Element, Encode, EncodeError, XMLNode};
2+
3+
impl Encode for crate::svd::Protection {
4+
type Error = EncodeError;
5+
6+
fn encode(&self) -> Result<Element, EncodeError> {
7+
let mut elem = Element::new("protection");
8+
elem.children.push(XMLNode::Text(self.as_str().to_string()));
9+
Ok(elem)
10+
}
11+
}

svd-encoder/src/registerproperties.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,10 @@ impl EncodeChildren for RegisterProperties {
1616
children.push(v.encode_node()?);
1717
};
1818

19+
if let Some(v) = &self.protection {
20+
children.push(v.encode_node()?);
21+
};
22+
1923
if let Some(v) = &self.reset_value {
2024
children.push(new_node(
2125
"resetValue",

svd-parser/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
77

88
## Unreleased
99

10+
- Add `protection` parsing
1011
- Add `readAction` parsing
1112
- Add array support for peripherals
1213

svd-parser/src/addressblock.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use super::*;
2-
use crate::svd::{AddressBlock, AddressBlockUsage};
2+
use crate::svd::{AddressBlock, AddressBlockUsage, Protection};
33

44
impl Parse for AddressBlock {
55
type Object = Self;
@@ -11,6 +11,7 @@ impl Parse for AddressBlock {
1111
offset: tree.get_child_u32("offset")?,
1212
size: tree.get_child_u32("size")?,
1313
usage: AddressBlockUsage::parse(&tree.get_child_elem("usage")?, config)?,
14+
protection: optional::<Protection>("protection", tree, config)?,
1415
})
1516
}
1617
}

svd-parser/src/lib.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,7 @@ mod interrupt;
163163
mod modifiedwritevalues;
164164
mod peripheral;
165165
mod peripheralinfo;
166+
mod protection;
166167
mod readaction;
167168
mod register;
168169
mod registercluster;
@@ -204,6 +205,8 @@ pub enum SVDError {
204205
InvalidModifiedWriteValues(String),
205206
#[error("Invalid readAction variant, found {0}")]
206207
InvalidReadAction(String),
208+
#[error("Invalid protection variant, found {0}")]
209+
InvalidProtection(String),
207210
#[error("The content of the element could not be parsed to a boolean value {0}: {1}")]
208211
InvalidBooleanValue(String, core::str::ParseBoolError),
209212
#[error("dimIndex tag must contain {0} indexes, found {1}")]

svd-parser/src/protection.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
use super::*;
2+
3+
impl Parse for crate::svd::Protection {
4+
type Object = Self;
5+
type Error = SVDErrorAt;
6+
type Config = Config;
7+
8+
fn parse(tree: &Node, _config: &Self::Config) -> Result<Self, Self::Error> {
9+
let text = tree.get_text()?;
10+
11+
Self::parse_str(text).ok_or_else(|| SVDError::InvalidProtection(text.into()).at(tree.id()))
12+
}
13+
}

svd-parser/src/registerproperties.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use super::*;
2-
use crate::svd::{Access, RegisterProperties};
2+
use crate::svd::{Access, Protection, RegisterProperties};
33

44
impl Parse for RegisterProperties {
55
type Object = Self;
@@ -10,6 +10,7 @@ impl Parse for RegisterProperties {
1010
RegisterProperties::new()
1111
.size(optional::<u32>("size", tree, &())?)
1212
.access(optional::<Access>("access", tree, config)?)
13+
.protection(optional::<Protection>("protection", tree, config)?)
1314
.reset_value(optional::<u64>("resetValue", tree, &())?)
1415
.reset_mask(optional::<u64>("resetMask", tree, &())?)
1516
.build(config.validate_level)

0 commit comments

Comments
 (0)