mirror of
https://gitlab.cern.ch/wotsubo/endcap-sl-software-ri-generator.git
synced 2025-06-07 21:45:44 +09:00
Compare commits
4 commits
ab9fff5e9e
...
6dcb15b881
Author | SHA1 | Date | |
---|---|---|---|
6dcb15b881 | |||
eee043cd0f | |||
83e0c6cb3d | |||
e6f09d684a |
2 changed files with 13 additions and 6 deletions
|
@ -390,13 +390,17 @@ impl Register {
|
||||||
let desc = node.attribute("desc").map(str::to_string);
|
let desc = node.attribute("desc").map(str::to_string);
|
||||||
|
|
||||||
let children: Vec<_> = {
|
let children: Vec<_> = {
|
||||||
let mut child_elements = node.children().filter(|node| node.is_element());
|
if node
|
||||||
if child_elements.any(|node| node.tag_name().name().eq("value")) {
|
.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
|
// Generate virtual single field under the register, to absorb difference between
|
||||||
// normal format
|
// normal format
|
||||||
vec![Field::from_xml_register_dom(node)?]
|
vec![Field::from_xml_register_dom(node)?]
|
||||||
} else {
|
} else {
|
||||||
child_elements
|
node.children()
|
||||||
|
.filter(|node| node.is_element())
|
||||||
.filter(|node| node.tag_name().name().eq("field"))
|
.filter(|node| node.tag_name().name().eq("field"))
|
||||||
.map(Field::from_xml_dom)
|
.map(Field::from_xml_dom)
|
||||||
.collect::<Result<_, _>>()?
|
.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> {
|
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") {
|
let mask = match node.attribute("mask") {
|
||||||
Some(mask) => mask
|
Some(mask) => mask
|
||||||
.parse_prefixed_u32()
|
.parse_prefixed_u32()
|
||||||
|
@ -539,6 +545,7 @@ impl Field {
|
||||||
node,
|
node,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
// Duplicated with parent (register) desc so should be removed, or add some comment?
|
||||||
let desc = node.attribute("desc").map(str::to_string);
|
let desc = node.attribute("desc").map(str::to_string);
|
||||||
let children = node
|
let children = node
|
||||||
.children()
|
.children()
|
||||||
|
|
|
@ -46,7 +46,7 @@ pub fn generate(xml: &path::Path, out: &path::Path) -> Result<(), Error> {
|
||||||
log::debug!("xml parsed {doc:?}");
|
log::debug!("xml parsed {doc:?}");
|
||||||
|
|
||||||
let register_map = types::Module::from_xml_dom(doc.root_element(), xml_git_info)?;
|
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();
|
let (_maps, errors) = register_map.validate();
|
||||||
if !errors.is_empty() {
|
if !errors.is_empty() {
|
||||||
|
|
Loading…
Add table
Reference in a new issue