diff --git a/src/converter.rs b/src/converter.rs index 472ef0f..fbdf7f1 100644 --- a/src/converter.rs +++ b/src/converter.rs @@ -517,17 +517,22 @@ impl Field { /// Generate Field from Registers (piracy), guessing a lot of parameters. pub(crate) fn from_xml_register_dom(node: Node) -> Result { let name = util::get_name(node)?; - let mask = node - .ancestors() - .filter_map(|node| util::get_type(node)) - .next() - .transpose()? - .map_or_else( - || Err(DomConversionError::parameter_completion_error("type", node)), - |dtype| match dtype { - crate::types::DataType::D32 => Ok(u32::MAX), - }, - )?; + let mask = match node.attribute("mask") { + Some(mask) => mask + .parse_prefixed_u32() + .map_err(|e| DomConversionError::parse_prefixed_u32_error(e, "mask", node))?, + None => node + .ancestors() + .filter_map(|node| util::get_type(node)) + .next() + .transpose()? + .map_or_else( + || Err(DomConversionError::parameter_completion_error("type", node)), + |dtype| match dtype { + crate::types::DataType::D32 => Ok(u32::MAX), + }, + )?, + }; if node.has_attribute("default") { return Err(DomConversionError::other_error( "unsupported structure: register with @default without field",