Skip to content

Commit ec32a14

Browse files
committed
default enum value
1 parent 79959a7 commit ec32a14

File tree

6 files changed

+28
-18
lines changed

6 files changed

+28
-18
lines changed

.github/workflows/ci.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
target:
4949
- esp32
5050
- esp8266
51-
- stm32
51+
#- stm32
5252
- lpc55
5353
#- rp2040
5454
steps:

CHANGELOG-python.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ This changelog tracks the Python `svdtools` project. See
55

66
## [Unreleased]
77

8+
* `-1` for default enum value
9+
810
## [v0.1.26] 2023-03-28
911

1012
* Bump python to 3.9 to fix CI

CHANGELOG-rust.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ This changelog tracks the Rust `svdtools` project. See
66
## [Unreleased]
77

88
* Move field with derived enums before other
9+
* `-1` for default enum value
910

1011
## [v0.3.4] 2023-10-14
1112

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,10 @@ _rebase:
309309
# By giving the field a dictionary we construct an enumerateValues
310310
VARIANT: [VALUE, DESCRIPTION]
311311
VARIANT: [VALUE, DESCRIPTION]
312+
# Use `-1` for "default" variant which will be consider
313+
# for all other values that are not listed explicitly
314+
# usually datasheet marks them `0b0xxx`, `0b1x`, etc.
315+
VARIANT: [-1, DESCRIPTION]
312316

313317
FIELD:
314318
# If a field already has enumerateValues, drop them and

src/patch/mod.rs

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -267,34 +267,34 @@ fn make_ev_array(values: &Hash) -> Result<EnumeratedValuesBuilder> {
267267
));
268268
}
269269
let vd = vd.vec()?;
270-
let value = vd[0].i64()? as u64;
271270
let description = vd.get(1).and_then(Yaml::as_str).ok_or_else(|| {
272-
anyhow!("enumeratedValue can't have empty description for value {value}")
271+
anyhow!("enumeratedValue can't have empty description for value {vname}")
273272
})?;
273+
let value = vd[0].i64()?;
274+
let def = value == -1;
275+
let value = value as u64;
276+
let ev = EnumeratedValue::builder()
277+
.name(vname.into())
278+
.value(Some(value))
279+
.description(Some(description.into()));
280+
let ev = (if def {
281+
ev.is_default(Some(true))
282+
} else {
283+
ev.value(Some(value))
284+
})
285+
.build(VAL_LVL)?;
274286
use std::collections::btree_map::Entry;
275287
match h.entry(value) {
276288
Entry::Occupied(_) => {
277289
return Err(anyhow!("enumeratedValue can't have duplicate values"));
278290
}
279291
Entry::Vacant(e) => {
280-
e.insert((vname.to_string(), description.to_string()));
292+
e.insert(ev);
281293
}
282294
}
283295
}
284296
}
285-
Ok(EnumeratedValues::builder().values({
286-
let mut evs = Vec::new();
287-
for (value, vd) in h.into_iter() {
288-
evs.push(
289-
EnumeratedValue::builder()
290-
.name(vd.0)
291-
.value(Some(value))
292-
.description(Some(vd.1))
293-
.build(VAL_LVL)?,
294-
);
295-
}
296-
evs
297-
}))
297+
Ok(EnumeratedValues::builder().values(h.into_values().collect()))
298298
}
299299

300300
/// Returns an enumeratedValues Element which is derivedFrom name

svdtools/patch.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,10 @@ def make_enumerated_values(name, values, usage="read-write"):
178178
el = ET.SubElement(ev, "enumeratedValue")
179179
ET.SubElement(el, "name").text = vname
180180
ET.SubElement(el, "description").text = description
181-
ET.SubElement(el, "value").text = str(value)
181+
if value == -1:
182+
ET.SubElement(el, "isDefault").text = "true"
183+
else:
184+
ET.SubElement(el, "value").text = str(value)
182185
ev.tail = "\n "
183186
return ev
184187

0 commit comments

Comments
 (0)