USB descriptors: Save flash storage for serial number

This saves about 60 bytes (Feather M4 went from 45040 -> 45100 bytes free)
66 bytes of data eliminated, but 6 bytes paid back to initialize the length
field.
This commit is contained in:
Jeff Epler 2021-02-21 21:24:49 -06:00
parent 2830984aef
commit 144acfcb98
2 changed files with 23 additions and 20 deletions

View File

@ -62,6 +62,7 @@ void load_serial_number(void) {
uint8_t raw_id[COMMON_HAL_MCU_PROCESSOR_UID_LENGTH];
common_hal_mcu_processor_get_uid(raw_id);
usb_serial_number[0] = 0x300 | MP_ARRAY_SIZE(usb_serial_number);
for (int i = 0; i < COMMON_HAL_MCU_PROCESSOR_UID_LENGTH; i++) {
for (int j = 0; j < 2; j++) {
uint8_t nibble = (raw_id[i] >> (j * 4)) & 0xf;

View File

@ -778,30 +778,32 @@ for idx, descriptor in enumerate(string_descriptors):
variable_name = StringIndex.index_to_variable[idx]
if not variable_name:
variable_name = "string_descriptor{}".format(idx)
pointers_to_strings.append("{name}".format(name=variable_name))
const = "const "
if variable_name == "usb_serial_number":
const = ""
c_file.write(
"""\
{const}uint16_t {NAME}[] = {{
""".format(
const=const, NAME=variable_name
length = len(b)
c_file.write(" uint16_t {NAME}[{length}];\n".format(NAME=variable_name, length=length//2))
else:
c_file.write(
"""\
const uint16_t {NAME}[] = {{
""".format(
const=const, NAME=variable_name
)
)
)
pointers_to_strings.append("{name}".format(name=variable_name))
n = 0
while i < len(b):
length = b[i]
for j in range(length // 2):
c_file.write("0x{:04x}, ".format(b[i + 2 * j + 1] << 8 | b[i + 2 * j]))
n += 1
c_file.write("\n")
i += length
c_file.write(
"""\
};
"""
n = 0
while i < len(b):
length = b[i]
for j in range(length // 2):
c_file.write("0x{:04x}, ".format(b[i + 2 * j + 1] << 8 | b[i + 2 * j]))
n += 1
c_file.write("\n")
i += length
c_file.write(
"""\
};
"""
)
c_file.write(