diff --git a/core/SConscript.firmware b/core/SConscript.firmware index 36e68e63fe..2a8dc5849c 100644 --- a/core/SConscript.firmware +++ b/core/SConscript.firmware @@ -460,12 +460,15 @@ SOURCE_FIRMWARE = [ ] -if TREZOR_MODEL in ('T', 'T3T1', 'DISC1', 'DISC2'): +if TREZOR_MODEL in ('T', 'DISC1', 'DISC2'): UI_LAYOUT = 'UI_LAYOUT_TT' ui_layout_feature = 'model_tt' elif TREZOR_MODEL in ('1', 'R'): UI_LAYOUT = 'UI_LAYOUT_TR' ui_layout_feature = 'model_tr' +elif TREZOR_MODEL in ('T3T1',): + UI_LAYOUT = 'UI_LAYOUT_MERCURY' + ui_layout_feature = 'model_mercury' else: raise ValueError('Unknown Trezor model') @@ -640,6 +643,12 @@ if FROZEN: SOURCE_PY_DIR + 'trezor/ui/layouts/tr/fido.py', ] if not EVERYTHING else [] )) + elif UI_LAYOUT == 'UI_LAYOUT_MERCURY': + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/ui/layouts/mercury/*.py', + exclude=[ + SOURCE_PY_DIR + 'trezor/ui/layouts/mercury/fido.py', + ] if not EVERYTHING else [] + )) else: raise ValueError('Unknown layout') diff --git a/core/SConscript.unix b/core/SConscript.unix index 55161b281a..4013453aa1 100644 --- a/core/SConscript.unix +++ b/core/SConscript.unix @@ -471,12 +471,15 @@ env = Environment(ENV=os.environ, CFLAGS='%s -DCONFIDENTIAL= -DPYOPT=%s -DBITCOI FEATURES_AVAILABLE = models.configure_board(TREZOR_MODEL, HW_REVISION, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_UNIX, PATH_HAL) -if TREZOR_MODEL in ('T', 'T3T1'): +if TREZOR_MODEL in ('T',): UI_LAYOUT = 'UI_LAYOUT_TT' ui_layout_feature = 'model_tt' elif TREZOR_MODEL in ('1', 'R'): UI_LAYOUT = 'UI_LAYOUT_TR' ui_layout_feature = 'model_tr' +elif TREZOR_MODEL in ('T3T1',): + UI_LAYOUT = 'UI_LAYOUT_MERCURY' + ui_layout_feature = 'model_mercury' else: raise ValueError('Unknown Trezor model') @@ -682,6 +685,12 @@ if FROZEN: SOURCE_PY_DIR + 'trezor/ui/layouts/tr/fido.py', ] if not EVERYTHING else [] )) + elif UI_LAYOUT == 'UI_LAYOUT_MERCURY': + SOURCE_PY.extend(Glob(SOURCE_PY_DIR + 'trezor/ui/layouts/mercury/*.py', + exclude=[ + SOURCE_PY_DIR + 'trezor/ui/layouts/mercury/fido.py', + ] if not EVERYTHING else [] + )) else: raise ValueError('Unknown layout') diff --git a/core/embed/extmod/modtrezorutils/modtrezorutils.c b/core/embed/extmod/modtrezorutils/modtrezorutils.c index 5549995376..5652c951c9 100644 --- a/core/embed/extmod/modtrezorutils/modtrezorutils.c +++ b/core/embed/extmod/modtrezorutils/modtrezorutils.c @@ -508,6 +508,8 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_UI_LAYOUT), MP_ROM_QSTR(MP_QSTR_TT)}, #elif UI_LAYOUT_TR {MP_ROM_QSTR(MP_QSTR_UI_LAYOUT), MP_ROM_QSTR(MP_QSTR_TR)}, +#elif UI_LAYOUT_MERCURY + {MP_ROM_QSTR(MP_QSTR_UI_LAYOUT), MP_ROM_QSTR(MP_QSTR_MERCURY)}, #else #error Unknown layout #endif diff --git a/core/embed/rust/src/ui/constant.rs b/core/embed/rust/src/ui/constant.rs index 3237db67aa..c47ea35064 100644 --- a/core/embed/rust/src/ui/constant.rs +++ b/core/embed/rust/src/ui/constant.rs @@ -9,5 +9,5 @@ pub use super::model_mercury::constant::*; #[cfg(all(feature = "model_tr", not(feature = "model_tt")))] pub use super::model_tr::constant::*; -#[cfg(feature = "model_tt")] +#[cfg(all(feature = "model_tt", not(feature = "model_mercury")))] pub use super::model_tt::constant::*; diff --git a/core/embed/rust/src/ui/display/loader/mod.rs b/core/embed/rust/src/ui/display/loader/mod.rs index 5d41532c04..691770a4a3 100644 --- a/core/embed/rust/src/ui/display/loader/mod.rs +++ b/core/embed/rust/src/ui/display/loader/mod.rs @@ -7,7 +7,7 @@ mod starry; use crate::ui::display::{Color, Icon}; -#[cfg(feature = "model_tt")] +#[cfg(any(feature = "model_tt", feature = "model_mercury"))] use crate::ui::display::loader::circular::{ loader_circular as determinate, loader_circular_indeterminate as indeterminate, }; diff --git a/core/site_scons/site_tools/micropython/__init__.py b/core/site_scons/site_tools/micropython/__init__.py index 2c074287f5..22e9feac91 100644 --- a/core/site_scons/site_tools/micropython/__init__.py +++ b/core/site_scons/site_tools/micropython/__init__.py @@ -46,6 +46,7 @@ def generate(env): optiga = env["optiga"] layout_tt = env["ui_layout"] == "UI_LAYOUT_TT" layout_tr = env["ui_layout"] == "UI_LAYOUT_TR" + layout_mercury = env["ui_layout"] == "UI_LAYOUT_MERCURY" thp = env["thp"] interim = f"{target[:-4]}.i" # replace .mpy with .i sed_scripts = [ @@ -54,6 +55,7 @@ def generate(env): rf"-e 's/utils\.USE_OPTIGA/{optiga}/g'", rf"-e 's/utils\.UI_LAYOUT == \"TT\"/{layout_tt}/g'", rf"-e 's/utils\.UI_LAYOUT == \"TR\"/{layout_tr}/g'", + rf"-e 's/utils\.UI_LAYOUT == \"MERCURY\"/{layout_mercury}/g'", rf"-e 's/utils\.USE_THP/{thp}/g'", r"-e 's/if TYPE_CHECKING/if False/'", r"-e 's/import typing/# \0/'", diff --git a/core/src/all_modules.py b/core/src/all_modules.py index 2f51c20a0d..8a10b98bfc 100644 --- a/core/src/all_modules.py +++ b/core/src/all_modules.py @@ -157,6 +157,18 @@ trezor.ui.layouts.fido import trezor.ui.layouts.fido trezor.ui.layouts.homescreen import trezor.ui.layouts.homescreen +trezor.ui.layouts.mercury +import trezor.ui.layouts.mercury +trezor.ui.layouts.mercury.fido +import trezor.ui.layouts.mercury.fido +trezor.ui.layouts.mercury.homescreen +import trezor.ui.layouts.mercury.homescreen +trezor.ui.layouts.mercury.progress +import trezor.ui.layouts.mercury.progress +trezor.ui.layouts.mercury.recovery +import trezor.ui.layouts.mercury.recovery +trezor.ui.layouts.mercury.reset +import trezor.ui.layouts.mercury.reset trezor.ui.layouts.progress import trezor.ui.layouts.progress trezor.ui.layouts.recovery diff --git a/core/src/trezor/ui/layouts/__init__.py b/core/src/trezor/ui/layouts/__init__.py index a29e2e2cfd..b477332f45 100644 --- a/core/src/trezor/ui/layouts/__init__.py +++ b/core/src/trezor/ui/layouts/__init__.py @@ -8,5 +8,7 @@ if utils.UI_LAYOUT == "TR": from .tr import * # noqa: F401,F403 elif utils.UI_LAYOUT == "TT": from .tt import * # noqa: F401,F403 +elif utils.UI_LAYOUT == "MERCURY": + from .mercury import * # noqa: F401,F403 else: raise ValueError("Unknown layout") diff --git a/core/src/trezor/ui/layouts/fido.py b/core/src/trezor/ui/layouts/fido.py index 6b3cb944e3..e7447b1a62 100644 --- a/core/src/trezor/ui/layouts/fido.py +++ b/core/src/trezor/ui/layouts/fido.py @@ -4,3 +4,5 @@ if utils.UI_LAYOUT == "TT": from .tt.fido import * # noqa: F401,F403 elif utils.UI_LAYOUT == "TR": from .tr.fido import * # noqa: F401,F403 +elif utils.UI_LAYOUT == "MERCURY": + from .mercury.fido import * # noqa: F401,F403 diff --git a/core/src/trezor/ui/layouts/homescreen.py b/core/src/trezor/ui/layouts/homescreen.py index fe31124a26..ef13c57a4d 100644 --- a/core/src/trezor/ui/layouts/homescreen.py +++ b/core/src/trezor/ui/layouts/homescreen.py @@ -4,3 +4,5 @@ if utils.UI_LAYOUT == "TT": from .tt.homescreen import * # noqa: F401,F403 elif utils.UI_LAYOUT == "TR": from .tr.homescreen import * # noqa: F401,F403 +elif utils.UI_LAYOUT == "MERCURY": + from .mercury.homescreen import * # noqa: F401,F403 diff --git a/core/src/trezor/ui/layouts/recovery.py b/core/src/trezor/ui/layouts/recovery.py index f41f1ae8b2..12a0b33540 100644 --- a/core/src/trezor/ui/layouts/recovery.py +++ b/core/src/trezor/ui/layouts/recovery.py @@ -4,3 +4,5 @@ if utils.UI_LAYOUT == "TT": from .tt.recovery import * # noqa: F401,F403 elif utils.UI_LAYOUT == "TR": from .tr.recovery import * # noqa: F401,F403 +elif utils.UI_LAYOUT == "MERCURY": + from .mercury.recovery import * # noqa: F401,F403 diff --git a/core/src/trezor/ui/layouts/reset.py b/core/src/trezor/ui/layouts/reset.py index d0cf6b1c9f..d180953509 100644 --- a/core/src/trezor/ui/layouts/reset.py +++ b/core/src/trezor/ui/layouts/reset.py @@ -4,3 +4,5 @@ if utils.UI_LAYOUT == "TT": from .tt.reset import * # noqa: F401,F403 elif utils.UI_LAYOUT == "TR": from .tr.reset import * # noqa: F401,F403 +elif utils.UI_LAYOUT == "MERCURY": + from .mercury.reset import * # noqa: F401,F403