@@ -150,7 +150,7 @@ where
150150 }
151151}
152152
153- #[ derive( Clone , Copy , Debug ) ]
153+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
154154pub struct FieldBitRangeFormat ( pub BitRangeType ) ;
155155
156156impl FromStr for FieldBitRangeFormat {
@@ -167,9 +167,14 @@ impl FromStr for FieldBitRangeFormat {
167167}
168168
169169#[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
170+ #[ non_exhaustive]
171+ /// Apply a kind of sorting
170172pub enum Sorting {
173+ /// Sort by addresses of offsets
171174 Offset ,
175+ /// Same as [`Sorting::Offset`], but reversed
172176 OffsetReversed ,
177+ /// Sort by name
173178 Name ,
174179}
175180
@@ -225,6 +230,9 @@ pub struct Config {
225230 /// Sort peripherals in specified order
226231 pub peripheral_sorting : Option < Sorting > ,
227232
233+ /// Place derived peripherals in the end
234+ pub peripheral_derived_last : bool ,
235+
228236 /// Format of addressBlock's offset element
229237 ///
230238 /// format: hex, dec
@@ -256,6 +264,9 @@ pub struct Config {
256264 /// First write registers or clusters
257265 pub registers_or_clusters_first : Option < RegistersOrClustersFirst > ,
258266
267+ /// Place derived registers and clusters in the end
268+ pub register_cluster_derived_last : bool ,
269+
259270 /// Format of register's name-kind elements
260271 /// - `derivedFrom`
261272 /// - `name`
@@ -295,6 +306,9 @@ pub struct Config {
295306 /// Sort fields in specified order
296307 pub field_sorting : Option < Sorting > ,
297308
309+ /// Place derived fields in the end
310+ pub field_derived_last : bool ,
311+
298312 /// Format of enumeratedValues's name-kind elements
299313 /// - `derivedFrom`
300314 /// - `name`
@@ -329,13 +343,15 @@ impl Default for Config {
329343 peripheral_name : None ,
330344 peripheral_base_address : NumberFormat :: UpperHex8 ,
331345 peripheral_sorting : None ,
346+ peripheral_derived_last : false ,
332347 address_block_offset : NumberFormat :: UpperHex ,
333348 address_block_size : NumberFormat :: UpperHex ,
334349 interrupt_name : None ,
335350 cluster_name : None ,
336351 cluster_address_offset : NumberFormat :: UpperHex ,
337352 register_cluster_sorting : None ,
338353 registers_or_clusters_first : None ,
354+ register_cluster_derived_last : false ,
339355 register_name : None ,
340356 register_address_offset : NumberFormat :: UpperHex ,
341357 register_size : NumberFormat :: LowerHex ,
@@ -344,6 +360,7 @@ impl Default for Config {
344360 field_name : None ,
345361 field_bit_range : None ,
346362 field_sorting : None ,
363+ field_derived_last : false ,
347364 enumerated_values_name : None ,
348365 enumerated_value_name : None ,
349366 enumerated_value_value : NumberFormat :: Dec ,
@@ -363,6 +380,7 @@ impl Config {
363380 "peripheral_name" => self . peripheral_name = Some ( value. parse ( ) . unwrap ( ) ) ,
364381 "peripheral_base_address" => self . peripheral_base_address = value. parse ( ) . unwrap ( ) ,
365382 "peripheral_sorting" => self . peripheral_sorting = Some ( value. parse ( ) . unwrap ( ) ) ,
383+ "peripheral_derived_last" => self . peripheral_derived_last = value. parse ( ) . unwrap ( ) ,
366384 "address_block_offset" => self . address_block_offset = value. parse ( ) . unwrap ( ) ,
367385 "address_block_size" => self . address_block_size = value. parse ( ) . unwrap ( ) ,
368386 "interrupt_name" => self . interrupt_name = Some ( value. parse ( ) . unwrap ( ) ) ,
@@ -374,6 +392,9 @@ impl Config {
374392 "registers_or_clusters_first" => {
375393 self . registers_or_clusters_first = Some ( value. parse ( ) . unwrap ( ) )
376394 }
395+ "register_cluster_derived_last" => {
396+ self . register_cluster_derived_last = value. parse ( ) . unwrap ( )
397+ }
377398 "register_name" => self . register_name = Some ( value. parse ( ) . unwrap ( ) ) ,
378399 "register_address_offset" => self . register_address_offset = value. parse ( ) . unwrap ( ) ,
379400 "register_size" => self . register_size = value. parse ( ) . unwrap ( ) ,
@@ -382,6 +403,7 @@ impl Config {
382403 "field_name" => self . field_name = Some ( value. parse ( ) . unwrap ( ) ) ,
383404 "field_bit_range" => self . field_bit_range = Some ( value. parse ( ) . unwrap ( ) ) ,
384405 "field_sorting" => self . field_sorting = Some ( value. parse ( ) . unwrap ( ) ) ,
406+ "field_derived_last" => self . field_derived_last = value. parse ( ) . unwrap ( ) ,
385407 "enumerated_values_name" => self . enumerated_values_name = Some ( value. parse ( ) . unwrap ( ) ) ,
386408 "enumerated_value_name" => self . enumerated_value_name = Some ( value. parse ( ) . unwrap ( ) ) ,
387409 "enumerated_value_value" => self . enumerated_value_value = value. parse ( ) . unwrap ( ) ,
@@ -418,6 +440,14 @@ impl Config {
418440 self
419441 }
420442
443+ /// Place derived peripherals in the end
444+ ///
445+ /// `false` means keep the original order
446+ pub fn peripheral_derived_last ( mut self , val : bool ) -> Self {
447+ self . peripheral_derived_last = val;
448+ self
449+ }
450+
421451 /// Format of addressBlock's offset element
422452 ///
423453 /// format: hex, dec
@@ -470,6 +500,14 @@ impl Config {
470500 self
471501 }
472502
503+ /// Place derived registers and clusters in the end
504+ ///
505+ /// `false` means keep the original order
506+ pub fn register_cluster_derived_last ( mut self , val : bool ) -> Self {
507+ self . register_cluster_derived_last = val;
508+ self
509+ }
510+
473511 /// Format of register's name-kind elements
474512 pub fn register_name ( mut self , val : Option < IdentifierFormat > ) -> Self {
475513 self . register_name = val;
@@ -530,6 +568,14 @@ impl Config {
530568 self
531569 }
532570
571+ /// Place derived fields in the end
572+ ///
573+ /// `false` means keep the original order
574+ pub fn field_derived_last ( mut self , val : bool ) -> Self {
575+ self . field_derived_last = val;
576+ self
577+ }
578+
533579 /// Format of enumeratedValues's name-kind elements
534580 pub fn enumerated_values_name ( mut self , val : Option < IdentifierFormat > ) -> Self {
535581 self . enumerated_values_name = val;
0 commit comments