diff --git a/core/embed/extmod/modtrezorio/modtrezorio-flash.h b/core/embed/extmod/modtrezorio/modtrezorio-flash.h deleted file mode 100644 index 3815f1e712..0000000000 --- a/core/embed/extmod/modtrezorio/modtrezorio-flash.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * This file is part of the Trezor project, https://trezor.io/ - * - * Copyright (c) SatoshiLabs - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -#include "flash_otp.h" - -#include "embed/extmod/trezorobj.h" - -/// package: trezorio.__init__ - -/// class FlashOTP: -/// """ -/// """ -typedef struct _mp_obj_FlashOTP_t { - mp_obj_base_t base; -} mp_obj_FlashOTP_t; - -/// def __init__(self) -> None: -/// """ -/// """ -STATIC mp_obj_t mod_trezorio_FlashOTP_make_new(const mp_obj_type_t *type, - size_t n_args, size_t n_kw, - const mp_obj_t *args) { - mp_arg_check_num(n_args, n_kw, 0, 0, false); - mp_obj_FlashOTP_t *o = mp_obj_malloc(mp_obj_FlashOTP_t, type); - return MP_OBJ_FROM_PTR(o); -} - -/// def write(self, block: int, offset: int, data: bytes) -> None: -/// """ -/// Writes data to OTP flash -/// """ -STATIC mp_obj_t mod_trezorio_FlashOTP_write(size_t n_args, - const mp_obj_t *args) { - uint8_t block = trezor_obj_get_uint8(args[1]); - uint8_t offset = trezor_obj_get_uint8(args[2]); - mp_buffer_info_t data = {0}; - mp_get_buffer_raise(args[3], &data, MP_BUFFER_READ); - if (sectrue != flash_otp_write(block, offset, data.buf, data.len)) { - mp_raise_ValueError("write failed"); - } - return mp_const_none; -} -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_FlashOTP_write_obj, 4, - 4, mod_trezorio_FlashOTP_write); - -/// def read(self, block: int, offset: int, data: bytearray) -> None: -/// """ -/// Reads data from OTP flash -/// """ -STATIC mp_obj_t mod_trezorio_FlashOTP_read(size_t n_args, - const mp_obj_t *args) { - uint8_t block = trezor_obj_get_uint8(args[1]); - uint8_t offset = trezor_obj_get_uint8(args[2]); - mp_buffer_info_t data = {0}; - mp_get_buffer_raise(args[3], &data, MP_BUFFER_WRITE); - if (sectrue != flash_otp_read(block, offset, data.buf, data.len)) { - mp_raise_ValueError("read failed"); - } - return mp_const_none; -} -STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mod_trezorio_FlashOTP_read_obj, 4, 4, - mod_trezorio_FlashOTP_read); - -/// def lock(self, block: int) -> None: -/// """ -/// Lock OTP flash block -/// """ -STATIC mp_obj_t mod_trezorio_FlashOTP_lock(mp_obj_t self, mp_obj_t block) { - uint8_t b = trezor_obj_get_uint8(block); - if (sectrue != flash_otp_lock(b)) { - mp_raise_ValueError("lock failed"); - } - return mp_const_none; -} -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_FlashOTP_lock_obj, - mod_trezorio_FlashOTP_lock); - -/// def is_locked(self, block: int) -> bool: -/// """ -/// Is OTP flash block locked? -/// """ -STATIC mp_obj_t mod_trezorio_FlashOTP_is_locked(mp_obj_t self, mp_obj_t block) { - uint8_t b = trezor_obj_get_uint8(block); - return (sectrue == flash_otp_is_locked(b)) ? mp_const_true : mp_const_false; -} -STATIC MP_DEFINE_CONST_FUN_OBJ_2(mod_trezorio_FlashOTP_is_locked_obj, - mod_trezorio_FlashOTP_is_locked); - -STATIC const mp_rom_map_elem_t mod_trezorio_FlashOTP_locals_dict_table[] = { - {MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&mod_trezorio_FlashOTP_read_obj)}, - {MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mod_trezorio_FlashOTP_write_obj)}, - {MP_ROM_QSTR(MP_QSTR_lock), MP_ROM_PTR(&mod_trezorio_FlashOTP_lock_obj)}, - {MP_ROM_QSTR(MP_QSTR_is_locked), - MP_ROM_PTR(&mod_trezorio_FlashOTP_is_locked_obj)}, -}; -STATIC MP_DEFINE_CONST_DICT(mod_trezorio_FlashOTP_locals_dict, - mod_trezorio_FlashOTP_locals_dict_table); - -STATIC const mp_obj_type_t mod_trezorio_FlashOTP_type = { - {&mp_type_type}, - .name = MP_QSTR_FlashOTP, - .make_new = mod_trezorio_FlashOTP_make_new, - .locals_dict = (void *)&mod_trezorio_FlashOTP_locals_dict, -}; diff --git a/core/embed/extmod/modtrezorio/modtrezorio-hid.h b/core/embed/extmod/modtrezorio/modtrezorio-hid.h index 9cf38d4894..c5dd5195d3 100644 --- a/core/embed/extmod/modtrezorio/modtrezorio-hid.h +++ b/core/embed/extmod/modtrezorio/modtrezorio-hid.h @@ -17,6 +17,8 @@ * along with this program. If not, see . */ +#include "embed/extmod/trezorobj.h" + /// package: trezorio.__init__ /// class HID: diff --git a/core/embed/extmod/modtrezorio/modtrezorio.c b/core/embed/extmod/modtrezorio/modtrezorio.c index a40ae96263..7e63a81d69 100644 --- a/core/embed/extmod/modtrezorio/modtrezorio.c +++ b/core/embed/extmod/modtrezorio/modtrezorio.c @@ -43,7 +43,6 @@ uint32_t last_touch_sample_time = 0; } // clang-format off -#include "modtrezorio-flash.h" #include "modtrezorio-hid.h" #include "modtrezorio-poll.h" #include "modtrezorio-vcp.h" @@ -114,8 +113,6 @@ STATIC const mp_rom_map_elem_t mp_module_trezorio_globals_table[] = { {MP_ROM_QSTR(MP_QSTR_BUTTON_RIGHT), MP_ROM_INT(BTN_RIGHT)}, #endif - {MP_ROM_QSTR(MP_QSTR_FlashOTP), MP_ROM_PTR(&mod_trezorio_FlashOTP_type)}, - {MP_ROM_QSTR(MP_QSTR_USB), MP_ROM_PTR(&mod_trezorio_USB_type)}, {MP_ROM_QSTR(MP_QSTR_HID), MP_ROM_PTR(&mod_trezorio_HID_type)}, {MP_ROM_QSTR(MP_QSTR_VCP), MP_ROM_PTR(&mod_trezorio_VCP_type)}, diff --git a/core/tests/production_tests/main.py b/core/tests/production_tests/main.py deleted file mode 100644 index 5a806f0ebd..0000000000 --- a/core/tests/production_tests/main.py +++ /dev/null @@ -1,190 +0,0 @@ -import trezorio as io -import trezorui as ui -import utime - -usb_vcp = io.VCP( - iface_num=0x00, - data_iface_num=0x01, - ep_in=0x01, - ep_out=0x01, - ep_cmd=0x02, -) - -usb = io.USB( - vendor_id=0x1209, - product_id=0x53C1, - release_num=0x0200, - manufacturer="SatoshiLabs", - product="TREZOR", - serial_number="000000000000000000000000", - usb21_landing=False, -) - -usb.add(usb_vcp) - -usb.open() - -d = ui.Display() -otp = io.FlashOTP() -sd = io.SDCard() -sbu = io.SBU() - - -def test_display(colors): - d.clear() - m = { - "R": 0xF800, - "G": 0x07E0, - "B": 0x001F, - "W": 0xFFFF, - } - w = 240 // len(colors) - for i, c in enumerate(colors): - c = m.get(c, 0x0000) - d.bar(i * w, 0, i * w + w, 240, c) - d.refresh() - print("OK") - - -def test_touch(v): - d.clear() - c, t = int(v[0]), int(v[1]) - deadline = utime.ticks_add(utime.ticks_us(), t * 1000000) - if c == 1: - d.bar(0, 0, 120, 120, 0xFFFF) - elif c == 2: - d.bar(120, 0, 120, 120, 0xFFFF) - elif c == 3: - d.bar(120, 120, 120, 120, 0xFFFF) - else: - d.bar(0, 120, 120, 120, 0xFFFF) - d.refresh() - r = [0, 0] - # flush all events - while io.poll([io.TOUCH], r, 10000): - pass - # wait for event - touch = False - while True: - if not touch: - if ( - io.poll([io.TOUCH], r, 10000) - and r[0] == io.TOUCH - and r[1][0] == io.TOUCH_START - ): - touch = True - else: - if ( - io.poll([io.TOUCH], r, 10000) - and r[0] == io.TOUCH - and r[1][0] == io.TOUCH_END - ): - print(f"OK {r[1][1]} {r[1][2]}") - break - if utime.ticks_us() > deadline: - print("ERROR TIMEOUT") - break - # flush all events - while io.poll([io.TOUCH], r, 10000): - pass - d.clear() - d.refresh() - - -def test_pwm(v): - d.backlight(int(v)) - d.refresh() - print("OK") - - -def test_sd(): - if sd.present(): - sd.power(True) - buf1 = bytearray(8 * 1024) - try: - sd.read(0, buf1) - except OSError: - print("ERROR READING DATA") - sd.power(False) - return - try: - sd.write(0, buf1) - except OSError: - print("ERROR WRITING DATA") - sd.power(False) - return - buf2 = bytearray(8 * 1024) - try: - sd.read(0, buf2) - except OSError: - print("ERROR READING DATA") - sd.power(False) - return - if buf1 == buf2: - print("OK") - else: - print("ERROR DATA MISMATCH") - sd.power(False) - else: - print("ERROR NOCARD") - - -def test_sbu(v): - sbu1 = v[0] == "1" - sbu2 = v[1] == "1" - sbu.set(sbu1, sbu2) - print("OK") - - -def test_otp_read(): - data = bytearray(32) - otp.read(0, 0, data) - data = bytes(data).rstrip(b"\x00\xff").decode() - print("OK", data) - - -def test_otp_write(v): - if len(v) < 32: - v = v + "\x00" * (32 - len(v)) - data = v[:32].encode() - otp.write(0, 0, data) - otp.lock(0) - print("OK") - - -d.clear() - -while True: - - try: - line = input() - - if line == "PING": - print("OK") - - elif line.startswith("DISP "): - test_display(line[5:]) - - elif line.startswith("TOUCH "): - test_touch(line[6:]) - - elif line.startswith("PWM "): - test_pwm(line[4:]) - - elif line == "SD": - test_sd() - - elif line.startswith("SBU "): - test_sbu(line[4:]) - - elif line.startswith("OTP READ"): - test_otp_read() - - elif line.startswith("OTP WRITE "): - test_otp_write(line[10:]) - - else: - print("UNKNOWN") - - except Exception as ex: - print("ERROR", ex)