Skip to content

Commit fcc459c

Browse files
committed
add ReadAction
1 parent 0044fb7 commit fcc459c

20 files changed

+146
-8
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 `readAction` encoding
1011
- Add array support for peripherals
1112

1213
## [v0.11.0] - 2021-10-02

svd-encoder/src/fieldinfo.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@ impl Encode for FieldInfo {
3030
elem.children.push(v.encode_node()?);
3131
}
3232

33+
if let Some(v) = &self.read_action {
34+
elem.children.push(v.encode_node()?);
35+
}
36+
3337
let enumerated_values: Result<Vec<XMLNode>, EncodeError> = self
3438
.enumerated_values
3539
.iter()

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 readaction;
8283
mod register;
8384
mod registercluster;
8485
mod registerinfo;

svd-encoder/src/readaction.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::ReadAction {
4+
type Error = EncodeError;
5+
6+
fn encode(&self) -> Result<Element, EncodeError> {
7+
let mut elem = Element::new("readAction");
8+
elem.children.push(XMLNode::Text(self.as_str().to_string()));
9+
Ok(elem)
10+
}
11+
}

svd-encoder/src/registerinfo.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ impl Encode for RegisterInfo {
4242
elem.children.push(v.encode_node()?);
4343
}
4444

45+
if let Some(v) = &self.read_action {
46+
elem.children.push(v.encode_node()?);
47+
}
48+
4549
if let Some(v) = &self.fields {
4650
let children = v
4751
.iter()

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 `readAction` parsing
1011
- Add array support for peripherals
1112

1213
## [v0.11.0] - 2021-10-02

svd-parser/src/fieldinfo.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use super::*;
22
use crate::svd::{
3-
Access, BitRange, EnumeratedValues, FieldInfo, ModifiedWriteValues, WriteConstraint,
3+
Access, BitRange, EnumeratedValues, FieldInfo, ModifiedWriteValues, ReadAction, WriteConstraint,
44
};
55

66
impl Parse for FieldInfo {
@@ -29,6 +29,7 @@ impl Parse for FieldInfo {
2929
tree,
3030
config,
3131
)?)
32+
.read_action(optional::<ReadAction>("readAction", tree, config)?)
3233
.enumerated_values({
3334
let values: Result<Vec<_>, _> = tree
3435
.children()

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 readaction;
166167
mod register;
167168
mod registercluster;
168169
mod registerinfo;
@@ -201,6 +202,8 @@ pub enum SVDError {
201202
InvalidRegisterCluster(String),
202203
#[error("Invalid modifiedWriteValues variant, found {0}")]
203204
InvalidModifiedWriteValues(String),
205+
#[error("Invalid readAction variant, found {0}")]
206+
InvalidReadAction(String),
204207
#[error("The content of the element could not be parsed to a boolean value {0}: {1}")]
205208
InvalidBooleanValue(String, core::str::ParseBoolError),
206209
#[error("dimIndex tag must contain {0} indexes, found {1}")]

svd-parser/src/readaction.rs

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

svd-parser/src/registerinfo.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
use super::*;
2-
use crate::svd::{Field, ModifiedWriteValues, RegisterInfo, RegisterProperties, WriteConstraint};
2+
use crate::svd::{
3+
Field, ModifiedWriteValues, ReadAction, RegisterInfo, RegisterProperties, WriteConstraint,
4+
};
35

46
impl Parse for RegisterInfo {
57
type Object = Self;
@@ -25,6 +27,7 @@ impl Parse for RegisterInfo {
2527
tree,
2628
config,
2729
)?)
30+
.read_action(optional::<ReadAction>("readAction", tree, config)?)
2831
.fields({
2932
if let Some(fields) = tree.get_child("fields") {
3033
let fs: Result<Vec<_>, _> = fields

0 commit comments

Comments
 (0)