1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-18 20:38:10 +00:00

refactor(core): introduce emulator boards

[no changelog]
This commit is contained in:
tychovrahe 2024-04-14 21:16:50 +02:00 committed by TychoVrahe
parent e6f2fa711e
commit 0b5e8ed480
19 changed files with 427 additions and 395 deletions

View File

@ -7,7 +7,6 @@ TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T')
CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0)) CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0))
HW_REVISION = 'emulator' HW_REVISION = 'emulator'
NEW_RENDERING = ARGUMENTS.get('NEW_RENDERING', '1') == '1' NEW_RENDERING = ARGUMENTS.get('NEW_RENDERING', '1') == '1'
DMA2D = False
if TREZOR_MODEL in ('1', 'DISC1'): if TREZOR_MODEL in ('1', 'DISC1'):
# skip bootloader build # skip bootloader build
@ -21,13 +20,15 @@ if TREZOR_MODEL in ('1', 'DISC1'):
) )
Return() Return()
FEATURES_WANTED = ["input", "rgb_led", "dma2d"] FEATURES_WANTED = ["input", "rgb_led", "dma2d", "optiga_hal"]
if NEW_RENDERING: if NEW_RENDERING:
FEATURES_WANTED.append("new_rendering") FEATURES_WANTED.append("new_rendering")
CCFLAGS_MOD = '' CCFLAGS_MOD = ''
CPPPATH_MOD = [] CPPPATH_MOD = []
CPPDEFINES_HAL = []
PATH_HAL = []
CPPDEFINES_MOD = [] CPPDEFINES_MOD = []
SOURCE_MOD = [] SOURCE_MOD = []
SOURCE_MOD_CRYPTO = [] SOURCE_MOD_CRYPTO = []
@ -116,39 +117,14 @@ SOURCE_MOD += [
if NEW_RENDERING: if NEW_RENDERING:
CPPDEFINES_MOD += ['NEW_RENDERING'] CPPDEFINES_MOD += ['NEW_RENDERING']
if TREZOR_MODEL in ('T',):
CPPDEFINES_MOD += ['DISPLAY_RGB565']
elif TREZOR_MODEL in ('R', '1',):
CPPDEFINES_MOD += ['XFRAMEBUFFER', 'DISPLAY_MONO']
elif TREZOR_MODEL in ('T3T1',):
CPPDEFINES_MOD += ['XFRAMEBUFFER', 'DISPLAY_RGB565']
SOURCE_MOD += [ SOURCE_MOD += [
'embed/lib/gfx_draw.c', 'embed/lib/gfx_draw.c',
] ]
else: else:
SOURCE_MOD += [ SOURCE_MOD += [
'embed/lib/display_draw.c', 'embed/lib/display_draw.c',
'embed/lib/dma2d_emul.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 = [ SOURCE_NANOPB = [
'vendor/nanopb/pb_common.c', 'vendor/nanopb/pb_common.c',
'vendor/nanopb/pb_decode.c', 'vendor/nanopb/pb_decode.c',
@ -187,11 +163,6 @@ else:
'embed/trezorhal/unix/display-unix.c', 'embed/trezorhal/unix/display-unix.c',
] ]
if TREZOR_MODEL in ('R', 'T3T1'):
SOURCE_TREZORHAL += [
'embed/trezorhal/unix/optiga_hal.c',
]
SOURCE_UNIX = [ SOURCE_UNIX = [
'embed/unix/profile.c', 'embed/unix/profile.c',
] ]
@ -209,6 +180,8 @@ tools.add_font('BOLD_UPPER', FONT_BOLD_UPPER, CPPDEFINES_MOD, SOURCE_MOD)
env = Environment(ENV=os.environ, CFLAGS='%s -DCONFIDENTIAL= -DPRODUCTION=%s' % (ARGUMENTS.get('CFLAGS', ''), ARGUMENTS.get('PRODUCTION', '0'))) 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( env.Replace(
CP='cp', CP='cp',
AS='as', AS='as',
@ -221,22 +194,6 @@ env.Replace(
PYTHON='python', PYTHON='python',
MAKECMAKELISTS='$PYTHON tools/make_cmakelists.py', ) 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_IDENTIFIER = models.get_model_identifier(TREZOR_MODEL)
MODEL_AS_NUMBER = str(models.get_hw_model_as_number(MODEL_IDENTIFIER)) MODEL_AS_NUMBER = str(models.get_hw_model_as_number(MODEL_IDENTIFIER))
@ -251,7 +208,7 @@ ALLPATHS = ['embed/rust',
'embed/unix', 'embed/unix',
'embed/extmod/modtrezorui', 'embed/extmod/modtrezorui',
'vendor/nanopb', 'vendor/nanopb',
] + CPPPATH_MOD ] + CPPPATH_MOD + PATH_HAL
env.Replace( env.Replace(
COPT=env.get('ENV').get('OPTIMIZE', '-Os'), COPT=env.get('ENV').get('OPTIMIZE', '-Os'),
@ -267,18 +224,11 @@ env.Replace(
CPPDEFINES=[ CPPDEFINES=[
'BOOTLOADER', 'BOOTLOADER',
'TREZOR_EMULATOR', 'TREZOR_EMULATOR',
CPU_MODEL,
'HW_MODEL=' + MODEL_AS_NUMBER,
'HW_REVISION=' + ('10' if TREZOR_MODEL in ('R',) else '0'),
'TREZOR_MODEL_'+TREZOR_MODEL, '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_FIELD_16BIT',
'PB_ENCODE_ARRAYS_UNPACKED', 'PB_ENCODE_ARRAYS_UNPACKED',
'PB_VALIDATE_UTF8', 'PB_VALIDATE_UTF8',
] + CPPDEFINES_MOD, ] + CPPDEFINES_MOD + CPPDEFINES_HAL,
ASPPFLAGS='$CFLAGS $CCFLAGS', ) ASPPFLAGS='$CFLAGS $CCFLAGS', )
try: try:
@ -326,24 +276,10 @@ def cargo_build():
if NEW_RENDERING: if NEW_RENDERING:
features.append('new_rendering') features.append('new_rendering')
if TREZOR_MODEL in ('T',):
features.append('display_rgb565')
elif TREZOR_MODEL in ('R', '1',):
features.append('display_mono')
features.append('xframebuffer')
elif TREZOR_MODEL in ('T3T1',):
features.append('display_rgb565')
features.append('xframebuffer')
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("ui")
features.append("bootloader") features.append("bootloader")
features.extend(FEATURES_AVAILABLE)
cargo_opts = [ cargo_opts = [

View File

@ -7,13 +7,16 @@ import tools, models
BITCOIN_ONLY = ARGUMENTS.get('BITCOIN_ONLY', '0') BITCOIN_ONLY = ARGUMENTS.get('BITCOIN_ONLY', '0')
EVERYTHING = BITCOIN_ONLY != '1' EVERYTHING = BITCOIN_ONLY != '1'
TREZOR_MODEL = ARGUMENTS.get('TREZOR_MODEL', 'T') 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)) CMAKELISTS = int(ARGUMENTS.get('CMAKELISTS', 0))
HW_REVISION ='emulator' HW_REVISION ='emulator'
THP = ARGUMENTS.get('THP', '0') == '1' # Trezor-Host Protocol THP = ARGUMENTS.get('THP', '0') == '1' # Trezor-Host Protocol
NEW_RENDERING = ARGUMENTS.get('NEW_RENDERING', '1') == '1' NEW_RENDERING = ARGUMENTS.get('NEW_RENDERING', '1') == '1'
FEATURES_WANTED = ["input", "sd_card", "dma2d", "optiga", "sbu"]
if NEW_RENDERING:
FEATURES_WANTED.append("new_rendering")
if TREZOR_MODEL in ('DISC1', 'DISC2'): if TREZOR_MODEL in ('DISC1', 'DISC2'):
# skip unix build # skip unix build
env = Environment() env = Environment()
@ -32,6 +35,8 @@ FEATURE_FLAGS = {
CCFLAGS_MOD = '' CCFLAGS_MOD = ''
CPPPATH_MOD = [] CPPPATH_MOD = []
CPPDEFINES_HAL = []
PATH_HAL = []
CPPDEFINES_MOD = [] CPPDEFINES_MOD = []
SOURCE_MOD = [ SOURCE_MOD = [
'vendor/micropython/extmod/vfs_posix_file.c', 'vendor/micropython/extmod/vfs_posix_file.c',
@ -206,11 +211,6 @@ if THP:
SOURCE_MOD += [ SOURCE_MOD += [
'embed/extmod/modtrezorio/modtrezorio.c', 'embed/extmod/modtrezorio/modtrezorio.c',
] ]
if TREZOR_MODEL in ('T', 'T3T1'):
SOURCE_MOD += [
'embed/extmod/modtrezorio/ff.c',
'embed/extmod/modtrezorio/ffunicode.c',
]
# modtrezorui # modtrezorui
CPPPATH_MOD += [ CPPPATH_MOD += [
@ -245,26 +245,6 @@ else:
'embed/lib/display_draw.c', 'embed/lib/display_draw.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 += [ CPPDEFINES_MOD += [
'TREZOR_UI2', 'TREZOR_UI2',
'TRANSLATIONS', 'TRANSLATIONS',
@ -281,14 +261,6 @@ if RASPI:
if NEW_RENDERING: if NEW_RENDERING:
CPPDEFINES_MOD += ['NEW_RENDERING'] CPPDEFINES_MOD += ['NEW_RENDERING']
if TREZOR_MODEL in ('T',):
CPPDEFINES_MOD += ['DISPLAY_RGB565']
elif TREZOR_MODEL in ('R', '1',):
CPPDEFINES_MOD += ['XFRAMEBUFFER', 'DISPLAY_MONO']
elif TREZOR_MODEL in ('T3T1',):
CPPDEFINES_MOD += ['XFRAMEBUFFER', 'DISPLAY_RGB565']
# modtrezorutils # modtrezorutils
SOURCE_MOD += [ SOURCE_MOD += [
@ -453,32 +425,13 @@ SOURCE_UNIX = [
if NEW_RENDERING: if NEW_RENDERING:
SOURCE_MOD += [ SOURCE_MOD += [
'embed/trezorhal/unix/display_driver.c', 'embed/trezorhal/unix/display_driver.c',
'embed/trezorhal/unix/dma2d_bitblt.c',
'embed/trezorhal/xdisplay_legacy.c', 'embed/trezorhal/xdisplay_legacy.c',
] ]
else: else:
SOURCE_MOD += [ SOURCE_MOD += [
'embed/trezorhal/unix/display-unix.c', 'embed/trezorhal/unix/display-unix.c',
'embed/lib/dma2d_emul.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',
]
TRANSLATION_DATA = [ TRANSLATION_DATA = [
"translations/en.json", "translations/en.json",
"translations/order.json", "translations/order.json",
@ -504,6 +457,7 @@ else:
env = Environment(ENV=os.environ, CFLAGS='%s -DCONFIDENTIAL= -DPYOPT=%s -DBITCOIN_ONLY=%s %s' % (ARGUMENTS.get('CFLAGS', ''), PYOPT, BITCOIN_ONLY, STATIC)) 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'): if TREZOR_MODEL in ('T', 'T3T1'):
UI_LAYOUT = 'UI_LAYOUT_TT' UI_LAYOUT = 'UI_LAYOUT_TT'
@ -514,14 +468,17 @@ elif TREZOR_MODEL in ('1', 'R'):
else: else:
raise ValueError('Unknown Trezor model') raise ValueError('Unknown Trezor model')
if TREZOR_MODEL in ('T', 'T3T1'):
if 'sd_card' in FEATURES_AVAILABLE:
SDCARD = True SDCARD = True
SOURCE_UNIX += [
'embed/trezorhal/unix/sdcard.c',
]
else: else:
SDCARD = False SDCARD = False
if 'optiga' in FEATURES_AVAILABLE:
OPTIGA = True
else:
OPTIGA = False
env.Tool('micropython') env.Tool('micropython')
@ -571,19 +528,6 @@ if ARGUMENTS.get('TREZOR_MEMPERF', '0') == '1':
env.Replace( env.Replace(
TREZOR_MODEL=TREZOR_MODEL, ) 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=['.', ALLPATHS=['.',
'embed/rust', 'embed/rust',
'embed/lib', 'embed/lib',
@ -595,7 +539,7 @@ ALLPATHS=['.',
'vendor/micropython', 'vendor/micropython',
'vendor/micropython/ports/unix', 'vendor/micropython/ports/unix',
'vendor/micropython/lib/mp-readline', 'vendor/micropython/lib/mp-readline',
] + CPPPATH_MOD ] + CPPPATH_MOD + PATH_HAL
env.Replace( env.Replace(
CCFLAGS='$COPT ' CCFLAGS='$COPT '
@ -606,16 +550,11 @@ env.Replace(
LIBS=['m'], LIBS=['m'],
CPPPATH=ALLPATHS, CPPPATH=ALLPATHS,
CPPDEFINES=[ CPPDEFINES=[
CPU_MODEL,
'TREZOR_EMULATOR', 'TREZOR_EMULATOR',
'TREZOR_MODEL_'+TREZOR_MODEL, '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\\"'), ('MP_CONFIGFILE', '\\"embed/unix/mpconfigport.h\\"'),
UI_LAYOUT, UI_LAYOUT,
] + CPPDEFINES_MOD, ] + CPPDEFINES_MOD + CPPDEFINES_HAL,
ASPPFLAGS='$CFLAGS $CCFLAGS', ) ASPPFLAGS='$CFLAGS $CCFLAGS', )
try: try:
@ -841,7 +780,7 @@ if FROZEN:
source=SOURCE_PY, source=SOURCE_PY,
source_dir=SOURCE_PY_DIR, source_dir=SOURCE_PY_DIR,
bitcoin_only=BITCOIN_ONLY, bitcoin_only=BITCOIN_ONLY,
backlight=TREZOR_MODEL in ('T', 'T3T1'), backlight='backlight' in FEATURES_AVAILABLE,
optiga=OPTIGA, optiga=OPTIGA,
ui_layout=UI_LAYOUT, ui_layout=UI_LAYOUT,
thp=THP, thp=THP,
@ -917,27 +856,16 @@ def cargo_build():
if PYOPT == '0': if PYOPT == '0':
features.append('debug') features.append('debug')
if DMA2D:
features.append('dma2d') features.extend(FEATURES_AVAILABLE)
if TREZOR_MODEL in ('T', 'T3T1'): if TREZOR_MODEL in ('T', 'T3T1'):
features.append('touch')
features.append('sd_card')
features.append('ui_blurring') features.append('ui_blurring')
features.append('ui_jpeg_decoder') features.append('ui_jpeg_decoder')
if TREZOR_MODEL in ('R', '1'):
features.append('button')
if NEW_RENDERING: if NEW_RENDERING:
features.append('new_rendering') features.append('new_rendering')
if TREZOR_MODEL in ('T',):
features.append('display_rgb565')
elif TREZOR_MODEL in ('R', '1',):
features.append('display_mono')
features.append('xframebuffer')
elif TREZOR_MODEL in ('T3T1',):
features.append('display_rgb565')
features.append('xframebuffer')
env.get('ENV')['TREZOR_MODEL'] = TREZOR_MODEL env.get('ENV')['TREZOR_MODEL'] = TREZOR_MODEL

View File

@ -28,7 +28,6 @@ const DEFAULT_BINDGEN_MACROS_COMMON: &[&str] = &[
"-I../trezorhal/unix", "-I../trezorhal/unix",
"-I../models", "-I../models",
"-DTREZOR_EMULATOR", "-DTREZOR_EMULATOR",
"-DTREZOR_BOARD=\"boards/board-unix.h\"",
]; ];
#[cfg(feature = "model_tt")] #[cfg(feature = "model_tt")]
@ -37,6 +36,7 @@ const DEFAULT_BINDGEN_MACROS_T2T1: &[&str] = &[
"-DTREZOR_MODEL_T", "-DTREZOR_MODEL_T",
"-DFLASH_BIT_ACCESS=1", "-DFLASH_BIT_ACCESS=1",
"-DFLASH_BLOCK_WORDS=1", "-DFLASH_BLOCK_WORDS=1",
"-DTREZOR_BOARD=\"T2T1/boards/t2t1-unix.h\"",
]; ];
#[cfg(not(feature = "model_tt"))] #[cfg(not(feature = "model_tt"))]
const DEFAULT_BINDGEN_MACROS_T2T1: &[&str] = &[]; const DEFAULT_BINDGEN_MACROS_T2T1: &[&str] = &[];
@ -47,6 +47,7 @@ const DEFAULT_BINDGEN_MACROS_T2B1: &[&str] = &[
"-DTREZOR_MODEL_R", "-DTREZOR_MODEL_R",
"-DFLASH_BIT_ACCESS=1", "-DFLASH_BIT_ACCESS=1",
"-DFLASH_BLOCK_WORDS=1", "-DFLASH_BLOCK_WORDS=1",
"-DTREZOR_BOARD=\"T2B1/boards/t2b1-unix.h\"",
]; ];
#[cfg(not(feature = "model_tr"))] #[cfg(not(feature = "model_tr"))]
const DEFAULT_BINDGEN_MACROS_T2B1: &[&str] = &[]; const DEFAULT_BINDGEN_MACROS_T2B1: &[&str] = &[];

View File

@ -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

View File

@ -0,0 +1,22 @@
#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
#endif // BOARDS_T1B1_UNIX_H

View File

@ -0,0 +1,24 @@
#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
#endif // BOARDS_T2B1_UNIX_H

View File

@ -0,0 +1,39 @@
#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
#define ORIENTATION_NSEW 1
#ifdef TREZOR_EMULATOR_RASPI
#define WINDOW_WIDTH 480
#define WINDOW_HEIGHT 320
#define TOUCH_OFFSET_X 110
#define TOUCH_OFFSET_Y 40
#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
#endif // BOARDS_T2T1_UNIX_H

View File

@ -0,0 +1,27 @@
#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
#endif // BOARDS_T3T1_UNIX_H

View File

@ -30,51 +30,13 @@
#include <string.h> #include <string.h>
#include "common.h" #include "common.h"
#include "display-unix.h"
#include "display.h" #include "display.h"
#include "profile.h" #include "profile.h"
#include TREZOR_BOARD
#define EMULATOR_BORDER 16 #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
#define WINDOW_WIDTH 400
#define WINDOW_HEIGHT 600
#define TOUCH_OFFSET_X 80
#define TOUCH_OFFSET_Y 110
#else
#error Unknown Trezor model
#endif
static SDL_Window *WINDOW; static SDL_Window *WINDOW;
static SDL_Renderer *RENDERER; static SDL_Renderer *RENDERER;
static SDL_Surface *BUFFER; static SDL_Surface *BUFFER;
@ -107,7 +69,7 @@ static struct {
} PIXELWINDOW; } PIXELWINDOW;
void display_pixeldata(pixel_color c) { 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 // set to white if highest bits of all R, G, B values are set to 1
// bin(10000 100000 10000) = hex(0x8410) // bin(10000 100000 10000) = hex(0x8410)
// otherwise set to black // otherwise set to black
@ -202,26 +164,11 @@ void display_init(void) {
SDL_PumpEvents(); SDL_PumpEvents();
SDL_SetWindowSize(WINDOW, WINDOW_WIDTH, WINDOW_HEIGHT); SDL_SetWindowSize(WINDOW, WINDOW_WIDTH, WINDOW_HEIGHT);
#endif #endif
#ifdef TREZOR_EMULATOR_RASPI #include BACKGROUND_FILE
#include "background_raspi.h" #define CONCAT_LEN_HELPER(name) name##_len
#define CONCAT_LEN(name) CONCAT_LEN_HELPER(name)
BACKGROUND = IMG_LoadTexture_RW( BACKGROUND = IMG_LoadTexture_RW(
RENDERER, SDL_RWFromMem(background_raspi_jpg, background_raspi_jpg_len), RENDERER, SDL_RWFromMem(BACKGROUND_NAME, CONCAT_LEN(BACKGROUND_NAME)), 0);
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
if (BACKGROUND) { if (BACKGROUND) {
SDL_SetTextureBlendMode(BACKGROUND, SDL_BLENDMODE_NONE); SDL_SetTextureBlendMode(BACKGROUND, SDL_BLENDMODE_NONE);
sdl_touch_offset_x = TOUCH_OFFSET_X; sdl_touch_offset_x = TOUCH_OFFSET_X;
@ -232,8 +179,8 @@ void display_init(void) {
sdl_touch_offset_x = EMULATOR_BORDER; sdl_touch_offset_x = EMULATOR_BORDER;
sdl_touch_offset_y = EMULATOR_BORDER; sdl_touch_offset_y = EMULATOR_BORDER;
} }
#if defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R #if !USE_BACKLIGHT
// T1 and TR do not have backlight capabilities in hardware, so // some models do not have backlight capabilities in hardware, so
// setting its value here for emulator to avoid // setting its value here for emulator to avoid
// calling any `set_backlight` functions // calling any `set_backlight` functions
DISPLAY_BACKLIGHT = 255; DISPLAY_BACKLIGHT = 255;
@ -291,12 +238,12 @@ void display_refresh(void) {
int display_orientation(int degrees) { int display_orientation(int degrees) {
if (degrees != DISPLAY_ORIENTATION) { 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) { 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) { if (degrees == 0 || degrees == 180) {
#else #else
#error Unknown Trezor model if (degrees == 0) {
#endif #endif
DISPLAY_ORIENTATION = degrees; DISPLAY_ORIENTATION = degrees;
display_refresh(); display_refresh();
@ -308,7 +255,7 @@ int display_orientation(int degrees) {
int display_get_orientation(void) { return DISPLAY_ORIENTATION; } int display_get_orientation(void) { return DISPLAY_ORIENTATION; }
int display_backlight(int val) { int display_backlight(int val) {
#if defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R #if !USE_BACKLIGHT
val = 255; val = 255;
#endif #endif
if (DISPLAY_BACKLIGHT != val && val >= 0 && val <= 255) { if (DISPLAY_BACKLIGHT != val && val >= 0 && val <= 255) {

View File

@ -1,41 +0,0 @@
#ifndef _DISPLAY_UNIX_H
#define _DISPLAY_UNIX_H
#include <stdint.h>
#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

View File

@ -19,6 +19,8 @@
#define _GNU_SOURCE #define _GNU_SOURCE
#include TREZOR_BOARD
#include <xdisplay.h> #include <xdisplay.h>
#include <SDL.h> #include <SDL.h>
@ -29,45 +31,6 @@
#define EMULATOR_BORDER 16 #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
#define WINDOW_WIDTH 400
#define WINDOW_HEIGHT 600
#define TOUCH_OFFSET_X 80
#define TOUCH_OFFSET_Y 110
#else
#error Unknown Trezor model
#endif
typedef struct { typedef struct {
// Current display orientation (0 or 180) // Current display orientation (0 or 180)
int orientation_angle; int orientation_angle;
@ -167,27 +130,12 @@ void display_init(void) {
SDL_PumpEvents(); SDL_PumpEvents();
SDL_SetWindowSize(drv->window, WINDOW_WIDTH, WINDOW_HEIGHT); SDL_SetWindowSize(drv->window, WINDOW_WIDTH, WINDOW_HEIGHT);
#endif #endif
#ifdef TREZOR_EMULATOR_RASPI #include BACKGROUND_FILE
#include "background_raspi.h" #define CONCAT_LEN_HELPER(name) name##_len
#define CONCAT_LEN(name) CONCAT_LEN_HELPER(name)
drv->background = IMG_LoadTexture_RW( drv->background = IMG_LoadTexture_RW(
drv->renderer, drv->renderer,
SDL_RWFromMem(background_raspi_jpg, background_raspi_jpg_len), 0); SDL_RWFromMem(BACKGROUND_NAME, CONCAT_LEN(BACKGROUND_NAME)), 0);
#else
#if defined TREZOR_MODEL_T
#include "background_T.h"
drv->background = IMG_LoadTexture_RW(
drv->renderer, SDL_RWFromMem(background_T_jpg, background_T_jpg_len), 0);
#elif defined TREZOR_MODEL_1
#include "background_1.h"
drv->background = IMG_LoadTexture_RW(
drv->renderer, SDL_RWFromMem(background_1_jpg, background_1_jpg_len), 0);
#elif defined TREZOR_MODEL_R
#include "background_T2B1.h"
drv->background = IMG_LoadTexture_RW(
drv->renderer,
SDL_RWFromMem(background_T2B1_png, background_T2B1_png_len), 0);
#endif
#endif
if (drv->background) { if (drv->background) {
SDL_SetTextureBlendMode(drv->background, SDL_BLENDMODE_NONE); SDL_SetTextureBlendMode(drv->background, SDL_BLENDMODE_NONE);
sdl_touch_offset_x = TOUCH_OFFSET_X; sdl_touch_offset_x = TOUCH_OFFSET_X;
@ -198,8 +146,8 @@ void display_init(void) {
sdl_touch_offset_x = EMULATOR_BORDER; sdl_touch_offset_x = EMULATOR_BORDER;
sdl_touch_offset_y = EMULATOR_BORDER; sdl_touch_offset_y = EMULATOR_BORDER;
} }
#if defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R #if !USE_BACKLIGHT
// T1 and TR do not have backlight capabilities in hardware, so // some models do not have backlight capabilities in hardware, so
// setting its value here for emulator to avoid // setting its value here for emulator to avoid
// calling any `set_backlight` functions // calling any `set_backlight` functions
drv->backlight_level = 255; drv->backlight_level = 255;
@ -225,7 +173,7 @@ void display_finish_actions(void) {
int display_set_backlight(int level) { int display_set_backlight(int level) {
display_driver_t *drv = &g_display_driver; display_driver_t *drv = &g_display_driver;
#if defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R #if !USE_BACKLIGHT
level = 255; level = 255;
#endif #endif
@ -245,12 +193,12 @@ int display_get_backlight(void) {
int display_set_orientation(int angle) { int display_set_orientation(int angle) {
display_driver_t *drv = &g_display_driver; display_driver_t *drv = &g_display_driver;
if (angle != drv->orientation_angle) { if (angle != drv->orientation_angle) {
#if defined TREZOR_MODEL_T || defined TREZOR_MODEL_T3T1 #if defined ORIENTATION_NSEW
if (angle == 0 || angle == 90 || angle == 180 || angle == 270) { if (angle == 0 || angle == 90 || angle == 180 || angle == 270) {
#elif defined TREZOR_MODEL_1 || defined TREZOR_MODEL_R #elif defined ORIENTATION_NS
if (angle == 0 || angle == 180) { if (angle == 0 || angle == 180) {
#else #else
#error Unknown Trezor model if (angle == 0) {
#endif #endif
drv->orientation_angle = angle; drv->orientation_angle = angle;
display_refresh(); display_refresh();

View File

@ -2,6 +2,7 @@ from __future__ import annotations
from typing import Optional from typing import Optional
from .emulator import configure as emul
from .trezor_1 import configure from .trezor_1 import configure
@ -13,4 +14,7 @@ def configure_board(
sources: list[str], sources: list[str],
paths: list[str], paths: list[str],
): ):
if revision == "emulator":
return emul(env, features_wanted, defines, sources, paths)
else:
return configure(env, features_wanted, defines, sources, paths) return configure(env, features_wanted, defines, sources, paths)

View File

@ -0,0 +1,38 @@
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]:
features_available: list[str] = []
board = "t1b1-unix.h"
hw_model = get_hw_model_as_number("T1B1")
hw_revision = 0
mcu = "STM32F405xx"
if "new_rendering" in features_wanted:
defines += ["XFRAMEBUFFER", "DISPLAY_MONO"]
features_available.append("xframebuffer")
features_available.append("display_mono")
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_available.append("button")
sources += ["embed/models/model_T1B1_layout.c"]
return features_available

View File

@ -2,10 +2,7 @@ from __future__ import annotations
from typing import Optional from typing import Optional
from .trezor_r_v3 import configure as configure_r3 from . import emulator, trezor_r_v3, trezor_r_v4, trezor_r_v6, trezor_r_v10
from .trezor_r_v4 import configure as configure_r4
from .trezor_r_v6 import configure as configure_r6
from .trezor_r_v10 import configure as configure_r10
def configure_board( def configure_board(
@ -16,14 +13,21 @@ def configure_board(
sources: list[str], sources: list[str],
paths: list[str], paths: list[str],
): ):
if revision is None: # Set default revision if None
revision = 10 revision = revision or 10
if revision == 3:
return configure_r3(env, features_wanted, defines, sources, paths) # Mapping of revisions to their respective configurations
elif revision == 4: revision_map = {
return configure_r4(env, features_wanted, defines, sources, paths) "emulator": emulator,
elif revision == 6: 3: trezor_r_v3,
return configure_r6(env, features_wanted, defines, sources, paths) 4: trezor_r_v4,
elif revision == 10: 6: trezor_r_v6,
return configure_r10(env, features_wanted, defines, sources, paths) 10: trezor_r_v10,
}
module = revision_map.get(revision)
if module:
return module.configure(env, features_wanted, defines, sources, paths)
raise Exception("Unknown model_r_version") raise Exception("Unknown model_r_version")

View File

@ -0,0 +1,48 @@
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]:
features_available: list[str] = []
board = "t2b1-unix.h"
hw_model = get_hw_model_as_number("T2B1")
hw_revision = 0
mcu = "STM32F427xx"
if "new_rendering" in features_wanted:
defines += ["XFRAMEBUFFER", "DISPLAY_MONO"]
features_available.append("xframebuffer")
features_available.append("display_mono")
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"]
features_available.append("optiga")
if "input" in features_wanted:
features_available.append("button")
sources += ["embed/models/model_T2B1_layout.c"]
return features_available

View File

@ -2,6 +2,7 @@ from __future__ import annotations
from typing import Optional from typing import Optional
from .emulator import configure as emul
from .trezor_t import configure from .trezor_t import configure
@ -13,4 +14,7 @@ def configure_board(
sources: list[str], sources: list[str],
paths: list[str], paths: list[str],
): ):
if revision == "emulator":
return emul(env, features_wanted, defines, sources, paths)
else:
return configure(env, features_wanted, defines, sources, paths) return configure(env, features_wanted, defines, sources, paths)

View File

@ -0,0 +1,60 @@
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]:
features_available: list[str] = []
board = "t2t1-unix.h"
hw_model = get_hw_model_as_number("T2T1")
hw_revision = 0
mcu = "STM32F427xx"
if "new_rendering" in features_wanted:
defines += ["DISPLAY_RGB565"]
features_available.append("display_rgb565")
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_available.append("dma2d")
if "new_rendering" in features_wanted:
sources += [
"embed/trezorhal/unix/dma2d_bitblt.c",
]
else:
sources += ["embed/lib/dma2d_emul.c"]
defines += ["USE_DMA2D"]
if "sd_card" in features_wanted:
features_available.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_available.append("touch")
features_available.append("backlight")
sources += ["embed/models/model_T2T1_layout.c"]
return features_available

View File

@ -2,8 +2,7 @@ from __future__ import annotations
from typing import Optional from typing import Optional
from .trezor_t3t1_revE import configure as configure_revE from . import emulator, trezor_t3t1_revE, trezor_t3t1_v4
from .trezor_t3t1_v4 import configure as configure_v4
def configure_board( def configure_board(
@ -14,10 +13,19 @@ def configure_board(
sources: list[str], sources: list[str],
paths: list[str], paths: list[str],
): ):
if revision is None: # Set default revision if None
revision = "E" revision = revision or "E"
if revision == 4:
return configure_v4(env, features_wanted, defines, sources, paths) # Mapping of revisions to their respective configurations
elif revision == "E": revision_map = {
return configure_revE(env, features_wanted, defines, sources, paths) "emulator": emulator,
raise Exception("Unknown model_t3t1_version") 4: trezor_t3t1_v4,
"E": trezor_t3t1_revE,
}
module = revision_map.get(revision)
if module:
return module.configure(env, features_wanted, defines, sources, paths)
raise Exception("Unknown model_r_version")

View File

@ -0,0 +1,68 @@
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]:
features_available: list[str] = []
board = "t3t1-unix.h"
hw_model = get_hw_model_as_number("T3T1")
hw_revision = 0
mcu = "STM32FU585xx"
if "new_rendering" in features_wanted:
defines += ["XFRAMEBUFFER", "DISPLAY_RGB565"]
features_available.append("xframebuffer")
features_available.append("display_rgb565")
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_available.append("dma2d")
if "new_rendering" in features_wanted:
sources += [
"embed/trezorhal/unix/dma2d_bitblt.c",
]
else:
sources += ["embed/lib/dma2d_emul.c"]
defines += ["USE_DMA2D"]
if "sd_card" in features_wanted:
features_available.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_available.append("touch")
features_available.append("backlight")
sources += ["embed/models/model_T3T1_layout.c"]
return features_available