Merge branch 'feature/nvs_part_gen_improvements' into 'master'
Feature/nvs part gen improvements See merge request idf/esp-idf!2555
This commit is contained in:
commit
6ee3cf67bd
6 changed files with 44 additions and 21 deletions
|
@ -19,9 +19,9 @@ Type
|
||||||
Supported values are ``file``, ``data`` and ``namespace``.
|
Supported values are ``file``, ``data`` and ``namespace``.
|
||||||
|
|
||||||
Encoding
|
Encoding
|
||||||
Supported values are: ``u8``, ``i8``, ``u16``, ``u32``, ``i32``, ``string``, ``hex2bin`` and ``binary``. This specifies how actual data values are encoded in the resultant binary file. Difference between ``string`` and ``binary`` encoding is that ``string`` data is terminated with a NULL character, whereas ``binary`` data is not.
|
Supported values are: ``u8``, ``i8``, ``u16``, ``u32``, ``i32``, ``string``, ``hex2bin``, ``base64`` and ``binary``. This specifies how actual data values are encoded in the resultant binary file. Difference between ``string`` and ``binary`` encoding is that ``string`` data is terminated with a NULL character, whereas ``binary`` data is not.
|
||||||
|
|
||||||
.. note:: For ``file`` type, only ``hex2bin``, ``string`` and ``binary`` is supported as of now.
|
.. note:: For ``file`` type, only ``hex2bin``, ``base64``, ``string`` and ``binary`` is supported as of now.
|
||||||
|
|
||||||
Value
|
Value
|
||||||
Data value.
|
Data value.
|
||||||
|
|
54
components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py
Normal file → Executable file
54
components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py
Normal file → Executable file
|
@ -132,7 +132,7 @@ class Page(object):
|
||||||
# set Type
|
# set Type
|
||||||
if encoding == "string":
|
if encoding == "string":
|
||||||
entry_struct[1] = Page.SZ
|
entry_struct[1] = Page.SZ
|
||||||
elif encoding == "hex2bin" or encoding == "binary":
|
elif encoding in ["hex2bin", "binary", "base64"]:
|
||||||
entry_struct[1] = Page.BLOB
|
entry_struct[1] = Page.BLOB
|
||||||
|
|
||||||
# compute CRC of data
|
# compute CRC of data
|
||||||
|
@ -248,11 +248,14 @@ class NVS(object):
|
||||||
raise InputError("%s: Invalid data length. Should be multiple of 2." % key)
|
raise InputError("%s: Invalid data length. Should be multiple of 2." % key)
|
||||||
value = binascii.a2b_hex(value)
|
value = binascii.a2b_hex(value)
|
||||||
|
|
||||||
|
if encoding == "base64":
|
||||||
|
value = binascii.a2b_base64(value)
|
||||||
|
|
||||||
if encoding == "string":
|
if encoding == "string":
|
||||||
value += '\0'
|
value += '\0'
|
||||||
|
|
||||||
encoding = encoding.lower()
|
encoding = encoding.lower()
|
||||||
varlen_encodings = ["string", "binary", "hex2bin"]
|
varlen_encodings = ["string", "binary", "hex2bin", "base64"]
|
||||||
primitive_encodings = ["u8", "i8", "u16", "u32", "i32"]
|
primitive_encodings = ["u8", "i8", "u16", "u32", "i32"]
|
||||||
if encoding in varlen_encodings:
|
if encoding in varlen_encodings:
|
||||||
try:
|
try:
|
||||||
|
@ -308,7 +311,7 @@ def write_entry(nvs_instance, key, datatype, encoding, value):
|
||||||
:param nvs_instance: Instance of an NVS class returned by nvs_open()
|
:param nvs_instance: Instance of an NVS class returned by nvs_open()
|
||||||
:param key: Key of the data
|
:param key: Key of the data
|
||||||
:param datatype: Data type. Valid values are "file", "data" and "namespace"
|
:param datatype: Data type. Valid values are "file", "data" and "namespace"
|
||||||
:param encoding: Data encoding. Valid values are "u8", "i8", "u16", "u32", "i32", "string", "binary" and "hex2bin"
|
:param encoding: Data encoding. Valid values are "u8", "i8", "u16", "u32", "i32", "string", "binary", "hex2bin" and "base64"
|
||||||
:param value: Data value in ascii encoded string format for "data" datatype and filepath for "file" datatype
|
:param value: Data value in ascii encoded string format for "data" datatype and filepath for "file" datatype
|
||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
@ -333,29 +336,42 @@ def nvs_close(nvs_instance):
|
||||||
"""
|
"""
|
||||||
nvs_instance.__exit__(None, None, None)
|
nvs_instance.__exit__(None, None, None)
|
||||||
|
|
||||||
def main():
|
def nvs_part_gen(input_filename=None, output_filename=None):
|
||||||
parser = argparse.ArgumentParser(description="ESP32 NVS partition generation utility")
|
input_file = open(input_filename, 'rb')
|
||||||
parser.add_argument(
|
output_file = open(output_filename, 'wb')
|
||||||
"input",
|
|
||||||
help="Path to CSV file to parse. Will use stdin if omitted",
|
|
||||||
type=argparse.FileType('rb'),
|
|
||||||
default=sys.stdin)
|
|
||||||
|
|
||||||
parser.add_argument(
|
with nvs_open(output_file) as nvs_obj:
|
||||||
"output",
|
reader = csv.DictReader(input_file, delimiter=',')
|
||||||
help='Path to output converted binary file. Will use stdout if omitted',
|
|
||||||
type=argparse.FileType('wb'),
|
|
||||||
default=sys.stdout)
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
with nvs_open(args.output) as nvs_obj:
|
|
||||||
reader = csv.DictReader(args.input, delimiter=',')
|
|
||||||
for row in reader:
|
for row in reader:
|
||||||
try:
|
try:
|
||||||
write_entry(nvs_obj, row["key"], row["type"], row["encoding"], row["value"])
|
write_entry(nvs_obj, row["key"], row["type"], row["encoding"], row["value"])
|
||||||
except InputError as e:
|
except InputError as e:
|
||||||
print(e)
|
print(e)
|
||||||
|
input_file.close()
|
||||||
|
output_file.close()
|
||||||
exit(-2)
|
exit(-2)
|
||||||
|
|
||||||
|
input_file.close()
|
||||||
|
output_file.close()
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description="ESP32 NVS partition generation utility")
|
||||||
|
parser.add_argument(
|
||||||
|
"input",
|
||||||
|
help="Path to CSV file to parse. Will use stdin if omitted",
|
||||||
|
default=sys.stdin)
|
||||||
|
|
||||||
|
parser.add_argument(
|
||||||
|
"output",
|
||||||
|
help='Path to output converted binary file. Will use stdout if omitted',
|
||||||
|
default=sys.stdout)
|
||||||
|
|
||||||
|
args = parser.parse_args()
|
||||||
|
input_filename = args.input
|
||||||
|
output_filename = args.output
|
||||||
|
nvs_part_gen(input_filename, output_filename)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
|
@ -7,6 +7,8 @@ dummyU32Key,data,u32,4294967295
|
||||||
dummyI32Key,data,i32,-2147483648
|
dummyI32Key,data,i32,-2147483648
|
||||||
dummyStringKey,data,string,0A:0B:0C:0D:0E:0F
|
dummyStringKey,data,string,0A:0B:0C:0D:0E:0F
|
||||||
dummyHex2BinKey,data,hex2bin,010203abcdef
|
dummyHex2BinKey,data,hex2bin,010203abcdef
|
||||||
|
dummyBase64Key,data,base64,MTIzYWJj
|
||||||
hexFileKey,file,hex2bin,testdata/sample.hex
|
hexFileKey,file,hex2bin,testdata/sample.hex
|
||||||
|
base64FileKey,file,base64,testdata/sample.base64
|
||||||
stringFileKey,file,string,testdata/sample.txt
|
stringFileKey,file,string,testdata/sample.txt
|
||||||
binFileKey,file,binary,testdata/sample.bin
|
binFileKey,file,binary,testdata/sample.bin
|
||||||
|
|
|
1
components/nvs_flash/nvs_partition_generator/testdata/sample.base64
vendored
Normal file
1
components/nvs_flash/nvs_partition_generator/testdata/sample.base64
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
AQIDBAUGBwgJq83v
|
|
@ -1548,6 +1548,9 @@ TEST_CASE("read data from partition generated via partition generation utility",
|
||||||
uint8_t hexdata[] = {0x01, 0x02, 0x03, 0xab, 0xcd, 0xef};
|
uint8_t hexdata[] = {0x01, 0x02, 0x03, 0xab, 0xcd, 0xef};
|
||||||
TEST_ESP_OK( nvs_get_blob(handle, "dummyHex2BinKey", buf, &buflen));
|
TEST_ESP_OK( nvs_get_blob(handle, "dummyHex2BinKey", buf, &buflen));
|
||||||
CHECK(memcmp(buf, hexdata, buflen) == 0);
|
CHECK(memcmp(buf, hexdata, buflen) == 0);
|
||||||
|
uint8_t base64data[] = {'1', '2', '3', 'a', 'b', 'c'};
|
||||||
|
TEST_ESP_OK( nvs_get_blob(handle, "dummyBase64Key", buf, &buflen));
|
||||||
|
CHECK(memcmp(buf, base64data, buflen) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("dump all performance data", "[nvs]")
|
TEST_CASE("dump all performance data", "[nvs]")
|
||||||
|
|
|
@ -7,6 +7,7 @@ components/partition_table/gen_esp32part.py
|
||||||
components/partition_table/parttool.py
|
components/partition_table/parttool.py
|
||||||
components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py
|
components/partition_table/test_gen_esp32part_host/gen_esp32part_tests.py
|
||||||
components/ulp/esp32ulp_mapgen.py
|
components/ulp/esp32ulp_mapgen.py
|
||||||
|
components/nvs_flash/nvs_partition_generator/nvs_partition_gen.py
|
||||||
docs/check_doc_warnings.sh
|
docs/check_doc_warnings.sh
|
||||||
docs/check_lang_folder_sync.sh
|
docs/check_lang_folder_sync.sh
|
||||||
docs/gen-kconfig-doc.py
|
docs/gen-kconfig-doc.py
|
||||||
|
|
Loading…
Reference in a new issue