Skip to content

Commit d58b365

Browse files
committed
Include all instances of a module, not just the first
1 parent 9b401dc commit d58b365

File tree

1 file changed

+31
-24
lines changed

1 file changed

+31
-24
lines changed

build.rs

Lines changed: 31 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,9 @@ mod gen {
9898

9999
for module in device.modules.iter() {
100100
for instance in module.instances.iter() {
101-
for signal in instance.signals.iter() {
102-
let offset = 2;
103-
let addr = offset + 20;
104-
writeln!(b, "pub const {}: *mut u8 = {} as *mut u8;", signal.pad, addr).unwrap();
105-
}
101+
let offset = 2;
102+
let addr = offset + 20;
103+
writeln!(b, "pub const {}: *mut u8 = {} as *mut u8;", instance.name, addr).unwrap();
106104
}
107105
}
108106

@@ -136,27 +134,36 @@ mod pack {
136134
let address_spaces = Vec::new();
137135

138136
let modules: Vec<_> = device.get_child("peripherals").unwrap().children.iter().map(|module| {
139-
let instance = module.get_child("instance").unwrap();
140-
let name = instance.attributes.get("name").unwrap().clone();
141-
142-
let signals = match instance.get_child("signals") {
143-
Some(signals) => signals.children.iter().map(|signal| {
144-
let pad = signal.attributes.get("pad").unwrap().clone();
145-
let index = signal.attributes.get("index").map(|i| i.parse().unwrap());
146-
Signal {
147-
pad: pad,
148-
index: index,
149-
}
150-
}).collect(),
151-
None => Vec::new(),
152-
};
137+
let module_name = module.attributes.get("name").unwrap().clone();
138+
139+
let instances = module.children.iter().filter_map(|child| {
140+
if child.name != "instance" { return None; }
141+
let instance = child;
142+
143+
let instance_name = instance.attributes.get("name").unwrap().clone();
144+
145+
let signals = match instance.get_child("signals") {
146+
Some(signals) => signals.children.iter().map(|signal| {
147+
let pad = signal.attributes.get("pad").unwrap().clone();
148+
let index = signal.attributes.get("index").map(|i| i.parse().unwrap());
149+
Signal {
150+
pad: pad,
151+
index: index,
152+
}
153+
}).collect(),
154+
None => Vec::new(),
155+
};
156+
157+
Some(Instance {
158+
name: instance_name,
159+
signals: signals,
160+
})
161+
162+
}).collect();
153163

154164
Module {
155-
name: name.clone(),
156-
instances: vec![Instance {
157-
name: name,
158-
signals: signals,
159-
}],
165+
name: module_name,
166+
instances: instances,
160167
}
161168
}).collect();
162169

0 commit comments

Comments
 (0)