41
41
unicode = str
42
42
PATH_OVERRIDES = set (["target.bootloader_img" ])
43
43
BOOTLOADER_OVERRIDES = set (["target.bootloader_img" , "target.restrict_size" ,
44
+ "target.header_format" ,
44
45
"target.mbed_app_start" , "target.mbed_app_size" ])
45
46
46
47
# Base class for all configuration exceptions
@@ -568,6 +569,29 @@ def regions(self):
568
569
raise ConfigException (
569
570
"Bootloader build requested but no bootlader configuration" )
570
571
572
+ @staticmethod
573
+ def _header_size (format ):
574
+ size_in_bytes = 0
575
+ for _ , _ , subtype , _ in format :
576
+ try :
577
+ size_in_bytes += int (subtype ) // 8
578
+ except :
579
+ if subtype == "CRCITT32" :
580
+ size_in_bytes += 32 // 8
581
+ elif subtype == "SHA256" :
582
+ size_in_bytes += 256 // 8
583
+ else :
584
+ raise ValueError ("target.header_format: subtype %s is not "
585
+ "understood" % subtype )
586
+ return size_in_bytes
587
+
588
+ def _make_header_region (self , start , header_format ):
589
+ size = self ._header_size (header_format )
590
+ region = Region ("application_header" , start , size , False , None )
591
+ start += size
592
+ start = ((start + 7 ) // 8 ) * 8
593
+ return (start , region )
594
+
571
595
def _generate_bootloader_build (self , rom_start , rom_size ):
572
596
start = rom_start
573
597
rom_end = rom_start + rom_size
@@ -588,11 +612,19 @@ def _generate_bootloader_build(self, rom_start, rom_size):
588
612
yield Region ("bootloader" , rom_start , part_size , False ,
589
613
filename )
590
614
start = rom_start + part_size
615
+ if self .target .header_format :
616
+ start , region = self ._make_header_region (
617
+ start , self .target .header_format )
618
+ yield region
591
619
if self .target .restrict_size is not None :
592
620
new_size = int (self .target .restrict_size , 0 )
593
621
new_size = Config ._align_floor (start + new_size , self .sectors ) - start
594
622
yield Region ("application" , start , new_size , True , None )
595
623
start += new_size
624
+ if self .target .header_format :
625
+ start , region = self ._make_header_region (
626
+ start , self .target .header_format )
627
+ yield region
596
628
yield Region ("post_application" , start , rom_end - start ,
597
629
False , None )
598
630
else :
0 commit comments