imgtool: add erased-val cli option

Add `-R`/`--erased-val` CLI option when creating images, which accepts
a value to be used for padding. This is useful when creating images
that run in devices that have flash erased to some value different
from 0xff (like STM32L0x and STM32L1x that have 0s).

Signed-off-by: Fabio Utzig <utzig@apache.org>
diff --git a/scripts/imgtool/image.py b/scripts/imgtool/image.py
index 78600dd..e6ae581 100644
--- a/scripts/imgtool/image.py
+++ b/scripts/imgtool/image.py
@@ -113,7 +113,7 @@
     def __init__(self, version=None, header_size=IMAGE_HEADER_SIZE,
                  pad_header=False, pad=False, align=1, slot_size=0,
                  max_sectors=DEFAULT_MAX_SECTORS, overwrite_only=False,
-                 endian="little", load_addr=0):
+                 endian="little", load_addr=0, erased_val=0xff):
         self.version = version or versmod.decode_version("0")
         self.header_size = header_size
         self.pad_header = pad_header
@@ -125,6 +125,7 @@
         self.endian = endian
         self.base_addr = None
         self.load_addr = 0 if load_addr is None else load_addr
+        self.erased_val = 0xff if erased_val is None else int(erased_val)
         self.payload = []
         self.enckey = None
 
@@ -160,7 +161,8 @@
             if self.base_addr:
                 # Adjust base_addr for new header
                 self.base_addr -= self.header_size
-            self.payload = (b'\000' * self.header_size) + self.payload
+            self.payload = bytes([self.erased_val] * self.header_size) + \
+                self.payload
 
         self.check()
 
@@ -347,8 +349,8 @@
         tsize = self._trailer_size(self.align, self.max_sectors,
                                    self.overwrite_only, self.enckey)
         padding = size - (len(self.payload) + tsize)
-        pbytes = b'\xff' * padding
-        pbytes += b'\xff' * (tsize - len(boot_magic))
+        pbytes = bytes([self.erased_val] * padding)
+        pbytes += bytes([self.erased_val] * (tsize - len(boot_magic)))
         pbytes += boot_magic
         self.payload += pbytes
 
diff --git a/scripts/imgtool/main.py b/scripts/imgtool/main.py
index 48bbd74..2b0d4fe 100755
--- a/scripts/imgtool/main.py
+++ b/scripts/imgtool/main.py
@@ -182,6 +182,9 @@
 
 @click.argument('outfile')
 @click.argument('infile')
+@click.option('-R', '--erased-val', type=click.Choice(['0', '0xff']),
+              required=False,
+              help='The value that is read back from erased flash.')
 @click.option('-x', '--hex-addr', type=BasedIntParamType(), required=False,
               help='Adjust address in hex output file.')
 @click.option('-L', '--load-addr', type=BasedIntParamType(), required=False,
@@ -214,12 +217,12 @@
                .hex extension, otherwise binary format is used''')
 def sign(key, align, version, header_size, pad_header, slot_size, pad,
          max_sectors, overwrite_only, endian, encrypt, infile, outfile,
-         dependencies, load_addr, hex_addr):
+         dependencies, load_addr, hex_addr, erased_val):
     img = image.Image(version=decode_version(version), header_size=header_size,
                       pad_header=pad_header, pad=pad, align=int(align),
                       slot_size=slot_size, max_sectors=max_sectors,
                       overwrite_only=overwrite_only, endian=endian,
-                      load_addr=load_addr)
+                      load_addr=load_addr, erased_val=erased_val)
     img.load(infile)
     key = load_key(key) if key else None
     enckey = load_key(encrypt) if encrypt else None