+------------------------+----------------------------------------------------------------------------------------------+
| output | Path to output converted binary file. Will use stdout if omitted |
+------------------------+----------------------------------------------------------------------------------------------+
-| size | Size of NVS Partition in KB. Eg. 12KB |
+| size | Size of NVS Partition in hex (must be multiple of 4096). Eg. 0x1000 |
+------------------------+----------------------------------------------------------------------------------------------+
| --version {v1,v2} | Set version. Default: v2 |
+-------------------------------+---------------------------------------------------------------------------------------+
data_input = byte_arr
-
+
if sys.version_info[0] < 3:
data_input = binascii.hexlify(bytearray(data_input))
else:
data_val = str(data_bytes) + (init_data_val * (data_len_needed - len(data_bytes)))
encr_data_ret = self.encrypt_entry(data_val, tweak_val, encr_key_input)
- #print("\n<<<\n")
encr_data_to_write = encr_data_to_write + encr_data_ret
# Update values for encrypting next set of data bytes
start_idx = end_idx
encr_data[0:len(encr_data_ret)] = encr_data_ret
else:
encr_data[0:len(encr_data_ret)] = encr_data_ret
-
+
data = encr_data
data_offset = Page.FIRST_ENTRY_OFFSET + (Page.SINGLE_ENTRY_SIZE * self.entry_num)
if not sys.version_info[0] < 3:
if type(data_chunk) == str:
data_chunk = codecs.encode(data_chunk, 'utf8')
-
+
crc = zlib.crc32(data_chunk, 0xFFFFFFFF)
struct.pack_into('<I', entry_struct, 28, crc & 0xFFFFFFFF)
# write key
key_array = bytearray(b'\x00')*16
entry_struct[8:24] = key_array
-
+
if sys.version_info[0] < 3:
entry_struct[8:8 + len(key)] = key
else:
input_file = open(input_filename, 'rb')
else:
input_file = open(input_filename, 'r', newline='')
-
+
output_file = open(output_filename, 'wb')
with nvs_open(output_file, input_size) as nvs_obj:
if is_encrypt_data:
output_keys_file = open("encryption_keys.bin",'wb')
keys_page_buf = bytearray(b'\xff')*Page.PAGE_PARAMS["max_size"]
-
+
if sys.version_info[0] < 3:
key_bytes = key_input.decode('hex')
else:
key_bytes = bytearray()
- key_bytes = codecs.decode(key_input, 'hex')
+ key_bytes = codecs.decode(key_input, 'hex')
+
-
key_len = len(key_bytes)
keys_page_buf[0:key_len] = key_bytes
-
+
crc_data = keys_page_buf[0:key_len]
-
+
if sys.version_info[0] < 3:
crc = zlib.crc32(buffer(crc_data), 0xFFFFFFFF)
else:
crc = zlib.crc32(memoryview(crc_data), 0xFFFFFFFF)
-
+
struct.pack_into('<I', keys_page_buf, key_len, crc & 0xFFFFFFFF)
output_keys_file.write(keys_page_buf)
+------------------------+----------------------------------------------------------------------------------------------+
| Arguments | Description |
+========================+==============================================================================================+
-| --size PART_SIZE | the size of NVS Partition in KB. Eg. 12KB |
+| --size PART_SIZE | Size of NVS Partition in hex (must be multiple of 4096). Eg. 0x1000 |
+------------------------+----------------------------------------------------------------------------------------------+
| --conf CONFIG_FILE | the input configuration csv file |
+------------------------+----------------------------------------------------------------------------------------------+
**You can use the below command to run this utility with the sample files provided**::
- $ ./mfg_gen.py --size 12KB --conf samples/sample_config.csv --values samples/sample_values.csv --prefix Fan
+ $ ./mfg_gen.py --size 0x3000 --conf samples/sample_config.csv --values samples/sample_values.csv --prefix Fan
.. note:: The default numeric value: 1,2,3... of ``fileid`` argument, corresponds to each row having device instance values in master csv values file.
import argparse
import shutil
import distutils.dir_util
-from itertools import zip_longest
sys.path.insert(0, os.getenv('IDF_PATH') + "/components/nvs_flash/nvs_partition_generator/")
import nvs_partition_gen
+if not sys.version_info[0] < 3:
+ from itertools import zip_longest
def verify_values_exist(input_values_file, keys_in_values_file):
""" Verify all keys have corresponding values in values file
parser.add_argument("--size",
dest='part_size',
required=True,
- help='Size of NVS Partition in KB. Eg. 12KB')
+ help='Size of NVS Partition in hex (must be multiple of 4096). Eg. 0x1000')
parser.add_argument('--conf',
dest='config_file',