From 40859d9d57a204aeba7c788927d1e0a3712595ab Mon Sep 17 00:00:00 2001 From: tychovrahe Date: Sun, 14 Apr 2024 21:16:50 +0200 Subject: [PATCH] refactor(core): introduce emulator boards [no changelog] --- core/SConscript.bootloader_emu | 66 ++-------------- core/SConscript.unix | 96 +++++------------------- core/embed/trezorhal/boards/board-unix.h | 33 -------- core/embed/trezorhal/boards/t1b1-unix.h | 24 ++++++ core/embed/trezorhal/boards/t2b1-unix.h | 26 +++++++ core/embed/trezorhal/boards/t2t1-unix.h | 41 ++++++++++ core/embed/trezorhal/boards/t3t1-unix.h | 29 +++++++ core/embed/trezorhal/unix/display-unix.c | 78 ++++--------------- core/embed/trezorhal/unix/display-unix.h | 33 -------- core/site_scons/models/T1B1/__init__.py | 6 +- core/site_scons/models/T1B1/emulator.py | 33 ++++++++ core/site_scons/models/T2B1/__init__.py | 5 +- core/site_scons/models/T2B1/emulator.py | 42 +++++++++++ core/site_scons/models/T2T1/__init__.py | 6 +- core/site_scons/models/T2T1/emulator.py | 51 +++++++++++++ core/site_scons/models/T3T1/__init__.py | 5 +- core/site_scons/models/T3T1/emulator.py | 58 ++++++++++++++ 17 files changed, 361 insertions(+), 271 deletions(-) delete mode 100644 core/embed/trezorhal/boards/board-unix.h create mode 100644 core/embed/trezorhal/boards/t1b1-unix.h create mode 100644 core/embed/trezorhal/boards/t2b1-unix.h create mode 100644 core/embed/trezorhal/boards/t2t1-unix.h create mode 100644 core/embed/trezorhal/boards/t3t1-unix.h create mode 100644 core/site_scons/models/T1B1/emulator.py create mode 100644 core/site_scons/models/T2B1/emulator.py create mode 100644 core/site_scons/models/T2T1/emulator.py create mode 100644 core/site_scons/models/T3T1/emulator.py diff --git a/core/SConscript.bootloader_emu b/core/SConscript.bootloader_emu index 5eb0d581b..4de5b58bb 100644 --- a/core/SConscript.bootloader_emu +++ b/core/SConscript.bootloader_emu @@ -6,7 +6,6 @@ import tools, models TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) HW_REVISION = 'emulator' -DMA2D = False if TREZOR_MODEL in ('1', 'DISC1'): # skip bootloader build @@ -20,10 +19,12 @@ if TREZOR_MODEL in ('1', 'DISC1'): ) Return() -FEATURES_WANTED = ["input", "rgb_led", "dma2d"] +FEATURES_WANTED = ["input", "rgb_led", "dma2d", "optiga_hal"] CCFLAGS_MOD = '' CPPPATH_MOD = [] +CPPDEFINES_HAL = [] +PATH_HAL = [] CPPDEFINES_MOD = [] SOURCE_MOD = [] @@ -88,7 +89,6 @@ SOURCE_MOD += [ 'embed/lib/colors.c', 'embed/lib/display_utils.c', 'embed/lib/display.c', - 'embed/lib/dma2d_emul.c', 'embed/lib/fonts/font_bitmap.c', 'embed/lib/fonts/fonts.c', 'embed/lib/image.c', @@ -101,24 +101,6 @@ SOURCE_MOD += [ 'vendor/trezor-storage/flash_area.c', ] -if TREZOR_MODEL in ('1', ): - SOURCE_MOD += [ - 'embed/models/model_T1B1_layout.c', - ] -elif TREZOR_MODEL in ('T', ): - SOURCE_MOD += [ - 'embed/models/model_T2T1_layout.c', - ] -elif TREZOR_MODEL in ('R', ): - SOURCE_MOD += [ - 'embed/models/model_T2B1_layout.c', - ] -elif TREZOR_MODEL in ('T3T1',): - SOURCE_MOD += [ - 'embed/models/model_T3T1_layout.c', - ] - - SOURCE_NANOPB = [ 'vendor/nanopb/pb_common.c', 'vendor/nanopb/pb_decode.c', @@ -147,11 +129,6 @@ SOURCE_TREZORHAL = [ 'embed/trezorhal/unix/secret.c', ] -if TREZOR_MODEL in ('R', 'T3T1'): - SOURCE_TREZORHAL += [ - 'embed/trezorhal/unix/optiga_hal.c', - ] - SOURCE_UNIX = [ 'embed/unix/profile.c', ] @@ -167,6 +144,8 @@ tools.add_font('BIG', FONT_BIG, CPPDEFINES_MOD, SOURCE_MOD) env = Environment(ENV=os.environ, CFLAGS='%s -DCONFIDENTIAL= -DPRODUCTION=%s' % (ARGUMENTS.get('CFLAGS', ''), ARGUMENTS.get('PRODUCTION', '0'))) +FEATURES_AVAILABLE = models.configure_board(TREZOR_MODEL, HW_REVISION, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_UNIX, PATH_HAL) + env.Replace( CP='cp', AS='as', @@ -179,22 +158,6 @@ env.Replace( PYTHON='python', MAKECMAKELISTS='$PYTHON tools/make_cmakelists.py', ) -env.Replace( - TREZOR_MODEL=TREZOR_MODEL, ) - -if TREZOR_MODEL in ('T', 'R'): - CPU_MODEL = 'STM32F427xx' -elif TREZOR_MODEL in ('T3T1', ): - CPU_MODEL = 'STM32U585xx' -elif TREZOR_MODEL in ('DISC1', ): - CPU_MODEL = 'STM32F429xx' -elif TREZOR_MODEL in ('DISC2', ): - CPU_MODEL = 'STM32U5A9xx' -elif TREZOR_MODEL in ('1',): - CPU_MODEL = 'STM32F405xx' -else: - raise ValueError('Unknown Trezor model') - MODEL_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL) MODEL_AS_NUMBER = str(models.get_hw_model_as_number(MODEL_IDENTIFIER)) @@ -209,7 +172,7 @@ ALLPATHS = ['embed/rust', 'embed/unix', 'embed/extmod/modtrezorui', 'vendor/nanopb', - ] + CPPPATH_MOD, + ] + CPPPATH_MOD + PATH_HAL, env.Replace( COPT=env.get('ENV').get('OPTIMIZE', '-Os'), @@ -225,18 +188,11 @@ env.Replace( CPPDEFINES=[ 'BOOTLOADER', 'TREZOR_EMULATOR', - CPU_MODEL, - 'HW_MODEL=' + MODEL_AS_NUMBER, - 'HW_REVISION=' + ('10' if TREZOR_MODEL in ('R',) else '0'), 'TREZOR_MODEL_'+TREZOR_MODEL, - 'TREZOR_BOARD=\\"boards/board-unix.h\\"', - ('FLASH_BIT_ACCESS', '1'), - ('FLASH_BLOCK_WORDS', '1'), - 'MCU_TYPE='+CPU_MODEL, 'PB_FIELD_16BIT', 'PB_ENCODE_ARRAYS_UNPACKED', 'PB_VALIDATE_UTF8', - ] + CPPDEFINES_MOD, + ] + CPPDEFINES_MOD + CPPDEFINES_HAL, ASPPFLAGS='$CFLAGS $CCFLAGS', ) try: @@ -281,15 +237,9 @@ def cargo_build(): else: features = ["model_tt"] - if TREZOR_MODEL in ('T', 'T3T1'): - features.append('touch') - features.append('backlight') - features.append('dma2d') - if TREZOR_MODEL in ('R', '1'): - features.append('button') - features.append("ui") features.append("bootloader") + features.extend(FEATURES_AVAILABLE) env.get("ENV")["BINDGEN_MACROS"] = tools.get_bindgen_defines(env.get("ALLDEFS"), ALLPATHS) diff --git a/core/SConscript.unix b/core/SConscript.unix index b6e29c590..1488fee91 100644 --- a/core/SConscript.unix +++ b/core/SConscript.unix @@ -7,11 +7,12 @@ import tools, models BITCOIN_ONLY = ARGUMENTS.get('BITCOIN_ONLY', '0') EVERYTHING = BITCOIN_ONLY != '1' TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') -DMA2D = TREZOR_MODEL in ('T', 'T3T1') -OPTIGA = TREZOR_MODEL in ('R', 'T3T1') CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) HW_REVISION ='emulator' + +FEATURES_WANTED = ["input", "sd_card", "dma2d", "optiga", "sbu"] + if TREZOR_MODEL in ('DISC1', 'DISC2'): # skip unix build env = Environment() @@ -30,6 +31,8 @@ FEATURE_FLAGS = { CCFLAGS_MOD = '' CPPPATH_MOD = [] +CPPDEFINES_HAL = [] +PATH_HAL = [] CPPDEFINES_MOD = [] SOURCE_MOD = [ 'vendor/micropython/extmod/vfs_posix_file.c', @@ -191,11 +194,6 @@ if FEATURE_FLAGS["AES_GCM"]: SOURCE_MOD += [ 'embed/extmod/modtrezorio/modtrezorio.c', ] -if TREZOR_MODEL in ('T', 'T3T1'): - SOURCE_MOD += [ - 'embed/extmod/modtrezorio/ff.c', - 'embed/extmod/modtrezorio/ffunicode.c', - ] # modtrezorui CPPPATH_MOD += [ @@ -218,25 +216,6 @@ SOURCE_MOD += [ 'vendor/micropython/lib/uzlib/tinflate.c', ] -if TREZOR_MODEL in ('1', ): - SOURCE_MOD += [ - 'embed/models/model_T1B1_layout.c', - ] -elif TREZOR_MODEL in ('T', ): - SOURCE_MOD += [ - 'embed/models/model_T2T1_layout.c', - ] -elif TREZOR_MODEL in ('R', ): - SOURCE_MOD += [ - 'embed/models/model_T2B1_layout.c', - ] -elif TREZOR_MODEL in ('T3T1', ): - SOURCE_MOD += [ - 'embed/models/model_T3T1_layout.c', - ] - - - CPPDEFINES_MOD += [ 'TREZOR_UI2', 'TRANSLATIONS', @@ -411,23 +390,6 @@ SOURCE_UNIX = [ 'vendor/micropython/ports/unix/input.c', 'vendor/micropython/ports/unix/unix_mphal.c', ] -if TREZOR_MODEL in ('T', 'R', 'T3T1'): - SOURCE_UNIX += [ - 'embed/trezorhal/unix/sbu.c', - ] - -if OPTIGA: - SOURCE_UNIX += [ - 'embed/trezorhal/unix/optiga.c', - ] - -if DMA2D: - CPPDEFINES_MOD += [ - 'USE_DMA2D', - ] - SOURCE_UNIX += [ - 'embed/lib/dma2d_emul.c', - ] TRANSLATION_DATA = [ @@ -453,6 +415,7 @@ else: env = Environment(ENV=os.environ, CFLAGS='%s -DCONFIDENTIAL= -DPYOPT=%s -DBITCOIN_ONLY=%s %s' % (ARGUMENTS.get('CFLAGS', ''), PYOPT, BITCOIN_ONLY, STATIC)) +FEATURES_AVAILABLE = models.configure_board(TREZOR_MODEL, HW_REVISION, FEATURES_WANTED, env, CPPDEFINES_HAL, SOURCE_UNIX, PATH_HAL) if TREZOR_MODEL in ('T', 'T3T1'): UI_LAYOUT = 'UI_LAYOUT_TT' @@ -463,14 +426,17 @@ elif TREZOR_MODEL in ('1', 'R'): else: raise ValueError('Unknown Trezor model') -if TREZOR_MODEL in ('T', 'T3T1'): + +if 'sd_card' in FEATURES_AVAILABLE: SDCARD = True - SOURCE_UNIX += [ - 'embed/trezorhal/unix/sdcard.c', - ] else: SDCARD = False +if 'optiga' in FEATURES_AVAILABLE: + OPTIGA = True +else: + OPTIGA = False + env.Tool('micropython') @@ -517,21 +483,6 @@ if ARGUMENTS.get('TREZOR_MEMPERF', '0') == '1': ('MICROPY_TREZOR_MEMPERF', '\(1\)') ] -env.Replace( - TREZOR_MODEL=TREZOR_MODEL, ) - -if TREZOR_MODEL in ('T', 'R'): - CPU_MODEL = 'STM32F427xx' -elif TREZOR_MODEL in ('T3T1', ): - CPU_MODEL = 'STM32U585xx' -elif TREZOR_MODEL in ('DISC1', ): - CPU_MODEL = 'STM32F429xx' -elif TREZOR_MODEL in ('DISC2', ): - CPU_MODEL = 'STM32U5A9xx' -elif TREZOR_MODEL in ('1',): - CPU_MODEL = 'STM32F405xx' -else: - raise ValueError('Unknown Trezor model') ALLPATHS=['.', 'embed/rust', @@ -544,7 +495,7 @@ ALLPATHS=['.', 'vendor/micropython', 'vendor/micropython/ports/unix', 'vendor/micropython/lib/mp-readline', - ] + CPPPATH_MOD + ] + CPPPATH_MOD + PATH_HAL env.Replace( CCFLAGS='$COPT ' @@ -555,16 +506,11 @@ env.Replace( LIBS=['m'], CPPPATH=ALLPATHS, CPPDEFINES=[ - CPU_MODEL, 'TREZOR_EMULATOR', 'TREZOR_MODEL_'+TREZOR_MODEL, - 'TREZOR_BOARD=\\"boards/board-unix.h\\"', - ('FLASH_BIT_ACCESS', '1'), - ('FLASH_BLOCK_WORDS', '1'), - 'MCU_TYPE='+CPU_MODEL, ('MP_CONFIGFILE', '\\"embed/unix/mpconfigport.h\\"'), UI_LAYOUT, - ] + CPPDEFINES_MOD, + ] + CPPDEFINES_MOD + CPPDEFINES_HAL, ASPPFLAGS='$CFLAGS $CCFLAGS', ) try: @@ -790,7 +736,7 @@ if FROZEN: source=SOURCE_PY, source_dir=SOURCE_PY_DIR, bitcoin_only=BITCOIN_ONLY, - backlight=TREZOR_MODEL in ('T', 'T3T1'), + backlight='backlight' in FEATURES_AVAILABLE, optiga=OPTIGA, ui_layout=UI_LAYOUT, ) @@ -863,14 +809,8 @@ def cargo_build(): features.append('translations') if PYOPT == '0': features.append('debug') - if DMA2D: - features.append('dma2d') - - if TREZOR_MODEL in ('T', 'T3T1'): - features.append('touch') - features.append('sd_card') - if TREZOR_MODEL in ('R', '1'): - features.append('button') + + features.extend(FEATURES_AVAILABLE) env.get("ENV")["BINDGEN_MACROS"] = tools.get_bindgen_defines(env.get("ALLDEFS"), ALLPATHS) diff --git a/core/embed/trezorhal/boards/board-unix.h b/core/embed/trezorhal/boards/board-unix.h deleted file mode 100644 index c7270c741..000000000 --- a/core/embed/trezorhal/boards/board-unix.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef _BOARD_UNIX_H -#define _BOARD_UNIX_H - -#ifdef TREZOR_MODEL_T -#define USE_TOUCH 1 -#define USE_SD_CARD 1 -#define USE_SBU 1 -#define USE_RGB_COLORS 1 -#define USE_BACKLIGHT 1 -#endif - -#ifdef TREZOR_MODEL_T3T1 -#define USE_TOUCH 1 -#define USE_SD_CARD 1 -#define USE_SBU 1 -#define USE_RGB_COLORS 1 -#define USE_BACKLIGHT 1 -#define USE_OPTIGA 1 -#endif - -#ifdef TREZOR_MODEL_1 -#define USE_BUTTON 1 -#endif - -#ifdef TREZOR_MODEL_R -#define USE_BUTTON 1 -#define USE_SBU 1 -#define USE_OPTIGA 1 -#endif - -#include "display-unix.h" - -#endif //_BOARD_UNIX_H diff --git a/core/embed/trezorhal/boards/t1b1-unix.h b/core/embed/trezorhal/boards/t1b1-unix.h new file mode 100644 index 000000000..30e82eeb1 --- /dev/null +++ b/core/embed/trezorhal/boards/t1b1-unix.h @@ -0,0 +1,24 @@ +#ifndef BOARDS_T1B1_UNIX_H +#define BOARDS_T1B1_UNIX_H + +#define USE_BUTTON 1 + +#define MAX_DISPLAY_RESX 128 +#define MAX_DISPLAY_RESY 64 +#define DISPLAY_RESX 128 +#define DISPLAY_RESY 64 +#define TREZOR_FONT_BPP 1 + +#define WINDOW_WIDTH 200 +#define WINDOW_HEIGHT 340 +#define TOUCH_OFFSET_X 36 +#define TOUCH_OFFSET_Y 92 + +#define ORIENTATION_NS 1 + +#define BACKGROUND_FILE "background_1.h" +#define BACKGROUND_NAME background_1_jpg + +#include "display-unix.h" + +#endif // BOARDS_T1B1_UNIX_H diff --git a/core/embed/trezorhal/boards/t2b1-unix.h b/core/embed/trezorhal/boards/t2b1-unix.h new file mode 100644 index 000000000..356365001 --- /dev/null +++ b/core/embed/trezorhal/boards/t2b1-unix.h @@ -0,0 +1,26 @@ +#ifndef BOARDS_T2B1_UNIX_H +#define BOARDS_T2B1_UNIX_H + +#define USE_BUTTON 1 +#define USE_SBU 1 +#define USE_OPTIGA 1 + +#define MAX_DISPLAY_RESX 128 +#define MAX_DISPLAY_RESY 64 +#define DISPLAY_RESX 128 +#define DISPLAY_RESY 64 +#define TREZOR_FONT_BPP 1 + +#define WINDOW_WIDTH 193 +#define WINDOW_HEIGHT 339 +#define TOUCH_OFFSET_X 32 +#define TOUCH_OFFSET_Y 84 + +#define ORIENTATION_NS 1 + +#define BACKGROUND_FILE "background_T2B1.h" +#define BACKGROUND_NAME background_T2B1_jpg + +#include "display-unix.h" + +#endif // BOARDS_T2B1_UNIX_H diff --git a/core/embed/trezorhal/boards/t2t1-unix.h b/core/embed/trezorhal/boards/t2t1-unix.h new file mode 100644 index 000000000..7b7dc083a --- /dev/null +++ b/core/embed/trezorhal/boards/t2t1-unix.h @@ -0,0 +1,41 @@ +#ifndef BOARDS_T2T1_UNIX_H +#define BOARDS_T2T1_UNIX_H + +#define USE_TOUCH 1 +#define USE_SD_CARD 1 +#define USE_SBU 1 +#define USE_RGB_COLORS 1 +#define USE_BACKLIGHT 1 + +// ILI9341V, GC9307 and ST7789V drivers support 240px x 320px display resolution +#define MAX_DISPLAY_RESX 240 +#define MAX_DISPLAY_RESY 320 +#define DISPLAY_RESX 240 +#define DISPLAY_RESY 240 +#define TREZOR_FONT_BPP 4 + +#ifdef TREZOR_EMULATOR_RASPI +#define WINDOW_WIDTH 480 +#define WINDOW_HEIGHT 320 +#define TOUCH_OFFSET_X 110 +#define TOUCH_OFFSET_Y 40 + +#define ORIENTATION_NSEW 1 + +#define BACKGROUND_FILE "background_raspi.h" +#define BACKGROUND_NAME background_raspi_jpg + +#else +#define WINDOW_WIDTH 400 +#define WINDOW_HEIGHT 600 +#define TOUCH_OFFSET_X 80 +#define TOUCH_OFFSET_Y 110 + +#define BACKGROUND_FILE "background_T.h" +#define BACKGROUND_NAME background_T_jpg + +#endif + +#include "display-unix.h" + +#endif // BOARDS_T2T1_UNIX_H diff --git a/core/embed/trezorhal/boards/t3t1-unix.h b/core/embed/trezorhal/boards/t3t1-unix.h new file mode 100644 index 000000000..e938b637e --- /dev/null +++ b/core/embed/trezorhal/boards/t3t1-unix.h @@ -0,0 +1,29 @@ +#ifndef BOARDS_T3T1_UNIX_H +#define BOARDS_T3T1_UNIX_H + +#define USE_TOUCH 1 +#define USE_SD_CARD 1 +#define USE_SBU 1 +#define USE_RGB_COLORS 1 +#define USE_BACKLIGHT 1 +#define USE_OPTIGA 1 + +#define MAX_DISPLAY_RESX 240 +#define MAX_DISPLAY_RESY 240 +#define DISPLAY_RESX 240 +#define DISPLAY_RESY 240 +#define TREZOR_FONT_BPP 4 + +#define WINDOW_WIDTH 400 +#define WINDOW_HEIGHT 600 +#define TOUCH_OFFSET_X 80 +#define TOUCH_OFFSET_Y 110 + +#define ORIENTATION_NSEW 1 + +#define BACKGROUND_FILE "background_T.h" +#define BACKGROUND_NAME background_T_jpg + +#include "display-unix.h" + +#endif // BOARDS_T3T1_UNIX_H diff --git a/core/embed/trezorhal/unix/display-unix.c b/core/embed/trezorhal/unix/display-unix.c index f0442cf4a..78d877667 100644 --- a/core/embed/trezorhal/unix/display-unix.c +++ b/core/embed/trezorhal/unix/display-unix.c @@ -34,46 +34,9 @@ #include "display_interface.h" #include "profile.h" -#define EMULATOR_BORDER 16 - -#if defined TREZOR_MODEL_T - -#ifdef TREZOR_EMULATOR_RASPI -#define WINDOW_WIDTH 480 -#define WINDOW_HEIGHT 320 -#define TOUCH_OFFSET_X 110 -#define TOUCH_OFFSET_Y 40 -#else -#define WINDOW_WIDTH 400 -#define WINDOW_HEIGHT 600 -#define TOUCH_OFFSET_X 80 -#define TOUCH_OFFSET_Y 110 -#endif - -#elif defined TREZOR_MODEL_1 - -#define WINDOW_WIDTH 200 -#define WINDOW_HEIGHT 340 -#define TOUCH_OFFSET_X 36 -#define TOUCH_OFFSET_Y 92 - -#elif defined TREZOR_MODEL_R - -#define WINDOW_WIDTH 193 -#define WINDOW_HEIGHT 339 -#define TOUCH_OFFSET_X 32 -#define TOUCH_OFFSET_Y 84 - -#elif defined TREZOR_MODEL_T3T1 +#include TREZOR_BOARD -#define WINDOW_WIDTH 400 -#define WINDOW_HEIGHT 600 -#define TOUCH_OFFSET_X 80 -#define TOUCH_OFFSET_Y 110 - -#else -#error Unknown Trezor model -#endif +#define EMULATOR_BORDER 16 static SDL_Window *WINDOW; static SDL_Renderer *RENDERER; @@ -107,7 +70,7 @@ static struct { } PIXELWINDOW; void display_pixeldata(pixel_color c) { -#if defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R +#if !defined USE_RGB_COLORS // set to white if highest bits of all R, G, B values are set to 1 // bin(10000 100000 10000) = hex(0x8410) // otherwise set to black @@ -202,26 +165,11 @@ void display_init(void) { SDL_PumpEvents(); SDL_SetWindowSize(WINDOW, WINDOW_WIDTH, WINDOW_HEIGHT); #endif -#ifdef TREZOR_EMULATOR_RASPI -#include "background_raspi.h" +#include BACKGROUND_FILE +#define CONCAT_LEN_HELPER(name) name##_len +#define CONCAT_LEN(name) CONCAT_LEN_HELPER(name) BACKGROUND = IMG_LoadTexture_RW( - RENDERER, SDL_RWFromMem(background_raspi_jpg, background_raspi_jpg_len), - 0); -#else -#if defined TREZOR_MODEL_T -#include "background_T.h" - BACKGROUND = IMG_LoadTexture_RW( - RENDERER, SDL_RWFromMem(background_T_jpg, background_T_jpg_len), 0); -#elif defined TREZOR_MODEL_1 -#include "background_1.h" - BACKGROUND = IMG_LoadTexture_RW( - RENDERER, SDL_RWFromMem(background_1_jpg, background_1_jpg_len), 0); -#elif defined TREZOR_MODEL_R -#include "background_T2B1.h" - BACKGROUND = IMG_LoadTexture_RW( - RENDERER, SDL_RWFromMem(background_T2B1_png, background_T2B1_png_len), 0); -#endif -#endif + RENDERER, SDL_RWFromMem(BACKGROUND_NAME, CONCAT_LEN(BACKGROUND_NAME)), 0); if (BACKGROUND) { SDL_SetTextureBlendMode(BACKGROUND, SDL_BLENDMODE_NONE); sdl_touch_offset_x = TOUCH_OFFSET_X; @@ -232,8 +180,8 @@ void display_init(void) { sdl_touch_offset_x = EMULATOR_BORDER; sdl_touch_offset_y = EMULATOR_BORDER; } -#if defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R - // T1 and TR do not have backlight capabilities in hardware, so +#if !USE_BACKLIGHT + // some models do not have backlight capabilities in hardware, so // setting its value here for emulator to avoid // calling any `set_backlight` functions DISPLAY_BACKLIGHT = 255; @@ -291,12 +239,12 @@ void display_refresh(void) { int display_orientation(int degrees) { if (degrees != DISPLAY_ORIENTATION) { -#if defined TREZOR_MODEL_T || defined TREZOR_MODEL_T3T1 +#if defined ORIENTATION_NSEW if (degrees == 0 || degrees == 90 || degrees == 180 || degrees == 270) { -#elif defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R +#elif defined ORIENTATION_NS if (degrees == 0 || degrees == 180) { #else -#error Unknown Trezor model + if (degrees == 0) { #endif DISPLAY_ORIENTATION = degrees; display_refresh(); @@ -308,7 +256,7 @@ int display_orientation(int degrees) { int display_get_orientation(void) { return DISPLAY_ORIENTATION; } int display_backlight(int val) { -#if defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R +#if !USE_BACKLIGHT val = 255; #endif if (DISPLAY_BACKLIGHT != val && val >= 0 && val <= 255) { diff --git a/core/embed/trezorhal/unix/display-unix.h b/core/embed/trezorhal/unix/display-unix.h index a514af032..f183100b6 100644 --- a/core/embed/trezorhal/unix/display-unix.h +++ b/core/embed/trezorhal/unix/display-unix.h @@ -3,39 +3,6 @@ #include -#ifdef TREZOR_MODEL_T -// ILI9341V, GC9307 and ST7789V drivers support 240px x 320px display resolution -#define MAX_DISPLAY_RESX 240 -#define MAX_DISPLAY_RESY 320 -#define DISPLAY_RESX 240 -#define DISPLAY_RESY 240 -#define TREZOR_FONT_BPP 4 -#endif - -#ifdef TREZOR_MODEL_R -#define MAX_DISPLAY_RESX 128 -#define MAX_DISPLAY_RESY 64 -#define DISPLAY_RESX 128 -#define DISPLAY_RESY 64 -#define TREZOR_FONT_BPP 1 -#endif - -#ifdef TREZOR_MODEL_T3T1 -#define MAX_DISPLAY_RESX 240 -#define MAX_DISPLAY_RESY 240 -#define DISPLAY_RESX 240 -#define DISPLAY_RESY 240 -#define TREZOR_FONT_BPP 4 -#endif - -#ifdef TREZOR_MODEL_1 -#define MAX_DISPLAY_RESX 128 -#define MAX_DISPLAY_RESY 64 -#define DISPLAY_RESX 128 -#define DISPLAY_RESY 64 -#define TREZOR_FONT_BPP 1 -#endif - extern uint8_t *const DISPLAY_DATA_ADDRESS; #endif //_DISPLAY_UNIX_H diff --git a/core/site_scons/models/T1B1/__init__.py b/core/site_scons/models/T1B1/__init__.py index b0af63c46..7610b2be8 100644 --- a/core/site_scons/models/T1B1/__init__.py +++ b/core/site_scons/models/T1B1/__init__.py @@ -2,6 +2,7 @@ from __future__ import annotations from typing import Optional +from .emulator import configure as emul from .trezor_1 import configure @@ -13,4 +14,7 @@ def configure_board( sources: list[str], paths: list[str], ): - return configure(env, features_wanted, defines, sources, paths) + if revision == "emulator": + return emul(env, features_wanted, defines, sources, paths) + else: + return configure(env, features_wanted, defines, sources, paths) diff --git a/core/site_scons/models/T1B1/emulator.py b/core/site_scons/models/T1B1/emulator.py new file mode 100644 index 000000000..97f2a32ef --- /dev/null +++ b/core/site_scons/models/T1B1/emulator.py @@ -0,0 +1,33 @@ +from __future__ import annotations + +from .. import get_hw_model_as_number + + +def configure( + env: dict, + features_wanted: list[str], + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +) -> list[str]: + + board = "t1b1-unix.h" + hw_model = get_hw_model_as_number("T1B1") + hw_revision = 0 + mcu = "STM32F405xx" + + features = [] + defines += [mcu] + defines += [f'TREZOR_BOARD=\\"boards/{board}\\"'] + defines += [f"HW_MODEL={hw_model}"] + defines += [f"HW_REVISION={hw_revision}"] + defines += [f"MCU_TYPE={mcu}"] + defines += ["FLASH_BIT_ACCESS=1"] + defines += ["FLASH_BLOCK_WORDS=1"] + + if "input" in features_wanted: + features.append("button") + + sources += ["embed/models/model_T1B1_layout.c"] + + return features diff --git a/core/site_scons/models/T2B1/__init__.py b/core/site_scons/models/T2B1/__init__.py index 659138e37..f3baa38a5 100644 --- a/core/site_scons/models/T2B1/__init__.py +++ b/core/site_scons/models/T2B1/__init__.py @@ -2,6 +2,7 @@ from __future__ import annotations from typing import Optional +from .emulator import configure as emul from .trezor_r_v3 import configure as configure_r3 from .trezor_r_v4 import configure as configure_r4 from .trezor_r_v6 import configure as configure_r6 @@ -18,7 +19,9 @@ def configure_board( ): if revision is None: revision = 10 - if revision == 3: + if revision == "emulator": + return emul(env, features_wanted, defines, sources, paths) + elif revision == 3: return configure_r3(env, features_wanted, defines, sources, paths) elif revision == 4: return configure_r4(env, features_wanted, defines, sources, paths) diff --git a/core/site_scons/models/T2B1/emulator.py b/core/site_scons/models/T2B1/emulator.py new file mode 100644 index 000000000..48e1dab50 --- /dev/null +++ b/core/site_scons/models/T2B1/emulator.py @@ -0,0 +1,42 @@ +from __future__ import annotations + +from .. import get_hw_model_as_number + + +def configure( + env: dict, + features_wanted: list[str], + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +) -> list[str]: + + board = "t2b1-unix.h" + hw_model = get_hw_model_as_number("T2B1") + hw_revision = 0 + mcu = "STM32F427xx" + + features = [] + defines += [mcu] + defines += [f'TREZOR_BOARD=\\"boards/{board}\\"'] + defines += [f"HW_MODEL={hw_model}"] + defines += [f"HW_REVISION={hw_revision}"] + defines += [f"MCU_TYPE={mcu}"] + defines += ["FLASH_BIT_ACCESS=1"] + defines += ["FLASH_BLOCK_WORDS=1"] + + if "sbu" in features_wanted: + sources += ["embed/trezorhal/unix/sbu.c"] + + if "optiga_hal" in features_wanted: + sources += ["embed/trezorhal/unix/optiga_hal.c"] + + if "optiga" in features_wanted: + sources += ["embed/trezorhal/unix/optiga.c"] + + if "input" in features_wanted: + features.append("button") + + sources += ["embed/models/model_T2B1_layout.c"] + + return features diff --git a/core/site_scons/models/T2T1/__init__.py b/core/site_scons/models/T2T1/__init__.py index bebe0b3aa..dec299442 100644 --- a/core/site_scons/models/T2T1/__init__.py +++ b/core/site_scons/models/T2T1/__init__.py @@ -2,6 +2,7 @@ from __future__ import annotations from typing import Optional +from .emulator import configure as emul from .trezor_t import configure @@ -13,4 +14,7 @@ def configure_board( sources: list[str], paths: list[str], ): - return configure(env, features_wanted, defines, sources, paths) + if revision == "emulator": + return emul(env, features_wanted, defines, sources, paths) + else: + return configure(env, features_wanted, defines, sources, paths) diff --git a/core/site_scons/models/T2T1/emulator.py b/core/site_scons/models/T2T1/emulator.py new file mode 100644 index 000000000..9379dc0e1 --- /dev/null +++ b/core/site_scons/models/T2T1/emulator.py @@ -0,0 +1,51 @@ +from __future__ import annotations + +from .. import get_hw_model_as_number + + +def configure( + env: dict, + features_wanted: list[str], + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +) -> list[str]: + + board = "t2t1-unix.h" + hw_model = get_hw_model_as_number("T2T1") + hw_revision = 0 + mcu = "STM32F427xx" + + features = [] + defines += [mcu] + defines += [f'TREZOR_BOARD=\\"boards/{board}\\"'] + defines += [f"HW_MODEL={hw_model}"] + defines += [f"HW_REVISION={hw_revision}"] + defines += [f"MCU_TYPE={mcu}"] + defines += ["FLASH_BIT_ACCESS=1"] + defines += ["FLASH_BLOCK_WORDS=1"] + + if "dma2d" in features_wanted: + features.append("dma2d") + sources += ["embed/lib/dma2d_emul.c"] + defines += ["USE_DMA2D"] + + if "sd_card" in features_wanted: + features.append("sd_card") + sources += [ + "embed/trezorhal/unix/sdcard.c", + "embed/extmod/modtrezorio/ff.c", + "embed/extmod/modtrezorio/ffunicode.c", + ] + + if "sbu" in features_wanted: + sources += ["embed/trezorhal/unix/sbu.c"] + + if "input" in features_wanted: + features.append("touch") + + features.append("backlight") + + sources += ["embed/models/model_T2T1_layout.c"] + + return features diff --git a/core/site_scons/models/T3T1/__init__.py b/core/site_scons/models/T3T1/__init__.py index 2b968aca0..31653d58b 100644 --- a/core/site_scons/models/T3T1/__init__.py +++ b/core/site_scons/models/T3T1/__init__.py @@ -2,6 +2,7 @@ from __future__ import annotations from typing import Optional +from .emulator import configure as emul from .trezor_t3t1_revE import configure as configure_revE from .trezor_t3t1_v4 import configure as configure_v4 @@ -16,7 +17,9 @@ def configure_board( ): if revision is None: revision = "E" - if revision == 4: + if revision == "emulator": + return emul(env, features_wanted, defines, sources, paths) + elif revision == 4: return configure_v4(env, features_wanted, defines, sources, paths) elif revision == "E": return configure_revE(env, features_wanted, defines, sources, paths) diff --git a/core/site_scons/models/T3T1/emulator.py b/core/site_scons/models/T3T1/emulator.py new file mode 100644 index 000000000..214d57d11 --- /dev/null +++ b/core/site_scons/models/T3T1/emulator.py @@ -0,0 +1,58 @@ +from __future__ import annotations + +from .. import get_hw_model_as_number + + +def configure( + env: dict, + features_wanted: list[str], + defines: list[str | tuple[str, str]], + sources: list[str], + paths: list[str], +) -> list[str]: + + board = "t3t1-unix.h" + hw_model = get_hw_model_as_number("T3T1") + hw_revision = 0 + mcu = "STM32FU585xx" + + features = [] + defines += [mcu] + defines += [f'TREZOR_BOARD=\\"boards/{board}\\"'] + defines += [f"HW_MODEL={hw_model}"] + defines += [f"HW_REVISION={hw_revision}"] + defines += [f"MCU_TYPE={mcu}"] + # todo change to blockwise flash when implemented in unix + defines += ["FLASH_BIT_ACCESS=1"] + defines += ["FLASH_BLOCK_WORDS=1"] + + if "dma2d" in features_wanted: + features.append("dma2d") + sources += ["embed/lib/dma2d_emul.c"] + defines += ["USE_DMA2D"] + + if "sd_card" in features_wanted: + features.append("sd_card") + sources += [ + "embed/trezorhal/unix/sdcard.c", + "embed/extmod/modtrezorio/ff.c", + "embed/extmod/modtrezorio/ffunicode.c", + ] + + if "sbu" in features_wanted: + sources += ["embed/trezorhal/unix/sbu.c"] + + if "optiga_hal" in features_wanted: + sources += ["embed/trezorhal/unix/optiga_hal.c"] + + if "optiga" in features_wanted: + sources += ["embed/trezorhal/unix/optiga.c"] + + if "input" in features_wanted: + features.append("touch") + + features.append("backlight") + + sources += ["embed/models/model_T3T1_layout.c"] + + return features