@@ -98,11 +98,9 @@ mod gen {
98
98
99
99
for module in device. modules . iter ( ) {
100
100
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 ( ) ;
106
104
}
107
105
}
108
106
@@ -136,27 +134,36 @@ mod pack {
136
134
let address_spaces = Vec :: new ( ) ;
137
135
138
136
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 ( ) ;
153
163
154
164
Module {
155
- name : name. clone ( ) ,
156
- instances : vec ! [ Instance {
157
- name: name,
158
- signals: signals,
159
- } ] ,
165
+ name : module_name,
166
+ instances : instances,
160
167
}
161
168
} ) . collect ( ) ;
162
169
0 commit comments