@@ -59,17 +59,17 @@ pub fn render(
59
59
methods. push ( "read" ) ;
60
60
}
61
61
62
+ let res_val = register
63
+ . reset_value
64
+ . or ( defs. reset_value )
65
+ . map ( |v| v as u64 ) ;
62
66
if can_write {
63
67
let desc = format ! ( "Writer for register {}" , register. name) ;
64
68
mod_items. push ( quote ! {
65
69
#[ doc = #desc]
66
70
pub type W = crate :: W <#rty, super :: #name_pc>;
67
71
} ) ;
68
- let res_val = register
69
- . reset_value
70
- . or ( defs. reset_value )
71
- . map ( |v| util:: hex ( v as u64 ) ) ;
72
- if let Some ( rv) = res_val {
72
+ if let Some ( rv) = res_val. map ( util:: hex) {
73
73
let doc = format ! ( "Register {} `reset()`'s with value {}" , register. name, & rv) ;
74
74
mod_items. push ( quote ! {
75
75
#[ doc = #doc]
@@ -106,6 +106,7 @@ pub fn render(
106
106
peripheral,
107
107
all_peripherals,
108
108
& rty,
109
+ res_val,
109
110
access,
110
111
& mut mod_items,
111
112
& mut r_impl_items,
@@ -206,6 +207,7 @@ pub fn fields(
206
207
peripheral : & Peripheral ,
207
208
all_peripherals : & [ Peripheral ] ,
208
209
rty : & Ident ,
210
+ reset_value : Option < u64 > ,
209
211
access : Access ,
210
212
mod_items : & mut Vec < Tokens > ,
211
213
r_impl_items : & mut Vec < Tokens > ,
@@ -240,6 +242,7 @@ pub fn fields(
240
242
description. push_str ( " - " ) ;
241
243
description. push_str ( & * util:: respace ( & util:: escape_brackets ( d) ) ) ;
242
244
}
245
+
243
246
Ok ( F {
244
247
_pc_w,
245
248
_sc,
@@ -252,9 +255,9 @@ pub fn fields(
252
255
access : f. access ,
253
256
evs : & f. enumerated_values ,
254
257
sc : Ident :: from ( & * sc) ,
255
- mask : util :: hex ( 1u64 . wrapping_neg ( ) >> ( 64 -width) ) ,
258
+ mask : 1u64 . wrapping_neg ( ) >> ( 64 -width) ,
256
259
name : & f. name ,
257
- offset : util :: unsuffixed ( u64:: from ( f . bit_range . offset ) ) ,
260
+ offset : u64:: from ( offset) ,
258
261
ty : width. to_ty ( ) ?,
259
262
write_constraint : f. write_constraint . as_ref ( ) ,
260
263
} )
@@ -272,8 +275,9 @@ pub fn fields(
272
275
let can_write = ( access != Access :: ReadOnly ) && ( f. access != Some ( Access :: ReadOnly ) ) ;
273
276
274
277
let bits = & f. bits ;
275
- let mask = & f. mask ;
276
- let offset: usize = f. offset . parse ( ) . unwrap ( ) ;
278
+ let mask = & util:: hex ( f. mask ) ;
279
+ let offset = f. offset ;
280
+ let rv = reset_value. map ( |rv| ( rv >> offset) & f. mask ) ;
277
281
let fty = & f. ty ;
278
282
279
283
let lookup_results = lookup (
@@ -294,6 +298,7 @@ pub fn fields(
294
298
295
299
let _pc_r = & f. _pc_r ;
296
300
let _pc_w = & f. _pc_w ;
301
+ let description = & util:: escape_brackets ( & f. description ) ;
297
302
298
303
if can_read {
299
304
let cast = if f. width == 1 {
@@ -302,7 +307,7 @@ pub fn fields(
302
307
quote ! { as #fty }
303
308
} ;
304
309
let value = if offset != 0 {
305
- let offset = & f . offset ;
310
+ let offset = & util :: unsuffixed ( offset) ;
306
311
quote ! {
307
312
( ( self . bits >> #offset) & #mask) #cast
308
313
}
@@ -315,7 +320,6 @@ pub fn fields(
315
320
if let Some ( ( evs, base) ) = lookup_filter ( & lookup_results, Usage :: Read ) {
316
321
evs_r = Some ( evs. clone ( ) ) ;
317
322
318
- let description = & util:: escape_brackets ( & f. description ) ;
319
323
let sc = & f. sc ;
320
324
r_impl_items. push ( quote ! {
321
325
#[ doc = #description]
@@ -328,7 +332,7 @@ pub fn fields(
328
332
base_pc_w = base. as_ref ( ) . map ( |base| {
329
333
let pc = base. field . to_sanitized_upper_case ( ) ;
330
334
let base_pc_r = Ident :: from ( & * format ! ( "{}_A" , pc) ) ;
331
- let base_pc_r = derive_from_base ( mod_items, & base, & pc_r, & base_pc_r, f . name ) ;
335
+ let base_pc_r = derive_from_base ( mod_items, & base, & pc_r, & base_pc_r, description ) ;
332
336
333
337
let doc = format ! ( "Reader of field `{}`" , f. name) ;
334
338
mod_items. push ( quote ! {
@@ -343,7 +347,7 @@ pub fn fields(
343
347
let has_reserved_variant = evs. values . len ( ) != ( 1 << f. width ) ;
344
348
let variants = Variant :: from_enumerated_values ( evs) ?;
345
349
346
- add_from_variants ( mod_items, & variants, pc_r, & f) ;
350
+ add_from_variants ( mod_items, & variants, pc_r, & f, description , rv ) ;
347
351
348
352
let mut enum_items = vec ! [ ] ;
349
353
@@ -425,7 +429,6 @@ pub fn fields(
425
429
}
426
430
427
431
} else {
428
- let description = & util:: escape_brackets ( & f. description ) ;
429
432
let sc = & f. sc ;
430
433
r_impl_items. push ( quote ! {
431
434
#[ doc = #description]
@@ -463,11 +466,11 @@ pub fn fields(
463
466
base_pc_w = base. as_ref ( ) . map ( |base| {
464
467
let pc = base. field . to_sanitized_upper_case ( ) ;
465
468
let base_pc_w = Ident :: from ( & * format ! ( "{}_AW" , pc) ) ;
466
- derive_from_base ( mod_items, & base, & pc_w, & base_pc_w, f . name )
469
+ derive_from_base ( mod_items, & base, & pc_w, & base_pc_w, description )
467
470
} ) ;
468
471
469
472
if base. is_none ( ) {
470
- add_from_variants ( mod_items, & variants, pc_w, & f) ;
473
+ add_from_variants ( mod_items, & variants, pc_w, & f, description , rv ) ;
471
474
}
472
475
}
473
476
@@ -523,7 +526,7 @@ pub fn fields(
523
526
}
524
527
525
528
proxy_items. push ( if offset != 0 {
526
- let offset = & f . offset ;
529
+ let offset = & util :: unsuffixed ( offset) ;
527
530
quote ! {
528
531
///Writes raw bits to the field
529
532
#[ inline( always) ]
@@ -555,7 +558,6 @@ pub fn fields(
555
558
}
556
559
} ) ;
557
560
558
- let description = & util:: escape_brackets ( & f. description ) ;
559
561
let sc = & f. sc ;
560
562
w_impl_items. push ( quote ! {
561
563
#[ doc = #description]
@@ -622,14 +624,13 @@ impl Variant {
622
624
}
623
625
}
624
626
625
- fn add_from_variants ( mod_items : & mut Vec < Tokens > , variants : & Vec < Variant > , pc : & Ident , f : & F ) {
627
+ fn add_from_variants ( mod_items : & mut Vec < Tokens > , variants : & Vec < Variant > , pc : & Ident , f : & F , desc : & str , reset_value : Option < u64 > ) {
626
628
let fty = & f. ty ;
627
- let desc = format ! ( "Possible values of the field `{}`" , f. name) ;
628
629
629
630
let vars = variants
630
631
. iter ( )
631
632
. map ( |v| {
632
- let desc = util:: escape_brackets ( & v . doc ) ;
633
+ let desc = util:: escape_brackets ( & format ! ( "{}: {}" , v . value , v . doc) ) ;
633
634
let pcv = & v. pc ;
634
635
quote ! {
635
636
#[ doc = #desc]
@@ -638,6 +639,12 @@ fn add_from_variants(mod_items: &mut Vec<Tokens>, variants: &Vec<Variant>, pc: &
638
639
} )
639
640
. collect :: < Vec < _ > > ( ) ;
640
641
642
+ let desc = if let Some ( rv) = reset_value {
643
+ format ! ( "{}\n \n Value on reset: {}" , desc, rv)
644
+ } else {
645
+ desc. to_owned ( )
646
+ } ;
647
+
641
648
mod_items. push ( quote ! {
642
649
#[ doc = #desc]
643
650
#[ derive( Clone , Copy , Debug , PartialEq ) ]
@@ -667,9 +674,7 @@ fn add_from_variants(mod_items: &mut Vec<Tokens>, variants: &Vec<Variant>, pc: &
667
674
} ) ;
668
675
}
669
676
670
- fn derive_from_base ( mod_items : & mut Vec < Tokens > , base : & Base , pc : & Ident , base_pc : & Ident , fname : & str ) -> quote:: Tokens {
671
- let desc = format ! ( "Possible values of the field `{}`" , fname, ) ;
672
-
677
+ fn derive_from_base ( mod_items : & mut Vec < Tokens > , base : & Base , pc : & Ident , base_pc : & Ident , desc : & str ) -> quote:: Tokens {
673
678
if let ( Some ( peripheral) , Some ( register) ) = ( & base. peripheral , & base. register ) {
674
679
let pmod_ = peripheral. to_sanitized_snake_case ( ) ;
675
680
let rmod_ = register. to_sanitized_snake_case ( ) ;
@@ -716,9 +721,9 @@ struct F<'a> {
716
721
access : Option < Access > ,
717
722
description : String ,
718
723
evs : & ' a [ EnumeratedValues ] ,
719
- mask : Tokens ,
724
+ mask : u64 ,
720
725
name : & ' a str ,
721
- offset : Tokens ,
726
+ offset : u64 ,
722
727
pc_r : Ident ,
723
728
_pc_r : Ident ,
724
729
pc_w : Ident ,
0 commit comments