diff --git a/extmod/modtrezorui/display.c b/extmod/modtrezorui/display.c index ed6cb7d1..0817696a 100644 --- a/extmod/modtrezorui/display.c +++ b/extmod/modtrezorui/display.c @@ -17,6 +17,7 @@ static int BACKLIGHT = 0; static int ORIENTATION = 0; +static int OFFSET[2] = {0, 0}; #if defined STM32_HAL_H #include "display-stmhal.h" @@ -342,3 +343,12 @@ void display_raw(uint8_t reg, const uint8_t *data, int datalen) } DATAS(data, datalen); } + +int *display_offset(int xy[2]) +{ + if (xy) { + OFFSET[0] = xy[0]; + OFFSET[1] = xy[1]; + } + return OFFSET; +} diff --git a/extmod/modtrezorui/display.h b/extmod/modtrezorui/display.h index e3be54ef..81fc0f75 100644 --- a/extmod/modtrezorui/display.h +++ b/extmod/modtrezorui/display.h @@ -23,6 +23,7 @@ void display_init(void); void display_set_window(uint16_t x, uint16_t y, uint16_t w, uint16_t h); int display_orientation(int degrees); int display_backlight(int val); +int *display_offset(int xy[2]); void set_color_table(uint16_t colortable[16], uint16_t fgcolor, uint16_t bgcolor); void display_clear(void); diff --git a/extmod/modtrezorui/modtrezorui-display.h b/extmod/modtrezorui/modtrezorui-display.h index b870f13f..a14fed18 100644 --- a/extmod/modtrezorui/modtrezorui-display.h +++ b/extmod/modtrezorui/modtrezorui-display.h @@ -339,6 +339,38 @@ STATIC mp_obj_t mod_TrezorUi_Display_backlight(size_t n_args, const mp_obj_t *ar } STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_backlight_obj, 1, 2, mod_TrezorUi_Display_backlight); +/// def trezor.ui.display.offset(xy: tuple=None) -> tuple: +/// ''' +/// Sets offset (x, y) for all subsequent drawing calls. +/// Call without the xy parameter to just perform the read of the value. +/// ''' +STATIC mp_obj_t mod_TrezorUi_Display_offset(size_t n_args, const mp_obj_t *args) { + int xy[2], *ret; + if (n_args > 1) { + mp_uint_t xy_cnt; + mp_obj_t *xy_obj; + if (MP_OBJ_IS_TYPE(args[1], &mp_type_tuple)) { + mp_obj_tuple_get(args[1], &xy_cnt, &xy_obj); + } else { + mp_raise_TypeError("Tuple expected"); + } + if (xy_cnt != 2) { + mp_raise_ValueError("Tuple of 2 values expected"); + } + xy[0] = mp_obj_get_int(xy_obj[0]); + xy[1] = mp_obj_get_int(xy_obj[1]); + ret = display_offset(xy); + } else { + ret = display_offset(0); + } + mp_obj_tuple_t *tuple = MP_OBJ_TO_PTR(mp_obj_new_tuple(2, NULL)); + tuple->items[0] = MP_OBJ_NEW_SMALL_INT(ret[0]); + tuple->items[1] = MP_OBJ_NEW_SMALL_INT(ret[1]); + return MP_OBJ_FROM_PTR(tuple); + +} +STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_TrezorUi_Display_offset_obj, 1, 2, mod_TrezorUi_Display_offset); + /// def trezor.ui.display.raw(reg: int, data: bytes) -> None: /// ''' /// Performs a raw command on the display. Read the datasheet to learn more. @@ -382,6 +414,7 @@ STATIC const mp_rom_map_elem_t mod_TrezorUi_Display_locals_dict_table[] = { { MP_ROM_QSTR(MP_QSTR_loader), MP_ROM_PTR(&mod_TrezorUi_Display_loader_obj) }, { MP_ROM_QSTR(MP_QSTR_orientation), MP_ROM_PTR(&mod_TrezorUi_Display_orientation_obj) }, { MP_ROM_QSTR(MP_QSTR_backlight), MP_ROM_PTR(&mod_TrezorUi_Display_backlight_obj) }, + { MP_ROM_QSTR(MP_QSTR_offset), MP_ROM_PTR(&mod_TrezorUi_Display_offset_obj) }, { MP_ROM_QSTR(MP_QSTR_raw), MP_ROM_PTR(&mod_TrezorUi_Display_raw_obj) }, { MP_ROM_QSTR(MP_QSTR_save), MP_ROM_PTR(&mod_TrezorUi_Display_save_obj) }, { MP_ROM_QSTR(MP_QSTR_FONT_MONO), MP_OBJ_NEW_SMALL_INT(FONT_MONO) }, diff --git a/mocks/trezor/crypto/.mock-generated b/mocks/trezor/crypto/.mock-generated deleted file mode 100644 index e69de29b..00000000 diff --git a/mocks/trezor/crypto/__init__.py b/mocks/trezor/crypto/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/mocks/trezor/msg.py b/mocks/trezor/msg.py index 7b175195..251fb33e 100644 --- a/mocks/trezor/msg.py +++ b/mocks/trezor/msg.py @@ -1,12 +1,18 @@ # ../extmod/modtrezormsg/modtrezormsg.c -def setup(ifaces: list) -> None: +def set_interfaces(ifaces: list/tuple) -> None: ''' - Configures USB interfaces with a list of tuples (interface_number, usage_page) + Configures USB interfaces with a list/tuple of (usage_page, ...) ''' # ../extmod/modtrezormsg/modtrezormsg.c -def send(iface: int, message: bytes) -> int: +def get_interfaces() -> tuple: + ''' + Reads a tuple (of usage pages) of configured USB interfaces + ''' + +# ../extmod/modtrezormsg/modtrezormsg.c +def send(usage_page: int, message: bytes) -> int: ''' Sends message using USB HID (device) or UDP (emulator). ''' diff --git a/mocks/trezor/ui/display.py b/mocks/trezor/ui/display.py index 5e514182..94bf908f 100644 --- a/mocks/trezor/ui/display.py +++ b/mocks/trezor/ui/display.py @@ -85,7 +85,7 @@ def loader(progress: int, fgcolor: int, bgcolor: int, icon: bytes=None, iconfgco Renders a rotating loader graphic. Progress determines its position (0-1000), fgcolor is used as foreground color, bgcolor as background. When icon and iconfgcolor are provided, an icon is drawn in the middle using the color specified in iconfgcolor. - Icon needs to be of exaclty 96x96 pixels size. + Icon needs to be of exactly LOADER_ICON_SIZE x LOADER_ICON_SIZE pixels size. ''' # ../extmod/modtrezorui/modtrezorui-display.h @@ -103,6 +103,13 @@ def backlight(val: int=None) -> int: Call without the val parameter to just perform the read of the value. ''' +# ../extmod/modtrezorui/modtrezorui-display.h +def offset(xy: tuple=None) -> tuple: + ''' + Sets offset (x, y) for all subsequent drawing calls. + Call without the xy parameter to just perform the read of the value. + ''' + # ../extmod/modtrezorui/modtrezorui-display.h def raw(reg: int, data: bytes) -> None: ''' diff --git a/mocks/trezor/utils.py b/mocks/trezor/utils.py new file mode 100644 index 00000000..211a3b36 --- /dev/null +++ b/mocks/trezor/utils.py @@ -0,0 +1,9 @@ + +# ../extmod/modtrezorutils/modtrezorutils.c +def memcpy(dst: bytearray, dst_ofs: int, + src: bytearray, src_ofs: int, + ''' + Copies at most `n` bytes from `src` at offset `src_ofs` to + `dst` at offset `dst_ofs`. Returns the number of actually + copied bytes. + '''