@@ -166,6 +166,26 @@ impl FromStr for FieldBitRangeFormat {
166
166
}
167
167
}
168
168
169
+ #[ derive( Clone , Copy , Debug , PartialEq , Eq ) ]
170
+ pub enum Sorting {
171
+ Offset ,
172
+ OffsetReversed ,
173
+ Name ,
174
+ }
175
+
176
+ impl FromStr for Sorting {
177
+ type Err = ( ) ;
178
+
179
+ fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
180
+ match s {
181
+ "Offset" => Ok ( Self :: Offset ) ,
182
+ "OffsetReversed" => Ok ( Self :: OffsetReversed ) ,
183
+ "Name" => Ok ( Self :: OffsetReversed ) ,
184
+ _ => Err ( ( ) ) ,
185
+ }
186
+ }
187
+ }
188
+
169
189
#[ derive( Clone , Copy , Debug ) ]
170
190
#[ non_exhaustive]
171
191
/// Advanced encoder options
@@ -184,6 +204,9 @@ pub struct Config {
184
204
/// format: hex, dec
185
205
pub peripheral_base_address : NumberFormat ,
186
206
207
+ /// Sort peripherals in specified order
208
+ pub peripheral_sorting : Option < Sorting > ,
209
+
187
210
/// Format of addressBlock's offset element
188
211
///
189
212
/// format: hex, dec
@@ -209,6 +232,9 @@ pub struct Config {
209
232
/// format: hex, dec
210
233
pub cluster_address_offset : NumberFormat ,
211
234
235
+ /// Sort registers and clusters in specified order
236
+ pub register_cluster_sorting : Option < Sorting > ,
237
+
212
238
/// Format of register's name-kind elements
213
239
/// - `derivedFrom`
214
240
/// - `name`
@@ -245,6 +271,9 @@ pub struct Config {
245
271
/// `None` means keep the original bitRange
246
272
pub field_bit_range : Option < FieldBitRangeFormat > ,
247
273
274
+ /// Sort fields in specified order
275
+ pub field_sorting : Option < Sorting > ,
276
+
248
277
/// Format of enumeratedValues's name-kind elements
249
278
/// - `derivedFrom`
250
279
/// - `name`
@@ -278,18 +307,21 @@ impl Default for Config {
278
307
Self {
279
308
peripheral_name : None ,
280
309
peripheral_base_address : NumberFormat :: UpperHex8 ,
310
+ peripheral_sorting : None ,
281
311
address_block_offset : NumberFormat :: UpperHex ,
282
312
address_block_size : NumberFormat :: UpperHex ,
283
313
interrupt_name : None ,
284
314
cluster_name : None ,
285
315
cluster_address_offset : NumberFormat :: UpperHex ,
316
+ register_cluster_sorting : None ,
286
317
register_name : None ,
287
318
register_address_offset : NumberFormat :: UpperHex ,
288
319
register_size : NumberFormat :: LowerHex ,
289
320
register_reset_value : NumberFormat :: UpperHex16 ,
290
321
register_reset_mask : NumberFormat :: UpperHex16 ,
291
322
field_name : None ,
292
323
field_bit_range : None ,
324
+ field_sorting : None ,
293
325
enumerated_values_name : None ,
294
326
enumerated_value_name : None ,
295
327
enumerated_value_value : NumberFormat :: Dec ,
@@ -308,18 +340,23 @@ impl Config {
308
340
match name {
309
341
"peripheral_name" => self . peripheral_name = Some ( value. parse ( ) . unwrap ( ) ) ,
310
342
"peripheral_base_address" => self . peripheral_base_address = value. parse ( ) . unwrap ( ) ,
343
+ "peripheral_sorting" => self . peripheral_sorting = Some ( value. parse ( ) . unwrap ( ) ) ,
311
344
"address_block_offset" => self . address_block_offset = value. parse ( ) . unwrap ( ) ,
312
345
"address_block_size" => self . address_block_size = value. parse ( ) . unwrap ( ) ,
313
346
"interrupt_name" => self . interrupt_name = Some ( value. parse ( ) . unwrap ( ) ) ,
314
347
"cluster_name" => self . cluster_name = Some ( value. parse ( ) . unwrap ( ) ) ,
315
348
"cluster_address_offset" => self . cluster_address_offset = value. parse ( ) . unwrap ( ) ,
349
+ "register_cluster_sorting" => {
350
+ self . register_cluster_sorting = Some ( value. parse ( ) . unwrap ( ) )
351
+ }
316
352
"register_name" => self . register_name = Some ( value. parse ( ) . unwrap ( ) ) ,
317
353
"register_address_offset" => self . register_address_offset = value. parse ( ) . unwrap ( ) ,
318
354
"register_size" => self . register_size = value. parse ( ) . unwrap ( ) ,
319
355
"register_reset_value" => self . register_reset_value = value. parse ( ) . unwrap ( ) ,
320
356
"register_reset_mask" => self . register_reset_mask = value. parse ( ) . unwrap ( ) ,
321
357
"field_name" => self . field_name = Some ( value. parse ( ) . unwrap ( ) ) ,
322
358
"field_bit_range" => self . field_bit_range = Some ( value. parse ( ) . unwrap ( ) ) ,
359
+ "field_sorting" => self . field_sorting = Some ( value. parse ( ) . unwrap ( ) ) ,
323
360
"enumerated_values_name" => self . enumerated_values_name = Some ( value. parse ( ) . unwrap ( ) ) ,
324
361
"enumerated_value_name" => self . enumerated_value_name = Some ( value. parse ( ) . unwrap ( ) ) ,
325
362
"enumerated_value_value" => self . enumerated_value_value = value. parse ( ) . unwrap ( ) ,
@@ -348,6 +385,14 @@ impl Config {
348
385
self
349
386
}
350
387
388
+ /// Sort peripherals in specified order
389
+ ///
390
+ /// `None` means keep the original order
391
+ pub fn peripheral_sorting ( mut self , val : Option < Sorting > ) -> Self {
392
+ self . peripheral_sorting = val;
393
+ self
394
+ }
395
+
351
396
/// Format of addressBlock's offset element
352
397
///
353
398
/// format: hex, dec
@@ -384,6 +429,14 @@ impl Config {
384
429
self
385
430
}
386
431
432
+ /// Sort registers and clusters in specified order
433
+ ///
434
+ /// `None` means keep the original order
435
+ pub fn register_cluster_sorting ( mut self , val : Option < Sorting > ) -> Self {
436
+ self . register_cluster_sorting = val;
437
+ self
438
+ }
439
+
387
440
/// Format of register's name-kind elements
388
441
pub fn register_name ( mut self , val : Option < IdentifierFormat > ) -> Self {
389
442
self . register_name = val;
@@ -436,6 +489,14 @@ impl Config {
436
489
self
437
490
}
438
491
492
+ /// Sort fields in specified order
493
+ ///
494
+ /// `None` means keep the original order
495
+ pub fn field_sorting ( mut self , val : Option < Sorting > ) -> Self {
496
+ self . field_sorting = val;
497
+ self
498
+ }
499
+
439
500
/// Format of enumeratedValues's name-kind elements
440
501
pub fn enumerated_values_name ( mut self , val : Option < IdentifierFormat > ) -> Self {
441
502
self . enumerated_values_name = val;
0 commit comments