@@ -225,25 +225,26 @@ fn read_value(value: &Element) -> Value {
225
225
/// <register caption="EEPROM Address Register Bytes" name="EEAR" offset="0x41" size="2" mask="0x01FF" ocd-rw=""/>
226
226
/// ```
227
227
fn read_register ( register : & Element ) -> Register {
228
+ let byte_count = register. attributes . get ( "size" ) . unwrap ( ) . parse ( ) . unwrap ( ) ;
228
229
let rw = match register. attributes . get ( "ocd-rw" ) . map ( String :: as_ref) {
229
230
Some ( "R" ) => ReadWrite :: ReadOnly ,
230
231
Some ( "W" ) => ReadWrite :: WriteOnly ,
231
232
_ => ReadWrite :: ReadAndWrite ,
232
233
} ;
233
234
234
235
let bitfields = register. children . iter ( ) . filter_map ( |child| match & child. name [ ..] {
235
- "bitfield" => Some ( self :: read_bitfield ( child) ) ,
236
+ "bitfield" => Some ( self :: read_bitfield ( child, byte_count ) ) ,
236
237
_ => None ,
237
238
} ) . collect ( ) ;
238
239
239
240
Register {
240
241
name : register. attributes . get ( "name" ) . unwrap ( ) . clone ( ) ,
241
242
caption : register. attributes . get ( "caption" ) . unwrap ( ) . clone ( ) ,
242
243
offset : read_int ( register. attributes . get ( "offset" ) ) . clone ( ) ,
243
- size : register. attributes . get ( "size" ) . unwrap ( ) . parse ( ) . unwrap ( ) ,
244
244
mask : read_opt_int ( register. attributes . get ( "mask" ) ) . clone ( ) ,
245
- rw ,
245
+ size : byte_count ,
246
246
bitfields,
247
+ rw,
247
248
}
248
249
}
249
250
@@ -255,12 +256,13 @@ fn read_register(register: &Element) -> Register {
255
256
/// <bitfield caption="Power Reduction Serial Peripheral Interface" mask="0x04" name="PRSPI"/>
256
257
/// <bitfield caption="Prescaler source of Timer/Counter 3" mask="0x07" name="CS3" values="CLK_SEL_3BIT_EXT"/>
257
258
/// ```
258
- fn read_bitfield ( bitfield : & Element ) -> Bitfield {
259
+ fn read_bitfield ( bitfield : & Element , byte_count : u32 ) -> Bitfield {
259
260
Bitfield {
260
261
name : bitfield. attributes . get ( "name" ) . expect ( "bitfield name" ) . clone ( ) ,
261
262
caption : bitfield. attributes . get ( "caption" ) . unwrap_or ( & "" . to_owned ( ) ) . clone ( ) ,
262
263
mask : read_int ( bitfield. attributes . get ( "mask" ) ) . clone ( ) ,
263
264
values : bitfield. attributes . get ( "values" ) . map ( String :: clone) ,
265
+ size : byte_count,
264
266
}
265
267
}
266
268
0 commit comments