From 5ee85b6ed9c58ae0e9fb1ce00b858b57cc34ec5c Mon Sep 17 00:00:00 2001 From: matejcik Date: Mon, 12 Apr 2021 14:35:02 +0200 Subject: [PATCH] refactor(core): improve clarity in main.py --- core/src/main.py | 36 ++++++++++++++++++++++++++++-------- core/src/session.py | 1 - 2 files changed, 28 insertions(+), 9 deletions(-) diff --git a/core/src/main.py b/core/src/main.py index 26443e707..f0c9a54b0 100644 --- a/core/src/main.py +++ b/core/src/main.py @@ -1,25 +1,42 @@ # isort:skip_file # fmt: off -# Import always-active modules -import storage -import storage.device -if __debug__: - import storage.debug +# We are tightly controlling the memory layout. Order of imports is important. +# Modules imported directly from here also must take care to have as few dependencies +# as possible. +# === Import always-active modules +# trezor imports only C modules import trezor -import trezor.pin # noqa: F401 +# trezor.utils import only C modules from trezor import utils - +# we need space for 30 items in the trezor module utils.presize_module("trezor", 30) + +# storage imports storage.common, storage.cache and storage.device. +# These import trezor, trezor.config (which is a C module), trezor.utils, and each other. +import storage +# we will need space for 12 items in the storage module utils.presize_module("storage", 12) if not utils.BITCOIN_ONLY: + # storage.fido2 only imports C modules import storage.fido2 # noqa: F401 -# Prepare the USB interfaces first. Do not connect to the host yet. +if __debug__: + # storage.debug only imports C modules + import storage.debug + +# trezor.pin imports trezor.utils +# We need it as an always-active module because trezor.pin.show_pin_timeout is used +# as a UI callback for storage, which can be invoked at any time +import trezor.pin # noqa: F401 + +# === Prepare the USB interfaces first. Do not connect to the host yet. +# usb imports trezor.utils and trezor.io which is a C module import usb +# create an unimport manager that will be reused in the main loop unimport_manager = utils.unimport() # unlock the device, unload the boot module afterwards @@ -28,8 +45,11 @@ with unimport_manager: del boot # start the USB +import storage.device + usb.bus.open(storage.device.get_device_id()) +# run the endless loop while True: with unimport_manager: import session # noqa: F401 diff --git a/core/src/session.py b/core/src/session.py index 1fbf120c3..b51b8c36a 100644 --- a/core/src/session.py +++ b/core/src/session.py @@ -1,6 +1,5 @@ from trezor import loop, utils, wire, workflow -# load applications import apps.base import usb