diff --git a/gp2040ce_bintools/builder.py b/gp2040ce_bintools/builder.py index 5599fed..ada49b6 100644 --- a/gp2040ce_bintools/builder.py +++ b/gp2040ce_bintools/builder.py @@ -12,7 +12,7 @@ from google.protobuf.message import Message from gp2040ce_bintools import core_parser from gp2040ce_bintools.rp2040 import get_bootsel_endpoints, read, write -from gp2040ce_bintools.storage import (STORAGE_BINARY_LOCATION, STORAGE_BOOTSEL_ADDRESS, STORAGE_SIZE, +from gp2040ce_bintools.storage import (STORAGE_SIZE, USER_CONFIG_BINARY_LOCATION, USER_CONFIG_BOOTSEL_ADDRESS, get_config_from_json, pad_config_to_storage_size, serialize_config_with_footer) logger = logging.getLogger(__name__) @@ -106,13 +106,13 @@ def pad_binary_up_to_user_config(firmware: bytes, or_truncate: bool = False) -> Raises: FirmwareLengthError: if the firmware is larger than the storage location """ - bytes_to_pad = STORAGE_BINARY_LOCATION - len(firmware) + bytes_to_pad = USER_CONFIG_BINARY_LOCATION - len(firmware) logger.debug("firmware is length %s, padding %s bytes", len(firmware), bytes_to_pad) if bytes_to_pad < 0: if or_truncate: - return bytearray(firmware[0:STORAGE_BINARY_LOCATION]) + return bytearray(firmware[0:USER_CONFIG_BINARY_LOCATION]) raise FirmwareLengthError(f"provided firmware binary is larger than the start of " - f"storage at {STORAGE_BINARY_LOCATION}!") + f"storage at {USER_CONFIG_BINARY_LOCATION}!") return bytearray(firmware) + bytearray(b'\x00' * bytes_to_pad) @@ -130,13 +130,13 @@ def replace_config_in_binary(board_binary: bytearray, config_binary: bytearray) Returns: the resulting correctly-offset binary suitable for a GP2040-CE board """ - if len(board_binary) < STORAGE_BINARY_LOCATION + STORAGE_SIZE: + if len(board_binary) < USER_CONFIG_BINARY_LOCATION + STORAGE_SIZE: # this is functionally the same, since this doesn't sanity check the firmware return combine_firmware_and_config(board_binary, config_binary) else: new_binary = bytearray(copy.copy(board_binary)) new_config = pad_config_to_storage_size(config_binary) - new_binary[STORAGE_BINARY_LOCATION:(STORAGE_BINARY_LOCATION + STORAGE_SIZE)] = new_config + new_binary[USER_CONFIG_BINARY_LOCATION:(USER_CONFIG_BINARY_LOCATION + STORAGE_SIZE)] = new_config return new_binary @@ -183,7 +183,7 @@ def write_new_config_to_usb(config: Message, endpoint_out: object, endpoint_in: logger.debug("length: %s with %s bytes of padding", len(serialized), padding) binary = bytearray(b'\x00' * padding) + serialized logger.debug("binary for writing: %s", binary) - write(endpoint_out, endpoint_in, STORAGE_BOOTSEL_ADDRESS + (STORAGE_SIZE - len(binary)), bytes(binary)) + write(endpoint_out, endpoint_in, USER_CONFIG_BOOTSEL_ADDRESS + (STORAGE_SIZE - len(binary)), bytes(binary)) ############ diff --git a/gp2040ce_bintools/gui.py b/gp2040ce_bintools/gui.py index 8e4368e..a78dee3 100644 --- a/gp2040ce_bintools/gui.py +++ b/gp2040ce_bintools/gui.py @@ -22,7 +22,7 @@ from textual.widgets.tree import TreeNode from gp2040ce_bintools import core_parser, handler from gp2040ce_bintools.builder import write_new_config_to_filename, write_new_config_to_usb from gp2040ce_bintools.rp2040 import get_bootsel_endpoints, read -from gp2040ce_bintools.storage import (STORAGE_BOOTSEL_ADDRESS, STORAGE_SIZE, ConfigReadError, get_config, +from gp2040ce_bintools.storage import (STORAGE_SIZE, USER_CONFIG_BOOTSEL_ADDRESS, ConfigReadError, get_config, get_config_from_file, get_new_config) logger = logging.getLogger(__name__) @@ -324,7 +324,7 @@ class ConfigEditor(App): if self.usb: try: self.endpoint_out, self.endpoint_in = get_bootsel_endpoints() - config_binary = read(self.endpoint_out, self.endpoint_in, STORAGE_BOOTSEL_ADDRESS, STORAGE_SIZE) + config_binary = read(self.endpoint_out, self.endpoint_in, USER_CONFIG_BOOTSEL_ADDRESS, STORAGE_SIZE) self.config = get_config(bytes(config_binary)) except ConfigReadError: if self.create_new: diff --git a/gp2040ce_bintools/storage.py b/gp2040ce_bintools/storage.py index b345516..2b2af4c 100644 --- a/gp2040ce_bintools/storage.py +++ b/gp2040ce_bintools/storage.py @@ -16,8 +16,8 @@ from gp2040ce_bintools.rp2040 import get_bootsel_endpoints, read logger = logging.getLogger(__name__) -STORAGE_BINARY_LOCATION = 0x1FC000 -STORAGE_BOOTSEL_ADDRESS = 0x10000000 + STORAGE_BINARY_LOCATION +USER_CONFIG_BINARY_LOCATION = 0x1FC000 +USER_CONFIG_BOOTSEL_ADDRESS = 0x10000000 + USER_CONFIG_BINARY_LOCATION STORAGE_SIZE = 16384 FOOTER_SIZE = 12 @@ -158,7 +158,7 @@ def get_config_from_usb() -> tuple[Message, object, object]: endpoint_out, endpoint_in = get_bootsel_endpoints() logger.debug("reading DEVICE ID %s:%s, bus %s, address %s", hex(endpoint_out.device.idVendor), hex(endpoint_out.device.idProduct), endpoint_out.device.bus, endpoint_out.device.address) - storage = read(endpoint_out, endpoint_in, STORAGE_BOOTSEL_ADDRESS, STORAGE_SIZE) + storage = read(endpoint_out, endpoint_in, USER_CONFIG_BOOTSEL_ADDRESS, STORAGE_SIZE) return get_config(bytes(storage)), endpoint_out, endpoint_in @@ -174,12 +174,12 @@ def get_storage_section(content: bytes) -> bytes: """ # a whole board must be at least as big as the known fences logger.debug("length of content to look for storage in: %s", len(content)) - if len(content) < STORAGE_BINARY_LOCATION + STORAGE_SIZE: + if len(content) < USER_CONFIG_BINARY_LOCATION + STORAGE_SIZE: raise ConfigLengthError("provided content is not large enough to have a storage section!") - logger.debug("returning bytes from %s to %s", hex(STORAGE_BINARY_LOCATION), - hex(STORAGE_BINARY_LOCATION + STORAGE_SIZE)) - return content[STORAGE_BINARY_LOCATION:(STORAGE_BINARY_LOCATION + STORAGE_SIZE)] + logger.debug("returning bytes from %s to %s", hex(USER_CONFIG_BINARY_LOCATION), + hex(USER_CONFIG_BINARY_LOCATION + STORAGE_SIZE)) + return content[USER_CONFIG_BINARY_LOCATION:(USER_CONFIG_BINARY_LOCATION + STORAGE_SIZE)] def get_new_config() -> Message: