@@ -442,13 +442,13 @@ fn register_or_cluster_block(
442
442
ercs : & [ RegisterCluster ] ,
443
443
defs : & RegisterProperties ,
444
444
name : Option < & str > ,
445
- _config : & Config ,
445
+ config : & Config ,
446
446
) -> Result < TokenStream > {
447
447
let mut rbfs = TokenStream :: new ( ) ;
448
448
let mut accessors = TokenStream :: new ( ) ;
449
449
let mut have_accessors = false ;
450
450
451
- let ercs_expanded = expand ( ercs, defs, name) ?;
451
+ let ercs_expanded = expand ( ercs, defs, name, config ) ?;
452
452
453
453
// Locate conflicting regions; we'll need to use unions to represent them.
454
454
let mut regions = FieldRegions :: default ( ) ;
@@ -576,13 +576,14 @@ fn expand(
576
576
ercs : & [ RegisterCluster ] ,
577
577
defs : & RegisterProperties ,
578
578
name : Option < & str > ,
579
+ config : & Config ,
579
580
) -> Result < Vec < RegisterBlockField > > {
580
581
let mut ercs_expanded = vec ! [ ] ;
581
582
582
583
for erc in ercs {
583
584
ercs_expanded. extend ( match & erc {
584
- RegisterCluster :: Register ( register) => expand_register ( register, defs, name) ?,
585
- RegisterCluster :: Cluster ( cluster) => expand_cluster ( cluster, defs, name) ?,
585
+ RegisterCluster :: Register ( register) => expand_register ( register, defs, name, config ) ?,
586
+ RegisterCluster :: Cluster ( cluster) => expand_cluster ( cluster, defs, name, config ) ?,
586
587
} ) ;
587
588
}
588
589
@@ -593,21 +594,25 @@ fn expand(
593
594
594
595
/// Recursively calculate the size of a cluster. A cluster's size is the maximum
595
596
/// end position of its recursive children.
596
- fn cluster_size_in_bits ( info : & ClusterInfo , defs : & RegisterProperties ) -> Result < u32 > {
597
+ fn cluster_size_in_bits (
598
+ info : & ClusterInfo ,
599
+ defs : & RegisterProperties ,
600
+ config : & Config ,
601
+ ) -> Result < u32 > {
597
602
let mut size = 0 ;
598
603
599
604
for c in & info. children {
600
605
let end = match c {
601
606
RegisterCluster :: Register ( reg) => {
602
- let reg_size: u32 = expand_register ( reg, defs, None ) ?
607
+ let reg_size: u32 = expand_register ( reg, defs, None , config ) ?
603
608
. iter ( )
604
609
. map ( |rbf| rbf. size )
605
610
. sum ( ) ;
606
611
607
612
( reg. address_offset * BITS_PER_BYTE ) + reg_size
608
613
}
609
614
RegisterCluster :: Cluster ( clust) => {
610
- ( clust. address_offset * BITS_PER_BYTE ) + cluster_size_in_bits ( clust, defs) ?
615
+ ( clust. address_offset * BITS_PER_BYTE ) + cluster_size_in_bits ( clust, defs, config ) ?
611
616
}
612
617
} ;
613
618
@@ -621,12 +626,13 @@ fn expand_cluster(
621
626
cluster : & Cluster ,
622
627
defs : & RegisterProperties ,
623
628
name : Option < & str > ,
629
+ config : & Config ,
624
630
) -> Result < Vec < RegisterBlockField > > {
625
631
let mut cluster_expanded = vec ! [ ] ;
626
632
627
633
let defs = cluster. default_register_properties . derive_from ( defs) ;
628
634
629
- let cluster_size = cluster_size_in_bits ( cluster, & defs)
635
+ let cluster_size = cluster_size_in_bits ( cluster, & defs, config )
630
636
. with_context ( || format ! ( "Cluster {} has no determinable `size` field" , cluster. name) ) ?;
631
637
632
638
match cluster {
@@ -678,6 +684,7 @@ fn expand_register(
678
684
register : & Register ,
679
685
defs : & RegisterProperties ,
680
686
name : Option < & str > ,
687
+ config : & Config ,
681
688
) -> Result < Vec < RegisterBlockField > > {
682
689
let mut register_expanded = vec ! [ ] ;
683
690
@@ -688,7 +695,7 @@ fn expand_register(
688
695
689
696
match register {
690
697
Register :: Single ( info) => register_expanded. push ( RegisterBlockField {
691
- field : convert_svd_register ( register, name) ?,
698
+ field : convert_svd_register ( register, name, config . ignore_groups ) ?,
692
699
description : info. description . clone ( ) . unwrap_or_default ( ) ,
693
700
offset : info. address_offset ,
694
701
size : register_size,
@@ -708,13 +715,16 @@ fn expand_register(
708
715
709
716
if array_convertible {
710
717
register_expanded. push ( RegisterBlockField {
711
- field : convert_svd_register ( & register, name) ?,
718
+ field : convert_svd_register ( & register, name, config . ignore_groups ) ?,
712
719
description : info. description . clone ( ) . unwrap_or_default ( ) ,
713
720
offset : info. address_offset ,
714
721
size : register_size * array_info. dim ,
715
722
} ) ;
716
723
} else {
717
- for ( field_num, field) in expand_svd_register ( register, name) ?. iter ( ) . enumerate ( ) {
724
+ for ( field_num, field) in expand_svd_register ( register, name, config. ignore_groups ) ?
725
+ . iter ( )
726
+ . enumerate ( )
727
+ {
718
728
register_expanded. push ( RegisterBlockField {
719
729
field : field. clone ( ) ,
720
730
description : info. description . clone ( ) . unwrap_or_default ( ) ,
@@ -792,11 +802,12 @@ fn cluster_block(
792
802
fn expand_svd_register (
793
803
register : & Register ,
794
804
name : Option < & str > ,
805
+ ignore_group : bool ,
795
806
) -> Result < Vec < syn:: Field > , syn:: Error > {
796
807
let mut out = vec ! [ ] ;
797
808
798
809
match register {
799
- Register :: Single ( _info) => out. push ( convert_svd_register ( register, name) ?) ,
810
+ Register :: Single ( _info) => out. push ( convert_svd_register ( register, name, ignore_group ) ?) ,
800
811
Register :: Array ( info, array_info) => {
801
812
let indices = array_info
802
813
. dim_index
@@ -810,10 +821,10 @@ fn expand_svd_register(
810
821
)
811
822
} ) ;
812
823
813
- let ty_name = util:: replace_suffix ( & info. fullname ( ) , "" ) ;
824
+ let ty_name = util:: replace_suffix ( & info. fullname ( ignore_group ) , "" ) ;
814
825
815
826
for ( idx, _i) in indices. iter ( ) . zip ( 0 ..) {
816
- let nb_name = util:: replace_suffix ( & info. fullname ( ) , idx) ;
827
+ let nb_name = util:: replace_suffix ( & info. fullname ( ignore_group ) , idx) ;
817
828
818
829
let ty = name_to_wrapped_ty ( & ty_name, name) ?;
819
830
@@ -825,17 +836,21 @@ fn expand_svd_register(
825
836
}
826
837
827
838
/// Convert a parsed `Register` into its `Field` equivalent
828
- fn convert_svd_register ( register : & Register , name : Option < & str > ) -> Result < syn:: Field , syn:: Error > {
839
+ fn convert_svd_register (
840
+ register : & Register ,
841
+ name : Option < & str > ,
842
+ ignore_group : bool ,
843
+ ) -> Result < syn:: Field , syn:: Error > {
829
844
Ok ( match register {
830
845
Register :: Single ( info) => {
831
- let info_name = info. fullname ( ) ;
846
+ let info_name = info. fullname ( ignore_group ) ;
832
847
new_syn_field (
833
848
& info_name. to_sanitized_snake_case ( ) ,
834
849
name_to_wrapped_ty ( & info_name, name) ?,
835
850
)
836
851
}
837
852
Register :: Array ( info, array_info) => {
838
- let nb_name = util:: replace_suffix ( & info. fullname ( ) , "" ) ;
853
+ let nb_name = util:: replace_suffix ( & info. fullname ( ignore_group ) , "" ) ;
839
854
let ty = syn:: Type :: Array ( parse_str :: < syn:: TypeArray > ( & format ! (
840
855
"[{};{}]" ,
841
856
name_to_wrapped_ty_str( & nb_name, name) ,
0 commit comments