@@ -19,10 +19,7 @@ use rand::{
19
19
rngs:: SmallRng ,
20
20
} ;
21
21
use std:: {
22
- collections:: { BTreeMap , HashSet } ,
23
- io:: { Cursor , Write } ,
24
- mem,
25
- slice,
22
+ collections:: { BTreeMap , HashSet } , io:: { Cursor , Write } , mem, rc:: Rc , slice
26
23
} ;
27
24
use aes:: {
28
25
Aes128 ,
@@ -67,7 +64,7 @@ const RAM_LOAD_ADDR: u32 = 1024;
67
64
#[ derive( Clone ) ]
68
65
pub struct ImagesBuilder {
69
66
flash : SimMultiFlash ,
70
- areadesc : AreaDesc ,
67
+ areadesc : Rc < AreaDesc > ,
71
68
slots : Vec < [ SlotInfo ; 2 ] > ,
72
69
ram : RamData ,
73
70
}
@@ -77,7 +74,7 @@ pub struct ImagesBuilder {
77
74
/// and upgrades hold the expected contents of these images.
78
75
pub struct Images {
79
76
flash : SimMultiFlash ,
80
- areadesc : AreaDesc ,
77
+ areadesc : Rc < AreaDesc > ,
81
78
images : Vec < OneImage > ,
82
79
total_count : Option < i32 > ,
83
80
ram : RamData ,
@@ -433,7 +430,7 @@ impl ImagesBuilder {
433
430
}
434
431
435
432
/// Build the Flash and area descriptor for a given device.
436
- pub fn make_device ( device : DeviceName , align : usize , erased_val : u8 ) -> ( SimMultiFlash , AreaDesc , & ' static [ Caps ] ) {
433
+ pub fn make_device ( device : DeviceName , align : usize , erased_val : u8 ) -> ( SimMultiFlash , Rc < AreaDesc > , & ' static [ Caps ] ) {
437
434
match device {
438
435
DeviceName :: Stm32f4 => {
439
436
// STM style flash. Large sectors, with a large scratch area.
@@ -454,7 +451,7 @@ impl ImagesBuilder {
454
451
455
452
let mut flash = SimMultiFlash :: new ( ) ;
456
453
flash. insert ( dev_id, dev) ;
457
- ( flash, areadesc, & [ Caps :: SwapUsingMove ] )
454
+ ( flash, Rc :: new ( areadesc) , & [ Caps :: SwapUsingMove ] )
458
455
}
459
456
DeviceName :: K64f => {
460
457
// NXP style flash. Small sectors, one small sector for scratch.
@@ -469,7 +466,7 @@ impl ImagesBuilder {
469
466
470
467
let mut flash = SimMultiFlash :: new ( ) ;
471
468
flash. insert ( dev_id, dev) ;
472
- ( flash, areadesc, & [ ] )
469
+ ( flash, Rc :: new ( areadesc) , & [ ] )
473
470
}
474
471
DeviceName :: K64fBig => {
475
472
// Simulating an STM style flash on top of an NXP style flash. Underlying flash device
@@ -485,7 +482,7 @@ impl ImagesBuilder {
485
482
486
483
let mut flash = SimMultiFlash :: new ( ) ;
487
484
flash. insert ( dev_id, dev) ;
488
- ( flash, areadesc, & [ Caps :: SwapUsingMove ] )
485
+ ( flash, Rc :: new ( areadesc) , & [ Caps :: SwapUsingMove ] )
489
486
}
490
487
DeviceName :: Nrf52840 => {
491
488
// Simulating the flash on the nrf52840 with partitions set up so that the scratch size
@@ -501,7 +498,7 @@ impl ImagesBuilder {
501
498
502
499
let mut flash = SimMultiFlash :: new ( ) ;
503
500
flash. insert ( dev_id, dev) ;
504
- ( flash, areadesc, & [ ] )
501
+ ( flash, Rc :: new ( areadesc) , & [ ] )
505
502
}
506
503
DeviceName :: Nrf52840UnequalSlots => {
507
504
let dev = SimFlash :: new ( vec ! [ 4096 ; 128 ] , align as usize , erased_val) ;
@@ -514,7 +511,7 @@ impl ImagesBuilder {
514
511
515
512
let mut flash = SimMultiFlash :: new ( ) ;
516
513
flash. insert ( dev_id, dev) ;
517
- ( flash, areadesc, & [ Caps :: SwapUsingScratch , Caps :: OverwriteUpgrade ] )
514
+ ( flash, Rc :: new ( areadesc) , & [ Caps :: SwapUsingScratch , Caps :: OverwriteUpgrade ] )
518
515
}
519
516
DeviceName :: Nrf52840SpiFlash => {
520
517
// Simulate nrf52840 with external SPI flash. The external SPI flash
@@ -533,7 +530,7 @@ impl ImagesBuilder {
533
530
let mut flash = SimMultiFlash :: new ( ) ;
534
531
flash. insert ( 0 , dev0) ;
535
532
flash. insert ( 1 , dev1) ;
536
- ( flash, areadesc, & [ Caps :: SwapUsingMove ] )
533
+ ( flash, Rc :: new ( areadesc) , & [ Caps :: SwapUsingMove ] )
537
534
}
538
535
DeviceName :: K64fMulti => {
539
536
// NXP style flash, but larger, to support multiple images.
@@ -550,7 +547,7 @@ impl ImagesBuilder {
550
547
551
548
let mut flash = SimMultiFlash :: new ( ) ;
552
549
flash. insert ( dev_id, dev) ;
553
- ( flash, areadesc, & [ ] )
550
+ ( flash, Rc :: new ( areadesc) , & [ ] )
554
551
}
555
552
}
556
553
}
0 commit comments