update(converter): add validation for register about mask & field

ref: ea1850e csr commit
This commit is contained in:
Wataru Otsubo 2025-01-31 12:02:25 +09:00
parent 6b5b5e0234
commit 8e0761e39e

View file

@ -352,12 +352,21 @@ impl Register {
.transpose()?; .transpose()?;
let desc = node.attribute("desc").map(str::to_string); let desc = node.attribute("desc").map(str::to_string);
let children = node let children: Vec<_> = node
.children() .children()
.filter(|node| node.is_element() && node.tag_name().name().eq("field")) .filter(|node| node.is_element() && node.tag_name().name().eq("field"))
.map(Field::from_xml_dom) .map(Field::from_xml_dom)
.collect::<Result<_, _>>()?; .collect::<Result<_, _>>()?;
// Validation
if mask.is_some() && !children.is_empty() {
return Err(DomConversionError::OtherError(format!(
"both mask and field are used in the same register: {} - {}",
node.document().text_pos_at(node.range().start),
node.document().text_pos_at(node.range().end),
)));
}
Ok(Register { Ok(Register {
name, name,
addr, addr,
@ -424,6 +433,7 @@ impl Field {
.map(Value::from_xml_dom) .map(Value::from_xml_dom)
.collect::<Result<_, _>>()?; .collect::<Result<_, _>>()?;
// Validation
if let Some(default) = default { if let Some(default) = default {
if default & !(mask) != 0 { if default & !(mask) != 0 {
log::warn!( log::warn!(