Compare commits

...

4 commits

Author SHA1 Message Date
6dcb15b881 Merge branch 'fix-value-under-register' into 'main'
Draft: Support value under register, by inserting field during conversion

Closes #3

See merge request wotsubo/endcap-sl-software-ri-generator!18
2025-05-20 10:19:30 +00:00
eee043cd0f change(converter): name "field" for autogened virtual field
instead of val_ prefixed register name
2025-05-20 18:55:07 +09:00
83e0c6cb3d fix(converter): wrong iterator usage
all iterator was consumed for searching value before collecting field
2025-05-20 18:49:01 +09:00
e6f09d684a fix(converter): prepend "val_" to avoid name confliction with register obj 2025-05-20 18:09:10 +09:00
2 changed files with 13 additions and 6 deletions

View file

@ -390,13 +390,17 @@ impl Register {
let desc = node.attribute("desc").map(str::to_string);
let children: Vec<_> = {
let mut child_elements = node.children().filter(|node| node.is_element());
if child_elements.any(|node| node.tag_name().name().eq("value")) {
if node
.children()
.filter(|node| node.is_element())
.any(|node| node.tag_name().name().eq("value"))
{
// Generate virtual single field under the register, to absorb difference between
// normal format
vec![Field::from_xml_register_dom(node)?]
} else {
child_elements
node.children()
.filter(|node| node.is_element())
.filter(|node| node.tag_name().name().eq("field"))
.map(Field::from_xml_dom)
.collect::<Result<_, _>>()?
@ -514,9 +518,11 @@ impl Field {
})
}
/// Generate Field from Registers (piracy), guessing a lot of parameters.
/// Generate virtual Field from Registers node (piracy), guessing a lot of parameters.
pub(crate) fn from_xml_register_dom(node: Node) -> Result<Self, DomConversionError> {
let name = util::get_name(node)?;
// // Prepend "val_" to avoid name confliction with struct for accessing values
// let name = "val_".to_string() + &util::get_name(node)?;
let name = "field".to_string();
let mask = match node.attribute("mask") {
Some(mask) => mask
.parse_prefixed_u32()
@ -539,6 +545,7 @@ impl Field {
node,
));
}
// Duplicated with parent (register) desc so should be removed, or add some comment?
let desc = node.attribute("desc").map(str::to_string);
let children = node
.children()

View file

@ -46,7 +46,7 @@ pub fn generate(xml: &path::Path, out: &path::Path) -> Result<(), Error> {
log::debug!("xml parsed {doc:?}");
let register_map = types::Module::from_xml_dom(doc.root_element(), xml_git_info)?;
log::debug!("converted {register_map:?}");
log::debug!("converted {register_map:#?}");
let (_maps, errors) = register_map.validate();
if !errors.is_empty() {