mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-07-05 06:12:34 +00:00
feat(core/sdbackup): insert/eject emulator SD card
- access through DebugLink - card can be initialized with - serial_number (used for filename and later for shamir backup functionality) - capacity in bytes - manufacturer ID (used for recognition of Trezor card together with capacity) - one debug protobuf message added serial_number set to None means ejecting the card from emulator - TODO: initialize the card with preexisting data
This commit is contained in:
parent
b82e80fbf6
commit
f35ffa0c18
@ -173,7 +173,6 @@ message DebugLinkFlashErase {
|
||||
optional uint32 sector = 1;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Request: Erase the SD card
|
||||
* @start
|
||||
@ -185,6 +184,16 @@ message DebugLinkEraseSdCard {
|
||||
// if false, it will be all 0xFF bytes.
|
||||
}
|
||||
|
||||
/**
|
||||
* Request: Insert SD card into device (emulator).
|
||||
* If serial_number is not supplied, the message is interpreted as a request for ejecting a card.
|
||||
* @next Success
|
||||
*/
|
||||
message DebugLinkInsertSdCard {
|
||||
optional uint32 serial_number = 1; // mocked serial number of the card (e.g.: 1, 2, 3,...)
|
||||
optional uint32 capacity_bytes = 2; // capacity of the card in bytes
|
||||
optional uint32 manuf_ID = 3; // mocked manufacturer ID
|
||||
}
|
||||
|
||||
/**
|
||||
* Request: Start or stop tracking layout changes
|
||||
|
@ -113,7 +113,7 @@ message Features {
|
||||
Capability_Solana = 18;
|
||||
}
|
||||
optional BackupType backup_type = 31; // type of device backup (BIP-39 / SLIP-39 basic / SLIP-39 advanced)
|
||||
optional bool sd_card_present = 32; // is SD card present
|
||||
optional bool sd_card_present = 32; // is SD card inserted in the device
|
||||
optional bool sd_protection = 33; // is SD Protect enabled
|
||||
optional bool wipe_code_protection = 34; // is wipe code protection enabled
|
||||
optional bytes session_id = 35;
|
||||
|
@ -184,8 +184,9 @@ enum MessageType {
|
||||
MessageType_DebugLinkReseedRandom = 9002 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||
MessageType_DebugLinkRecordScreen = 9003 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||
MessageType_DebugLinkEraseSdCard = 9005 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||
MessageType_DebugLinkWatchLayout = 9006 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||
MessageType_DebugLinkResetDebugEvents = 9007 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||
MessageType_DebugLinkInsertSdCard = 9006 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||
MessageType_DebugLinkWatchLayout = 9007 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||
MessageType_DebugLinkResetDebugEvents = 9008 [(bitcoin_only) = true, (wire_debug_in) = true];
|
||||
|
||||
// Ethereum
|
||||
MessageType_EthereumGetPublicKey = 450 [(wire_in) = true];
|
||||
|
@ -380,6 +380,7 @@ SOURCE_UNIX = [
|
||||
'embed/unix/main.c',
|
||||
'embed/unix/main_main.c',
|
||||
'embed/unix/profile.c',
|
||||
'embed/unix/sdcard_emu_mock.c',
|
||||
'vendor/micropython/shared/runtime/gchelper_generic.c',
|
||||
'vendor/micropython/ports/unix/alloc.c',
|
||||
'vendor/micropython/ports/unix/gccollect.c',
|
||||
|
111
core/embed/extmod/modtrezorio/modtrezorio-sdcard_switcher.h
Normal file
111
core/embed/extmod/modtrezorio/modtrezorio-sdcard_switcher.h
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* 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 <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include "embed/extmod/trezorobj.h"
|
||||
#include "py/mpconfig.h"
|
||||
#include "sdcard.h"
|
||||
#include "sdcard_emu_mock.h"
|
||||
|
||||
/// package: trezorio.sdcard_switcher
|
||||
|
||||
/// def insert(
|
||||
/// card_sn: int,
|
||||
/// capacity_bytes: int | None = 122_945_536,
|
||||
/// manuf_id: int | None = 27,
|
||||
/// ) -> None:
|
||||
/// """
|
||||
/// Inserts SD card to the emulator.
|
||||
/// """
|
||||
STATIC mp_obj_t mod_trezorio_sdcard_switcher_insert(size_t n_args,
|
||||
const mp_obj_t *args,
|
||||
mp_map_t *kw_args) {
|
||||
STATIC const mp_arg_t allowed_args[] = {
|
||||
{MP_QSTR_card_sn, MP_ARG_REQUIRED | MP_ARG_INT},
|
||||
{MP_QSTR_capacity_bytes,
|
||||
MP_ARG_OBJ,
|
||||
{.u_rom_obj = MP_ROM_INT(122945536)}},
|
||||
{MP_QSTR_manuf_id, MP_ARG_OBJ, {.u_rom_obj = MP_ROM_INT(27)}},
|
||||
};
|
||||
|
||||
mp_arg_val_t vals[MP_ARRAY_SIZE(allowed_args)] = {0};
|
||||
mp_arg_parse_all(n_args, args, kw_args, MP_ARRAY_SIZE(allowed_args),
|
||||
allowed_args, vals);
|
||||
|
||||
const mp_int_t card_sn = vals[0].u_int;
|
||||
|
||||
// FIXME: default arguments should be somehow accessible by .u_rom_obj, no?
|
||||
mp_int_t capacity_bytes;
|
||||
if (vals[1].u_obj == mp_const_none) {
|
||||
/* capacity_bytes = mp_obj_get_int(vals[1].u_rom_obj); */
|
||||
capacity_bytes = 122945536;
|
||||
} else {
|
||||
capacity_bytes = mp_obj_get_int(vals[1].u_obj);
|
||||
}
|
||||
mp_int_t manuf_id;
|
||||
if (vals[2].u_obj == mp_const_none) {
|
||||
/* manuf_id = mp_obj_get_int(vals[2].u_rom_obj); */
|
||||
manuf_id = 27;
|
||||
} else {
|
||||
manuf_id = mp_obj_get_int(vals[2].u_obj);
|
||||
}
|
||||
|
||||
CHECK_PARAM_RANGE(card_sn, 1, 16)
|
||||
CHECK_PARAM_RANGE(capacity_bytes, ONE_MEBIBYTE,
|
||||
1024 * ONE_MEBIBYTE) // capacity between 1 MiB and 1 GiB
|
||||
|
||||
printf("mod_trezorio_sdcard_switcher_insert, arg: %ld, %ld, %ld\n", card_sn,
|
||||
capacity_bytes, manuf_id);
|
||||
sdcard_mock.inserted = sectrue;
|
||||
set_sdcard_mock_filename(&sdcard_mock, (int)card_sn);
|
||||
sdcard_mock.buffer = NULL;
|
||||
sdcard_mock.serial_number = card_sn;
|
||||
sdcard_mock.capacity_bytes = capacity_bytes;
|
||||
sdcard_mock.blocks = capacity_bytes / SDCARD_BLOCK_SIZE;
|
||||
sdcard_mock.manuf_ID = manuf_id;
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(mod_trezorio_sdcard_switcher_insert_obj, 1,
|
||||
mod_trezorio_sdcard_switcher_insert);
|
||||
|
||||
/// def eject() -> None:
|
||||
/// """
|
||||
/// Ejects SD card from the emulator.
|
||||
/// """
|
||||
STATIC mp_obj_t mod_trezorio_sdcard_switcher_eject() {
|
||||
sdcard_mock.inserted = secfalse;
|
||||
sdcard_mock.buffer = NULL;
|
||||
return mp_const_none;
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_0(mod_trezorio_sdcard_switcher_eject_obj,
|
||||
mod_trezorio_sdcard_switcher_eject);
|
||||
|
||||
STATIC const mp_rom_map_elem_t mod_trezorio_sdcard_switcher_globals_table[] = {
|
||||
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_sdcard_switcher)},
|
||||
{MP_ROM_QSTR(MP_QSTR_insert),
|
||||
MP_ROM_PTR(&mod_trezorio_sdcard_switcher_insert_obj)},
|
||||
{MP_ROM_QSTR(MP_QSTR_eject),
|
||||
MP_ROM_PTR(&mod_trezorio_sdcard_switcher_eject_obj)},
|
||||
};
|
||||
STATIC MP_DEFINE_CONST_DICT(mod_trezorio_sdcard_switcher_globals,
|
||||
mod_trezorio_sdcard_switcher_globals_table);
|
||||
|
||||
STATIC const mp_obj_module_t mod_trezorio_sdcard_switcher_module = {
|
||||
.base = {&mp_type_module},
|
||||
.globals = (mp_obj_dict_t *)&mod_trezorio_sdcard_switcher_globals,
|
||||
};
|
@ -54,10 +54,11 @@ bool usb_connected_previously = true;
|
||||
#ifdef USE_SD_CARD
|
||||
#include "modtrezorio-fatfs.h"
|
||||
#include "modtrezorio-sdcard.h"
|
||||
#include "modtrezorio-sdcard_switcher.h"
|
||||
#endif
|
||||
|
||||
/// package: trezorio.__init__
|
||||
/// from . import fatfs, sdcard
|
||||
/// from . import fatfs, sdcard, sdcard_switcher
|
||||
|
||||
/// POLL_READ: int # wait until interface is readable and return read data
|
||||
/// POLL_WRITE: int # wait until interface is writable
|
||||
@ -87,6 +88,7 @@ STATIC const mp_rom_map_elem_t mp_module_trezorio_globals_table[] = {
|
||||
#ifdef USE_SD_CARD
|
||||
{MP_ROM_QSTR(MP_QSTR_fatfs), MP_ROM_PTR(&mod_trezorio_fatfs_module)},
|
||||
{MP_ROM_QSTR(MP_QSTR_sdcard), MP_ROM_PTR(&mod_trezorio_sdcard_module)},
|
||||
{MP_ROM_QSTR(MP_QSTR_sdcard_switcher), MP_ROM_PTR(&mod_trezorio_sdcard_switcher_module)},
|
||||
#endif
|
||||
|
||||
#ifdef USE_TOUCH
|
||||
|
@ -18,6 +18,7 @@
|
||||
*/
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/mman.h>
|
||||
@ -26,27 +27,24 @@
|
||||
#include <unistd.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "profile.h"
|
||||
#include "sdcard.h"
|
||||
#include "sdcard_emu_mock.h"
|
||||
|
||||
#ifndef SDCARD_FILE
|
||||
#define SDCARD_FILE profile_sdcard_path()
|
||||
#endif
|
||||
|
||||
#define SDCARD_SIZE (64 * 1024 * 1024)
|
||||
#define SDCARD_FILE sdcard_mock.filename
|
||||
#define SDCARD_BUFFER sdcard_mock.buffer
|
||||
#define SDCARD_SIZE sdcard_mock.capacity_bytes
|
||||
#define SDCARD_BLOCKS (SDCARD_SIZE / SDCARD_BLOCK_SIZE)
|
||||
|
||||
static uint8_t *sdcard_buffer = NULL;
|
||||
static secbool sdcard_powered = secfalse;
|
||||
|
||||
static void sdcard_exit(void) {
|
||||
int r = munmap(sdcard_buffer, SDCARD_SIZE);
|
||||
int r = munmap(SDCARD_BUFFER, SDCARD_SIZE);
|
||||
ensure(sectrue * (r == 0), "munmap failed");
|
||||
sdcard_buffer = NULL;
|
||||
SDCARD_BUFFER = NULL;
|
||||
}
|
||||
|
||||
void sdcard_init(void) {
|
||||
if (sdcard_buffer != NULL) {
|
||||
if (SDCARD_BUFFER != NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -74,10 +72,10 @@ void sdcard_init(void) {
|
||||
void *map = mmap(0, SDCARD_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
|
||||
ensure(sectrue * (map != MAP_FAILED), "mmap failed");
|
||||
|
||||
sdcard_buffer = (uint8_t *)map;
|
||||
SDCARD_BUFFER = (uint8_t *)map;
|
||||
|
||||
if (should_clear) {
|
||||
for (int i = 0; i < SDCARD_SIZE; ++i) sdcard_buffer[i] = 0xFF;
|
||||
for (int i = 0; i < SDCARD_SIZE; ++i) SDCARD_BUFFER[i] = 0xFF;
|
||||
}
|
||||
|
||||
sdcard_powered = secfalse;
|
||||
@ -85,9 +83,12 @@ void sdcard_init(void) {
|
||||
atexit(sdcard_exit);
|
||||
}
|
||||
|
||||
secbool sdcard_is_present(void) { return sectrue; }
|
||||
secbool sdcard_is_present(void) { return sdcard_mock.inserted; }
|
||||
|
||||
secbool sdcard_power_on(void) {
|
||||
if (sdcard_mock.inserted == secfalse) {
|
||||
return secfalse;
|
||||
}
|
||||
sdcard_init();
|
||||
sdcard_powered = sectrue;
|
||||
return sectrue;
|
||||
@ -110,7 +111,7 @@ secbool sdcard_read_blocks(uint32_t *dest, uint32_t block_num,
|
||||
if (num_blocks > SDCARD_BLOCKS - block_num) {
|
||||
return secfalse;
|
||||
}
|
||||
memcpy(dest, sdcard_buffer + block_num * SDCARD_BLOCK_SIZE,
|
||||
memcpy(dest, SDCARD_BUFFER + block_num * SDCARD_BLOCK_SIZE,
|
||||
num_blocks * SDCARD_BLOCK_SIZE);
|
||||
return sectrue;
|
||||
}
|
||||
@ -126,12 +127,9 @@ secbool sdcard_write_blocks(const uint32_t *src, uint32_t block_num,
|
||||
if (num_blocks > SDCARD_BLOCKS - block_num) {
|
||||
return secfalse;
|
||||
}
|
||||
memcpy(sdcard_buffer + block_num * SDCARD_BLOCK_SIZE, src,
|
||||
memcpy(SDCARD_BUFFER + block_num * SDCARD_BLOCK_SIZE, src,
|
||||
num_blocks * SDCARD_BLOCK_SIZE);
|
||||
return sectrue;
|
||||
}
|
||||
|
||||
uint64_t __wur sdcard_get_mid(void) {
|
||||
// TODO mock
|
||||
return 0;
|
||||
}
|
||||
uint64_t __wur sdcard_get_mid(void) { return (uint64_t)sdcard_mock.manuf_ID; }
|
||||
|
@ -61,12 +61,6 @@ const char *profile_flash_path(void) {
|
||||
return _flash_path;
|
||||
}
|
||||
|
||||
const char *profile_sdcard_path(void) {
|
||||
SVAR(_sdcard_path);
|
||||
FILE_PATH(_sdcard_path, "/trezor.sdcard");
|
||||
return _sdcard_path;
|
||||
}
|
||||
|
||||
const char *profile_usb_disconnect_path(void) {
|
||||
SVAR(_disconnect_path);
|
||||
FILE_PATH(_disconnect_path, "/trezor.usb_data_disconnected");
|
||||
|
@ -32,7 +32,6 @@
|
||||
const char *profile_name(void);
|
||||
const char *profile_dir(void);
|
||||
const char *profile_flash_path(void);
|
||||
const char *profile_sdcard_path(void);
|
||||
const char *profile_usb_disconnect_path(void);
|
||||
|
||||
#endif // __TREZOR_PROFILE_H__
|
||||
|
68
core/embed/unix/sdcard_emu_mock.c
Normal file
68
core/embed/unix/sdcard_emu_mock.c
Normal file
@ -0,0 +1,68 @@
|
||||
#include "sdcard_emu_mock.h"
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "profile.h"
|
||||
#include "sdcard.h"
|
||||
|
||||
// default SD Card filename serves for unit testing logic which requires SD card
|
||||
// tests with emulator should call debuglink.insert_sdcard(...)
|
||||
#define SDCARD_FILENAME_DEFAULT PROFILE_DIR_DEFAULT "/trezor.sdcard_def"
|
||||
|
||||
// default SD card data
|
||||
SDCardMock sdcard_mock = {
|
||||
.inserted = sectrue,
|
||||
.filename = SDCARD_FILENAME_DEFAULT,
|
||||
.buffer = NULL,
|
||||
.serial_number = 1,
|
||||
.capacity_bytes = 64 * ONE_MEBIBYTE,
|
||||
.blocks = (64 * ONE_MEBIBYTE) / SDCARD_BLOCK_SIZE,
|
||||
.manuf_ID = 1,
|
||||
};
|
||||
|
||||
// "not inserted" SD card data
|
||||
/* SDCardMock sdcard_mock = { */
|
||||
/* .inserted = secfalse, */
|
||||
/* .filename = NULL, */
|
||||
/* .buffer = NULL, */
|
||||
/* .serial_number = 0, */
|
||||
/* .capacity_bytes = 0, */
|
||||
/* .blocks = 0 / SDCARD_BLOCK_SIZE, */
|
||||
/* .manuf_ID = 0, */
|
||||
/* }; */
|
||||
|
||||
void set_sdcard_mock_filename(SDCardMock *card, int serial_number) {
|
||||
if (card == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
const char *dir_path = profile_dir();
|
||||
if (dir_path == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Calculate the length needed for the new full path
|
||||
// "trezor.sdcardXX" is 15 characters, plus the directory path and null
|
||||
// terminator
|
||||
const int full_path_length =
|
||||
snprintf(NULL, 0, "%s/trezor.sdcard%02d", dir_path, serial_number) + 1;
|
||||
char *new_filename = (char *)malloc(full_path_length);
|
||||
|
||||
if (new_filename == NULL) {
|
||||
// memory allocation failure
|
||||
return;
|
||||
}
|
||||
// Construct the full path with leading zero in the filename for numbers less
|
||||
// than 10
|
||||
snprintf(new_filename, full_path_length, "%s/trezor.sdcard%02d", dir_path,
|
||||
serial_number);
|
||||
|
||||
// free the old filename
|
||||
if (card->filename != NULL &&
|
||||
strcmp(card->filename, SDCARD_FILENAME_DEFAULT) != 0) {
|
||||
free(card->filename);
|
||||
card->filename = NULL;
|
||||
}
|
||||
|
||||
card->filename = new_filename;
|
||||
}
|
25
core/embed/unix/sdcard_emu_mock.h
Normal file
25
core/embed/unix/sdcard_emu_mock.h
Normal file
@ -0,0 +1,25 @@
|
||||
#ifndef __TREZOR_SDCARD_EMULATOR_MOCK_H__
|
||||
#define __TREZOR_SDCARD_EMULATOR_MOCK_H__
|
||||
|
||||
#include <stdint.h>
|
||||
#include "secbool.h"
|
||||
|
||||
#ifndef ONE_MEBIBYTE
|
||||
#define ONE_MEBIBYTE (1024 * 1024)
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
secbool inserted;
|
||||
char *filename;
|
||||
uint8_t *buffer;
|
||||
uint32_t serial_number;
|
||||
uint32_t capacity_bytes;
|
||||
uint32_t blocks;
|
||||
uint8_t manuf_ID;
|
||||
} SDCardMock;
|
||||
|
||||
extern SDCardMock sdcard_mock;
|
||||
|
||||
void set_sdcard_mock_filename(SDCardMock *card, int serial_number);
|
||||
|
||||
#endif // __TREZOR_SDCARD_EMULATOR_MOCK_H__
|
@ -33,7 +33,7 @@ PROFILE_BASE = Path.home() / ".trezoremu"
|
||||
|
||||
TREZOR_STORAGE_FILES = (
|
||||
"trezor.flash",
|
||||
"trezor.sdcard",
|
||||
*["trezor.sdcard{:02d}".format(i) for i in range(1, 17)],
|
||||
)
|
||||
|
||||
|
||||
|
@ -190,7 +190,7 @@ class WebUSB:
|
||||
"""
|
||||
Sends message using USB WebUSB (device) or UDP (emulator).
|
||||
"""
|
||||
from . import fatfs, sdcard
|
||||
from . import fatfs, sdcard, sdcard_switcher
|
||||
POLL_READ: int # wait until interface is readable and return read data
|
||||
POLL_WRITE: int # wait until interface is writable
|
||||
TOUCH: int # interface id of the touch events
|
||||
|
19
core/mocks/generated/trezorio/sdcard_switcher.pyi
Normal file
19
core/mocks/generated/trezorio/sdcard_switcher.pyi
Normal file
@ -0,0 +1,19 @@
|
||||
from typing import *
|
||||
|
||||
|
||||
# extmod/modtrezorio/modtrezorio-sdcard_switcher.h
|
||||
def insert(
|
||||
card_sn: int,
|
||||
capacity_bytes: int | None = 122_945_536,
|
||||
manuf_id: int | None = 27,
|
||||
) -> None:
|
||||
"""
|
||||
Inserts SD card to the emulator.
|
||||
"""
|
||||
|
||||
|
||||
# extmod/modtrezorio/modtrezorio-sdcard_switcher.h
|
||||
def eject() -> None:
|
||||
"""
|
||||
Ejects SD card from the emulator.
|
||||
"""
|
@ -22,6 +22,7 @@ if __debug__:
|
||||
DebugLinkDecision,
|
||||
DebugLinkEraseSdCard,
|
||||
DebugLinkGetState,
|
||||
DebugLinkInsertSdCard,
|
||||
DebugLinkRecordScreen,
|
||||
DebugLinkReseedRandom,
|
||||
DebugLinkResetDebugEvents,
|
||||
@ -255,6 +256,21 @@ if __debug__:
|
||||
sdcard.power_off()
|
||||
return Success()
|
||||
|
||||
async def dispatch_DebugLinkInsertSdCard(msg: DebugLinkInsertSdCard) -> Success:
|
||||
from trezor import io
|
||||
|
||||
sdcard_switcher = io.sdcard_switcher # local_cache_attribute
|
||||
if msg.serial_number is None:
|
||||
sdcard_switcher.eject()
|
||||
else:
|
||||
sdcard_switcher.insert(
|
||||
msg.serial_number,
|
||||
capacity_bytes=msg.capacity_bytes,
|
||||
manuf_id=msg.manuf_ID,
|
||||
)
|
||||
|
||||
return Success()
|
||||
|
||||
def boot() -> None:
|
||||
register = workflow_handlers.register # local_cache_attribute
|
||||
|
||||
@ -263,6 +279,7 @@ if __debug__:
|
||||
register(MessageType.DebugLinkReseedRandom, dispatch_DebugLinkReseedRandom)
|
||||
register(MessageType.DebugLinkRecordScreen, dispatch_DebugLinkRecordScreen)
|
||||
register(MessageType.DebugLinkEraseSdCard, dispatch_DebugLinkEraseSdCard)
|
||||
register(MessageType.DebugLinkInsertSdCard, dispatch_DebugLinkInsertSdCard)
|
||||
register(MessageType.DebugLinkWatchLayout, dispatch_DebugLinkWatchLayout)
|
||||
register(
|
||||
MessageType.DebugLinkResetDebugEvents, dispatch_DebugLinkResetDebugEvents
|
||||
|
@ -92,8 +92,9 @@ DebugLinkLayout = 9001
|
||||
DebugLinkReseedRandom = 9002
|
||||
DebugLinkRecordScreen = 9003
|
||||
DebugLinkEraseSdCard = 9005
|
||||
DebugLinkWatchLayout = 9006
|
||||
DebugLinkResetDebugEvents = 9007
|
||||
DebugLinkInsertSdCard = 9006
|
||||
DebugLinkWatchLayout = 9007
|
||||
DebugLinkResetDebugEvents = 9008
|
||||
if not utils.BITCOIN_ONLY:
|
||||
SetU2FCounter = 63
|
||||
GetNextU2FCounter = 80
|
||||
|
@ -115,8 +115,9 @@ if TYPE_CHECKING:
|
||||
DebugLinkReseedRandom = 9002
|
||||
DebugLinkRecordScreen = 9003
|
||||
DebugLinkEraseSdCard = 9005
|
||||
DebugLinkWatchLayout = 9006
|
||||
DebugLinkResetDebugEvents = 9007
|
||||
DebugLinkInsertSdCard = 9006
|
||||
DebugLinkWatchLayout = 9007
|
||||
DebugLinkResetDebugEvents = 9008
|
||||
EthereumGetPublicKey = 450
|
||||
EthereumPublicKey = 451
|
||||
EthereumGetAddress = 56
|
||||
|
@ -2923,6 +2923,24 @@ if TYPE_CHECKING:
|
||||
def is_type_of(cls, msg: Any) -> TypeGuard["DebugLinkEraseSdCard"]:
|
||||
return isinstance(msg, cls)
|
||||
|
||||
class DebugLinkInsertSdCard(protobuf.MessageType):
|
||||
serial_number: "int | None"
|
||||
capacity_bytes: "int | None"
|
||||
manuf_ID: "int | None"
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
serial_number: "int | None" = None,
|
||||
capacity_bytes: "int | None" = None,
|
||||
manuf_ID: "int | None" = None,
|
||||
) -> None:
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def is_type_of(cls, msg: Any) -> TypeGuard["DebugLinkInsertSdCard"]:
|
||||
return isinstance(msg, cls)
|
||||
|
||||
class DebugLinkWatchLayout(protobuf.MessageType):
|
||||
watch: "bool | None"
|
||||
|
||||
|
@ -241,9 +241,10 @@ class CoreEmulator(Emulator):
|
||||
if workdir is not None:
|
||||
self.workdir = Path(workdir).resolve()
|
||||
|
||||
self.sdcard = self.profile_dir / "trezor.sdcard"
|
||||
if sdcard is not None:
|
||||
self.sdcard.write_bytes(sdcard)
|
||||
# FIXME does not work with switchable SD cards
|
||||
# self.sdcard = self.profile_dir / "trezor.sdcard"
|
||||
# if sdcard is not None:
|
||||
# self.sdcard.write_bytes(sdcard)
|
||||
|
||||
if port:
|
||||
self.port = port
|
||||
@ -274,6 +275,11 @@ class CoreEmulator(Emulator):
|
||||
+ self.extra_args
|
||||
)
|
||||
|
||||
def stop(self) -> None:
|
||||
super().stop()
|
||||
for i in range(1, 17):
|
||||
_rm_f(self.profile_dir / "trezor.sdcard{:02d}".format(i))
|
||||
|
||||
|
||||
class LegacyEmulator(Emulator):
|
||||
STORAGE_FILENAME = "emulator.img"
|
||||
|
@ -370,6 +370,7 @@ class DebugLink:
|
||||
# To be set by TrezorClientDebugLink (is not known during creation time)
|
||||
self.model: Optional[str] = None
|
||||
self.version: Tuple[int, int, int] = (0, 0, 0)
|
||||
self.is_emulator: bool = False
|
||||
|
||||
# Where screenshots are being saved
|
||||
self.screenshot_recording_dir: Optional[str] = None
|
||||
@ -739,6 +740,33 @@ class DebugLink:
|
||||
def erase_sd_card(self, format: bool = True) -> messages.Success:
|
||||
return self._call(messages.DebugLinkEraseSdCard(format=format))
|
||||
|
||||
@expect(messages.Success)
|
||||
def insert_sd_card(
|
||||
self,
|
||||
serial_number: int = 1,
|
||||
capacity_bytes: Optional[int] = None,
|
||||
manuf_ID: Optional[int] = None,
|
||||
) -> messages.Success:
|
||||
if not self.model == "T":
|
||||
raise RuntimeError("SD card not supported by this device.")
|
||||
if not self.is_emulator:
|
||||
raise RuntimeError("SD card mocking is only supported on emulator.")
|
||||
return self._call(
|
||||
messages.DebugLinkInsertSdCard(
|
||||
serial_number=serial_number,
|
||||
capacity_bytes=capacity_bytes,
|
||||
manuf_ID=manuf_ID,
|
||||
)
|
||||
)
|
||||
|
||||
@expect(messages.Success)
|
||||
def eject_sd_card(self) -> messages.Success:
|
||||
if not self.model == "T":
|
||||
raise RuntimeError("SD card not supported by this device.")
|
||||
if not self.is_emulator:
|
||||
raise RuntimeError("SD card mocking is only supported on emulator.")
|
||||
return self._call(messages.DebugLinkInsertSdCard(serial_number=None))
|
||||
|
||||
def take_t1_screenshot_if_relevant(self) -> None:
|
||||
"""Conditionally take screenshots on T1.
|
||||
|
||||
@ -976,6 +1004,7 @@ class TrezorClientDebugLink(TrezorClient):
|
||||
# and know the supported debug capabilities
|
||||
self.debug.model = self.features.model
|
||||
self.debug.version = self.version
|
||||
self.debug.is_emulator = self.is_emulator()
|
||||
|
||||
def reset_debug_features(self) -> None:
|
||||
"""Prepare the debugging client for a new testcase.
|
||||
@ -1233,6 +1262,10 @@ class TrezorClientDebugLink(TrezorClient):
|
||||
|
||||
raise RuntimeError("Unexpected call")
|
||||
|
||||
def is_emulator(self) -> bool:
|
||||
"""Check if we are connected to emulator, in contrast to hardware device."""
|
||||
return self.features.fw_vendor == "EMULATOR"
|
||||
|
||||
|
||||
@expect(messages.Success, field="message", ret_type=str)
|
||||
def load_device(
|
||||
@ -1310,7 +1343,7 @@ def record_screen(
|
||||
session_dir.mkdir(parents=True, exist_ok=True)
|
||||
return session_dir
|
||||
|
||||
if not _is_emulator(debug_client):
|
||||
if not debug_client.is_emulator():
|
||||
raise RuntimeError("Recording is only supported on emulator.")
|
||||
|
||||
if directory is None:
|
||||
@ -1329,8 +1362,3 @@ def record_screen(
|
||||
debug_client.debug.start_recording(str(current_session_dir))
|
||||
if report_func is not None:
|
||||
report_func(f"Recording started into {current_session_dir}.")
|
||||
|
||||
|
||||
def _is_emulator(debug_client: "TrezorClientDebugLink") -> bool:
|
||||
"""Check if we are connected to emulator, in contrast to hardware device."""
|
||||
return debug_client.features.fw_vendor == "EMULATOR"
|
||||
|
@ -123,8 +123,9 @@ class MessageType(IntEnum):
|
||||
DebugLinkReseedRandom = 9002
|
||||
DebugLinkRecordScreen = 9003
|
||||
DebugLinkEraseSdCard = 9005
|
||||
DebugLinkWatchLayout = 9006
|
||||
DebugLinkResetDebugEvents = 9007
|
||||
DebugLinkInsertSdCard = 9006
|
||||
DebugLinkWatchLayout = 9007
|
||||
DebugLinkResetDebugEvents = 9008
|
||||
EthereumGetPublicKey = 450
|
||||
EthereumPublicKey = 451
|
||||
EthereumGetAddress = 56
|
||||
@ -4084,8 +4085,28 @@ class DebugLinkEraseSdCard(protobuf.MessageType):
|
||||
self.format = format
|
||||
|
||||
|
||||
class DebugLinkWatchLayout(protobuf.MessageType):
|
||||
class DebugLinkInsertSdCard(protobuf.MessageType):
|
||||
MESSAGE_WIRE_TYPE = 9006
|
||||
FIELDS = {
|
||||
1: protobuf.Field("serial_number", "uint32", repeated=False, required=False, default=None),
|
||||
2: protobuf.Field("capacity_bytes", "uint32", repeated=False, required=False, default=None),
|
||||
3: protobuf.Field("manuf_ID", "uint32", repeated=False, required=False, default=None),
|
||||
}
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
*,
|
||||
serial_number: Optional["int"] = None,
|
||||
capacity_bytes: Optional["int"] = None,
|
||||
manuf_ID: Optional["int"] = None,
|
||||
) -> None:
|
||||
self.serial_number = serial_number
|
||||
self.capacity_bytes = capacity_bytes
|
||||
self.manuf_ID = manuf_ID
|
||||
|
||||
|
||||
class DebugLinkWatchLayout(protobuf.MessageType):
|
||||
MESSAGE_WIRE_TYPE = 9007
|
||||
FIELDS = {
|
||||
1: protobuf.Field("watch", "bool", repeated=False, required=False, default=None),
|
||||
}
|
||||
@ -4099,7 +4120,7 @@ class DebugLinkWatchLayout(protobuf.MessageType):
|
||||
|
||||
|
||||
class DebugLinkResetDebugEvents(protobuf.MessageType):
|
||||
MESSAGE_WIRE_TYPE = 9007
|
||||
MESSAGE_WIRE_TYPE = 9008
|
||||
|
||||
|
||||
class EosGetPublicKey(protobuf.MessageType):
|
||||
|
1
rust/trezor-client/src/messages/generated.rs
generated
1
rust/trezor-client/src/messages/generated.rs
generated
@ -77,6 +77,7 @@ trezor_message_impl! {
|
||||
DebugLinkReseedRandom => MessageType_DebugLinkReseedRandom,
|
||||
DebugLinkRecordScreen => MessageType_DebugLinkRecordScreen,
|
||||
DebugLinkEraseSdCard => MessageType_DebugLinkEraseSdCard,
|
||||
DebugLinkInsertSdCard => MessageType_DebugLinkInsertSdCard,
|
||||
DebugLinkWatchLayout => MessageType_DebugLinkWatchLayout,
|
||||
DebugLinkResetDebugEvents => MessageType_DebugLinkResetDebugEvents,
|
||||
}
|
||||
|
465
rust/trezor-client/src/protos/generated/messages.rs
generated
465
rust/trezor-client/src/protos/generated/messages.rs
generated
@ -216,10 +216,12 @@ pub enum MessageType {
|
||||
MessageType_DebugLinkRecordScreen = 9003,
|
||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkEraseSdCard)
|
||||
MessageType_DebugLinkEraseSdCard = 9005,
|
||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkInsertSdCard)
|
||||
MessageType_DebugLinkInsertSdCard = 9006,
|
||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkWatchLayout)
|
||||
MessageType_DebugLinkWatchLayout = 9006,
|
||||
MessageType_DebugLinkWatchLayout = 9007,
|
||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_DebugLinkResetDebugEvents)
|
||||
MessageType_DebugLinkResetDebugEvents = 9007,
|
||||
MessageType_DebugLinkResetDebugEvents = 9008,
|
||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EthereumGetPublicKey)
|
||||
MessageType_EthereumGetPublicKey = 450,
|
||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.MessageType.MessageType_EthereumPublicKey)
|
||||
@ -613,8 +615,9 @@ impl ::protobuf::Enum for MessageType {
|
||||
9002 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkReseedRandom),
|
||||
9003 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkRecordScreen),
|
||||
9005 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkEraseSdCard),
|
||||
9006 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkWatchLayout),
|
||||
9007 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkResetDebugEvents),
|
||||
9006 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkInsertSdCard),
|
||||
9007 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkWatchLayout),
|
||||
9008 => ::std::option::Option::Some(MessageType::MessageType_DebugLinkResetDebugEvents),
|
||||
450 => ::std::option::Option::Some(MessageType::MessageType_EthereumGetPublicKey),
|
||||
451 => ::std::option::Option::Some(MessageType::MessageType_EthereumPublicKey),
|
||||
56 => ::std::option::Option::Some(MessageType::MessageType_EthereumGetAddress),
|
||||
@ -859,6 +862,7 @@ impl ::protobuf::Enum for MessageType {
|
||||
"MessageType_DebugLinkReseedRandom" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkReseedRandom),
|
||||
"MessageType_DebugLinkRecordScreen" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkRecordScreen),
|
||||
"MessageType_DebugLinkEraseSdCard" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkEraseSdCard),
|
||||
"MessageType_DebugLinkInsertSdCard" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkInsertSdCard),
|
||||
"MessageType_DebugLinkWatchLayout" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkWatchLayout),
|
||||
"MessageType_DebugLinkResetDebugEvents" => ::std::option::Option::Some(MessageType::MessageType_DebugLinkResetDebugEvents),
|
||||
"MessageType_EthereumGetPublicKey" => ::std::option::Option::Some(MessageType::MessageType_EthereumGetPublicKey),
|
||||
@ -1104,6 +1108,7 @@ impl ::protobuf::Enum for MessageType {
|
||||
MessageType::MessageType_DebugLinkReseedRandom,
|
||||
MessageType::MessageType_DebugLinkRecordScreen,
|
||||
MessageType::MessageType_DebugLinkEraseSdCard,
|
||||
MessageType::MessageType_DebugLinkInsertSdCard,
|
||||
MessageType::MessageType_DebugLinkWatchLayout,
|
||||
MessageType::MessageType_DebugLinkResetDebugEvents,
|
||||
MessageType::MessageType_EthereumGetPublicKey,
|
||||
@ -1355,152 +1360,153 @@ impl ::protobuf::EnumFull for MessageType {
|
||||
MessageType::MessageType_DebugLinkReseedRandom => 91,
|
||||
MessageType::MessageType_DebugLinkRecordScreen => 92,
|
||||
MessageType::MessageType_DebugLinkEraseSdCard => 93,
|
||||
MessageType::MessageType_DebugLinkWatchLayout => 94,
|
||||
MessageType::MessageType_DebugLinkResetDebugEvents => 95,
|
||||
MessageType::MessageType_EthereumGetPublicKey => 96,
|
||||
MessageType::MessageType_EthereumPublicKey => 97,
|
||||
MessageType::MessageType_EthereumGetAddress => 98,
|
||||
MessageType::MessageType_EthereumAddress => 99,
|
||||
MessageType::MessageType_EthereumSignTx => 100,
|
||||
MessageType::MessageType_EthereumSignTxEIP1559 => 101,
|
||||
MessageType::MessageType_EthereumTxRequest => 102,
|
||||
MessageType::MessageType_EthereumTxAck => 103,
|
||||
MessageType::MessageType_EthereumSignMessage => 104,
|
||||
MessageType::MessageType_EthereumVerifyMessage => 105,
|
||||
MessageType::MessageType_EthereumMessageSignature => 106,
|
||||
MessageType::MessageType_EthereumSignTypedData => 107,
|
||||
MessageType::MessageType_EthereumTypedDataStructRequest => 108,
|
||||
MessageType::MessageType_EthereumTypedDataStructAck => 109,
|
||||
MessageType::MessageType_EthereumTypedDataValueRequest => 110,
|
||||
MessageType::MessageType_EthereumTypedDataValueAck => 111,
|
||||
MessageType::MessageType_EthereumTypedDataSignature => 112,
|
||||
MessageType::MessageType_EthereumSignTypedHash => 113,
|
||||
MessageType::MessageType_NEMGetAddress => 114,
|
||||
MessageType::MessageType_NEMAddress => 115,
|
||||
MessageType::MessageType_NEMSignTx => 116,
|
||||
MessageType::MessageType_NEMSignedTx => 117,
|
||||
MessageType::MessageType_NEMDecryptMessage => 118,
|
||||
MessageType::MessageType_NEMDecryptedMessage => 119,
|
||||
MessageType::MessageType_TezosGetAddress => 120,
|
||||
MessageType::MessageType_TezosAddress => 121,
|
||||
MessageType::MessageType_TezosSignTx => 122,
|
||||
MessageType::MessageType_TezosSignedTx => 123,
|
||||
MessageType::MessageType_TezosGetPublicKey => 124,
|
||||
MessageType::MessageType_TezosPublicKey => 125,
|
||||
MessageType::MessageType_StellarSignTx => 126,
|
||||
MessageType::MessageType_StellarTxOpRequest => 127,
|
||||
MessageType::MessageType_StellarGetAddress => 128,
|
||||
MessageType::MessageType_StellarAddress => 129,
|
||||
MessageType::MessageType_StellarCreateAccountOp => 130,
|
||||
MessageType::MessageType_StellarPaymentOp => 131,
|
||||
MessageType::MessageType_StellarPathPaymentStrictReceiveOp => 132,
|
||||
MessageType::MessageType_StellarManageSellOfferOp => 133,
|
||||
MessageType::MessageType_StellarCreatePassiveSellOfferOp => 134,
|
||||
MessageType::MessageType_StellarSetOptionsOp => 135,
|
||||
MessageType::MessageType_StellarChangeTrustOp => 136,
|
||||
MessageType::MessageType_StellarAllowTrustOp => 137,
|
||||
MessageType::MessageType_StellarAccountMergeOp => 138,
|
||||
MessageType::MessageType_StellarManageDataOp => 139,
|
||||
MessageType::MessageType_StellarBumpSequenceOp => 140,
|
||||
MessageType::MessageType_StellarManageBuyOfferOp => 141,
|
||||
MessageType::MessageType_StellarPathPaymentStrictSendOp => 142,
|
||||
MessageType::MessageType_StellarClaimClaimableBalanceOp => 143,
|
||||
MessageType::MessageType_StellarSignedTx => 144,
|
||||
MessageType::MessageType_CardanoGetPublicKey => 145,
|
||||
MessageType::MessageType_CardanoPublicKey => 146,
|
||||
MessageType::MessageType_CardanoGetAddress => 147,
|
||||
MessageType::MessageType_CardanoAddress => 148,
|
||||
MessageType::MessageType_CardanoTxItemAck => 149,
|
||||
MessageType::MessageType_CardanoTxAuxiliaryDataSupplement => 150,
|
||||
MessageType::MessageType_CardanoTxWitnessRequest => 151,
|
||||
MessageType::MessageType_CardanoTxWitnessResponse => 152,
|
||||
MessageType::MessageType_CardanoTxHostAck => 153,
|
||||
MessageType::MessageType_CardanoTxBodyHash => 154,
|
||||
MessageType::MessageType_CardanoSignTxFinished => 155,
|
||||
MessageType::MessageType_CardanoSignTxInit => 156,
|
||||
MessageType::MessageType_CardanoTxInput => 157,
|
||||
MessageType::MessageType_CardanoTxOutput => 158,
|
||||
MessageType::MessageType_CardanoAssetGroup => 159,
|
||||
MessageType::MessageType_CardanoToken => 160,
|
||||
MessageType::MessageType_CardanoTxCertificate => 161,
|
||||
MessageType::MessageType_CardanoTxWithdrawal => 162,
|
||||
MessageType::MessageType_CardanoTxAuxiliaryData => 163,
|
||||
MessageType::MessageType_CardanoPoolOwner => 164,
|
||||
MessageType::MessageType_CardanoPoolRelayParameters => 165,
|
||||
MessageType::MessageType_CardanoGetNativeScriptHash => 166,
|
||||
MessageType::MessageType_CardanoNativeScriptHash => 167,
|
||||
MessageType::MessageType_CardanoTxMint => 168,
|
||||
MessageType::MessageType_CardanoTxCollateralInput => 169,
|
||||
MessageType::MessageType_CardanoTxRequiredSigner => 170,
|
||||
MessageType::MessageType_CardanoTxInlineDatumChunk => 171,
|
||||
MessageType::MessageType_CardanoTxReferenceScriptChunk => 172,
|
||||
MessageType::MessageType_CardanoTxReferenceInput => 173,
|
||||
MessageType::MessageType_RippleGetAddress => 174,
|
||||
MessageType::MessageType_RippleAddress => 175,
|
||||
MessageType::MessageType_RippleSignTx => 176,
|
||||
MessageType::MessageType_RippleSignedTx => 177,
|
||||
MessageType::MessageType_MoneroTransactionInitRequest => 178,
|
||||
MessageType::MessageType_MoneroTransactionInitAck => 179,
|
||||
MessageType::MessageType_MoneroTransactionSetInputRequest => 180,
|
||||
MessageType::MessageType_MoneroTransactionSetInputAck => 181,
|
||||
MessageType::MessageType_MoneroTransactionInputViniRequest => 182,
|
||||
MessageType::MessageType_MoneroTransactionInputViniAck => 183,
|
||||
MessageType::MessageType_MoneroTransactionAllInputsSetRequest => 184,
|
||||
MessageType::MessageType_MoneroTransactionAllInputsSetAck => 185,
|
||||
MessageType::MessageType_MoneroTransactionSetOutputRequest => 186,
|
||||
MessageType::MessageType_MoneroTransactionSetOutputAck => 187,
|
||||
MessageType::MessageType_MoneroTransactionAllOutSetRequest => 188,
|
||||
MessageType::MessageType_MoneroTransactionAllOutSetAck => 189,
|
||||
MessageType::MessageType_MoneroTransactionSignInputRequest => 190,
|
||||
MessageType::MessageType_MoneroTransactionSignInputAck => 191,
|
||||
MessageType::MessageType_MoneroTransactionFinalRequest => 192,
|
||||
MessageType::MessageType_MoneroTransactionFinalAck => 193,
|
||||
MessageType::MessageType_MoneroKeyImageExportInitRequest => 194,
|
||||
MessageType::MessageType_MoneroKeyImageExportInitAck => 195,
|
||||
MessageType::MessageType_MoneroKeyImageSyncStepRequest => 196,
|
||||
MessageType::MessageType_MoneroKeyImageSyncStepAck => 197,
|
||||
MessageType::MessageType_MoneroKeyImageSyncFinalRequest => 198,
|
||||
MessageType::MessageType_MoneroKeyImageSyncFinalAck => 199,
|
||||
MessageType::MessageType_MoneroGetAddress => 200,
|
||||
MessageType::MessageType_MoneroAddress => 201,
|
||||
MessageType::MessageType_MoneroGetWatchKey => 202,
|
||||
MessageType::MessageType_MoneroWatchKey => 203,
|
||||
MessageType::MessageType_DebugMoneroDiagRequest => 204,
|
||||
MessageType::MessageType_DebugMoneroDiagAck => 205,
|
||||
MessageType::MessageType_MoneroGetTxKeyRequest => 206,
|
||||
MessageType::MessageType_MoneroGetTxKeyAck => 207,
|
||||
MessageType::MessageType_MoneroLiveRefreshStartRequest => 208,
|
||||
MessageType::MessageType_MoneroLiveRefreshStartAck => 209,
|
||||
MessageType::MessageType_MoneroLiveRefreshStepRequest => 210,
|
||||
MessageType::MessageType_MoneroLiveRefreshStepAck => 211,
|
||||
MessageType::MessageType_MoneroLiveRefreshFinalRequest => 212,
|
||||
MessageType::MessageType_MoneroLiveRefreshFinalAck => 213,
|
||||
MessageType::MessageType_EosGetPublicKey => 214,
|
||||
MessageType::MessageType_EosPublicKey => 215,
|
||||
MessageType::MessageType_EosSignTx => 216,
|
||||
MessageType::MessageType_EosTxActionRequest => 217,
|
||||
MessageType::MessageType_EosTxActionAck => 218,
|
||||
MessageType::MessageType_EosSignedTx => 219,
|
||||
MessageType::MessageType_BinanceGetAddress => 220,
|
||||
MessageType::MessageType_BinanceAddress => 221,
|
||||
MessageType::MessageType_BinanceGetPublicKey => 222,
|
||||
MessageType::MessageType_BinancePublicKey => 223,
|
||||
MessageType::MessageType_BinanceSignTx => 224,
|
||||
MessageType::MessageType_BinanceTxRequest => 225,
|
||||
MessageType::MessageType_BinanceTransferMsg => 226,
|
||||
MessageType::MessageType_BinanceOrderMsg => 227,
|
||||
MessageType::MessageType_BinanceCancelMsg => 228,
|
||||
MessageType::MessageType_BinanceSignedTx => 229,
|
||||
MessageType::MessageType_WebAuthnListResidentCredentials => 230,
|
||||
MessageType::MessageType_WebAuthnCredentials => 231,
|
||||
MessageType::MessageType_WebAuthnAddResidentCredential => 232,
|
||||
MessageType::MessageType_WebAuthnRemoveResidentCredential => 233,
|
||||
MessageType::MessageType_SolanaGetPublicKey => 234,
|
||||
MessageType::MessageType_SolanaPublicKey => 235,
|
||||
MessageType::MessageType_SolanaGetAddress => 236,
|
||||
MessageType::MessageType_SolanaAddress => 237,
|
||||
MessageType::MessageType_SolanaSignTx => 238,
|
||||
MessageType::MessageType_SolanaTxSignature => 239,
|
||||
MessageType::MessageType_DebugLinkInsertSdCard => 94,
|
||||
MessageType::MessageType_DebugLinkWatchLayout => 95,
|
||||
MessageType::MessageType_DebugLinkResetDebugEvents => 96,
|
||||
MessageType::MessageType_EthereumGetPublicKey => 97,
|
||||
MessageType::MessageType_EthereumPublicKey => 98,
|
||||
MessageType::MessageType_EthereumGetAddress => 99,
|
||||
MessageType::MessageType_EthereumAddress => 100,
|
||||
MessageType::MessageType_EthereumSignTx => 101,
|
||||
MessageType::MessageType_EthereumSignTxEIP1559 => 102,
|
||||
MessageType::MessageType_EthereumTxRequest => 103,
|
||||
MessageType::MessageType_EthereumTxAck => 104,
|
||||
MessageType::MessageType_EthereumSignMessage => 105,
|
||||
MessageType::MessageType_EthereumVerifyMessage => 106,
|
||||
MessageType::MessageType_EthereumMessageSignature => 107,
|
||||
MessageType::MessageType_EthereumSignTypedData => 108,
|
||||
MessageType::MessageType_EthereumTypedDataStructRequest => 109,
|
||||
MessageType::MessageType_EthereumTypedDataStructAck => 110,
|
||||
MessageType::MessageType_EthereumTypedDataValueRequest => 111,
|
||||
MessageType::MessageType_EthereumTypedDataValueAck => 112,
|
||||
MessageType::MessageType_EthereumTypedDataSignature => 113,
|
||||
MessageType::MessageType_EthereumSignTypedHash => 114,
|
||||
MessageType::MessageType_NEMGetAddress => 115,
|
||||
MessageType::MessageType_NEMAddress => 116,
|
||||
MessageType::MessageType_NEMSignTx => 117,
|
||||
MessageType::MessageType_NEMSignedTx => 118,
|
||||
MessageType::MessageType_NEMDecryptMessage => 119,
|
||||
MessageType::MessageType_NEMDecryptedMessage => 120,
|
||||
MessageType::MessageType_TezosGetAddress => 121,
|
||||
MessageType::MessageType_TezosAddress => 122,
|
||||
MessageType::MessageType_TezosSignTx => 123,
|
||||
MessageType::MessageType_TezosSignedTx => 124,
|
||||
MessageType::MessageType_TezosGetPublicKey => 125,
|
||||
MessageType::MessageType_TezosPublicKey => 126,
|
||||
MessageType::MessageType_StellarSignTx => 127,
|
||||
MessageType::MessageType_StellarTxOpRequest => 128,
|
||||
MessageType::MessageType_StellarGetAddress => 129,
|
||||
MessageType::MessageType_StellarAddress => 130,
|
||||
MessageType::MessageType_StellarCreateAccountOp => 131,
|
||||
MessageType::MessageType_StellarPaymentOp => 132,
|
||||
MessageType::MessageType_StellarPathPaymentStrictReceiveOp => 133,
|
||||
MessageType::MessageType_StellarManageSellOfferOp => 134,
|
||||
MessageType::MessageType_StellarCreatePassiveSellOfferOp => 135,
|
||||
MessageType::MessageType_StellarSetOptionsOp => 136,
|
||||
MessageType::MessageType_StellarChangeTrustOp => 137,
|
||||
MessageType::MessageType_StellarAllowTrustOp => 138,
|
||||
MessageType::MessageType_StellarAccountMergeOp => 139,
|
||||
MessageType::MessageType_StellarManageDataOp => 140,
|
||||
MessageType::MessageType_StellarBumpSequenceOp => 141,
|
||||
MessageType::MessageType_StellarManageBuyOfferOp => 142,
|
||||
MessageType::MessageType_StellarPathPaymentStrictSendOp => 143,
|
||||
MessageType::MessageType_StellarClaimClaimableBalanceOp => 144,
|
||||
MessageType::MessageType_StellarSignedTx => 145,
|
||||
MessageType::MessageType_CardanoGetPublicKey => 146,
|
||||
MessageType::MessageType_CardanoPublicKey => 147,
|
||||
MessageType::MessageType_CardanoGetAddress => 148,
|
||||
MessageType::MessageType_CardanoAddress => 149,
|
||||
MessageType::MessageType_CardanoTxItemAck => 150,
|
||||
MessageType::MessageType_CardanoTxAuxiliaryDataSupplement => 151,
|
||||
MessageType::MessageType_CardanoTxWitnessRequest => 152,
|
||||
MessageType::MessageType_CardanoTxWitnessResponse => 153,
|
||||
MessageType::MessageType_CardanoTxHostAck => 154,
|
||||
MessageType::MessageType_CardanoTxBodyHash => 155,
|
||||
MessageType::MessageType_CardanoSignTxFinished => 156,
|
||||
MessageType::MessageType_CardanoSignTxInit => 157,
|
||||
MessageType::MessageType_CardanoTxInput => 158,
|
||||
MessageType::MessageType_CardanoTxOutput => 159,
|
||||
MessageType::MessageType_CardanoAssetGroup => 160,
|
||||
MessageType::MessageType_CardanoToken => 161,
|
||||
MessageType::MessageType_CardanoTxCertificate => 162,
|
||||
MessageType::MessageType_CardanoTxWithdrawal => 163,
|
||||
MessageType::MessageType_CardanoTxAuxiliaryData => 164,
|
||||
MessageType::MessageType_CardanoPoolOwner => 165,
|
||||
MessageType::MessageType_CardanoPoolRelayParameters => 166,
|
||||
MessageType::MessageType_CardanoGetNativeScriptHash => 167,
|
||||
MessageType::MessageType_CardanoNativeScriptHash => 168,
|
||||
MessageType::MessageType_CardanoTxMint => 169,
|
||||
MessageType::MessageType_CardanoTxCollateralInput => 170,
|
||||
MessageType::MessageType_CardanoTxRequiredSigner => 171,
|
||||
MessageType::MessageType_CardanoTxInlineDatumChunk => 172,
|
||||
MessageType::MessageType_CardanoTxReferenceScriptChunk => 173,
|
||||
MessageType::MessageType_CardanoTxReferenceInput => 174,
|
||||
MessageType::MessageType_RippleGetAddress => 175,
|
||||
MessageType::MessageType_RippleAddress => 176,
|
||||
MessageType::MessageType_RippleSignTx => 177,
|
||||
MessageType::MessageType_RippleSignedTx => 178,
|
||||
MessageType::MessageType_MoneroTransactionInitRequest => 179,
|
||||
MessageType::MessageType_MoneroTransactionInitAck => 180,
|
||||
MessageType::MessageType_MoneroTransactionSetInputRequest => 181,
|
||||
MessageType::MessageType_MoneroTransactionSetInputAck => 182,
|
||||
MessageType::MessageType_MoneroTransactionInputViniRequest => 183,
|
||||
MessageType::MessageType_MoneroTransactionInputViniAck => 184,
|
||||
MessageType::MessageType_MoneroTransactionAllInputsSetRequest => 185,
|
||||
MessageType::MessageType_MoneroTransactionAllInputsSetAck => 186,
|
||||
MessageType::MessageType_MoneroTransactionSetOutputRequest => 187,
|
||||
MessageType::MessageType_MoneroTransactionSetOutputAck => 188,
|
||||
MessageType::MessageType_MoneroTransactionAllOutSetRequest => 189,
|
||||
MessageType::MessageType_MoneroTransactionAllOutSetAck => 190,
|
||||
MessageType::MessageType_MoneroTransactionSignInputRequest => 191,
|
||||
MessageType::MessageType_MoneroTransactionSignInputAck => 192,
|
||||
MessageType::MessageType_MoneroTransactionFinalRequest => 193,
|
||||
MessageType::MessageType_MoneroTransactionFinalAck => 194,
|
||||
MessageType::MessageType_MoneroKeyImageExportInitRequest => 195,
|
||||
MessageType::MessageType_MoneroKeyImageExportInitAck => 196,
|
||||
MessageType::MessageType_MoneroKeyImageSyncStepRequest => 197,
|
||||
MessageType::MessageType_MoneroKeyImageSyncStepAck => 198,
|
||||
MessageType::MessageType_MoneroKeyImageSyncFinalRequest => 199,
|
||||
MessageType::MessageType_MoneroKeyImageSyncFinalAck => 200,
|
||||
MessageType::MessageType_MoneroGetAddress => 201,
|
||||
MessageType::MessageType_MoneroAddress => 202,
|
||||
MessageType::MessageType_MoneroGetWatchKey => 203,
|
||||
MessageType::MessageType_MoneroWatchKey => 204,
|
||||
MessageType::MessageType_DebugMoneroDiagRequest => 205,
|
||||
MessageType::MessageType_DebugMoneroDiagAck => 206,
|
||||
MessageType::MessageType_MoneroGetTxKeyRequest => 207,
|
||||
MessageType::MessageType_MoneroGetTxKeyAck => 208,
|
||||
MessageType::MessageType_MoneroLiveRefreshStartRequest => 209,
|
||||
MessageType::MessageType_MoneroLiveRefreshStartAck => 210,
|
||||
MessageType::MessageType_MoneroLiveRefreshStepRequest => 211,
|
||||
MessageType::MessageType_MoneroLiveRefreshStepAck => 212,
|
||||
MessageType::MessageType_MoneroLiveRefreshFinalRequest => 213,
|
||||
MessageType::MessageType_MoneroLiveRefreshFinalAck => 214,
|
||||
MessageType::MessageType_EosGetPublicKey => 215,
|
||||
MessageType::MessageType_EosPublicKey => 216,
|
||||
MessageType::MessageType_EosSignTx => 217,
|
||||
MessageType::MessageType_EosTxActionRequest => 218,
|
||||
MessageType::MessageType_EosTxActionAck => 219,
|
||||
MessageType::MessageType_EosSignedTx => 220,
|
||||
MessageType::MessageType_BinanceGetAddress => 221,
|
||||
MessageType::MessageType_BinanceAddress => 222,
|
||||
MessageType::MessageType_BinanceGetPublicKey => 223,
|
||||
MessageType::MessageType_BinancePublicKey => 224,
|
||||
MessageType::MessageType_BinanceSignTx => 225,
|
||||
MessageType::MessageType_BinanceTxRequest => 226,
|
||||
MessageType::MessageType_BinanceTransferMsg => 227,
|
||||
MessageType::MessageType_BinanceOrderMsg => 228,
|
||||
MessageType::MessageType_BinanceCancelMsg => 229,
|
||||
MessageType::MessageType_BinanceSignedTx => 230,
|
||||
MessageType::MessageType_WebAuthnListResidentCredentials => 231,
|
||||
MessageType::MessageType_WebAuthnCredentials => 232,
|
||||
MessageType::MessageType_WebAuthnAddResidentCredential => 233,
|
||||
MessageType::MessageType_WebAuthnRemoveResidentCredential => 234,
|
||||
MessageType::MessageType_SolanaGetPublicKey => 235,
|
||||
MessageType::MessageType_SolanaPublicKey => 236,
|
||||
MessageType::MessageType_SolanaGetAddress => 237,
|
||||
MessageType::MessageType_SolanaAddress => 238,
|
||||
MessageType::MessageType_SolanaSignTx => 239,
|
||||
MessageType::MessageType_SolanaTxSignature => 240,
|
||||
};
|
||||
Self::enum_descriptor().value_by_index(index)
|
||||
}
|
||||
@ -1550,7 +1556,7 @@ pub mod exts {
|
||||
|
||||
static file_descriptor_proto_data: &'static [u8] = b"\
|
||||
\n\x0emessages.proto\x12\x12hw.trezor.messages\x1a\x20google/protobuf/de\
|
||||
scriptor.proto*\x8bS\n\x0bMessageType\x12(\n\x16MessageType_Initialize\
|
||||
scriptor.proto*\xbdS\n\x0bMessageType\x12(\n\x16MessageType_Initialize\
|
||||
\x10\0\x1a\x0c\x80\xa6\x1d\x01\xb0\xb5\x18\x01\x90\xb5\x18\x01\x12\x1e\n\
|
||||
\x10MessageType_Ping\x10\x01\x1a\x08\x80\xa6\x1d\x01\x90\xb5\x18\x01\x12\
|
||||
%\n\x13MessageType_Success\x10\x02\x1a\x0c\x80\xa6\x1d\x01\xa8\xb5\x18\
|
||||
@ -1661,84 +1667,85 @@ static file_descriptor_proto_data: &'static [u8] = b"\
|
||||
\x120\n!MessageType_DebugLinkReseedRandom\x10\xaaF\x1a\x08\x80\xa6\x1d\
|
||||
\x01\xa0\xb5\x18\x01\x120\n!MessageType_DebugLinkRecordScreen\x10\xabF\
|
||||
\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x20MessageType_DebugLink\
|
||||
EraseSdCard\x10\xadF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12/\n\x20M\
|
||||
essageType_DebugLinkWatchLayout\x10\xaeF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\
|
||||
\x18\x01\x124\n%MessageType_DebugLinkResetDebugEvents\x10\xafF\x1a\x08\
|
||||
\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12+\n\x20MessageType_EthereumGetPublic\
|
||||
Key\x10\xc2\x03\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_EthereumPu\
|
||||
blicKey\x10\xc3\x03\x1a\x04\x98\xb5\x18\x01\x12(\n\x1eMessageType_Ethere\
|
||||
umGetAddress\x108\x1a\x04\x90\xb5\x18\x01\x12%\n\x1bMessageType_Ethereum\
|
||||
Address\x109\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessageType_EthereumSignT\
|
||||
x\x10:\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_EthereumSignTxEIP1559\
|
||||
\x10\xc4\x03\x1a\x04\x90\xb5\x18\x01\x12'\n\x1dMessageType_EthereumTxReq\
|
||||
uest\x10;\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType_EthereumTxAck\
|
||||
\x10<\x1a\x04\x90\xb5\x18\x01\x12)\n\x1fMessageType_EthereumSignMessage\
|
||||
\x10@\x1a\x04\x90\xb5\x18\x01\x12+\n!MessageType_EthereumVerifyMessage\
|
||||
\x10A\x1a\x04\x90\xb5\x18\x01\x12.\n$MessageType_EthereumMessageSignatur\
|
||||
e\x10B\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedData\
|
||||
\x10\xd0\x03\x1a\x04\x90\xb5\x18\x01\x125\n*MessageType_EthereumTypedDat\
|
||||
aStructRequest\x10\xd1\x03\x1a\x04\x98\xb5\x18\x01\x121\n&MessageType_Et\
|
||||
hereumTypedDataStructAck\x10\xd2\x03\x1a\x04\x90\xb5\x18\x01\x124\n)Mess\
|
||||
ageType_EthereumTypedDataValueRequest\x10\xd3\x03\x1a\x04\x98\xb5\x18\
|
||||
\x01\x120\n%MessageType_EthereumTypedDataValueAck\x10\xd4\x03\x1a\x04\
|
||||
\x90\xb5\x18\x01\x121\n&MessageType_EthereumTypedDataSignature\x10\xd5\
|
||||
\x03\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTypedHash\
|
||||
\x10\xd6\x03\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_NEMGetAddress\
|
||||
\x10C\x1a\x04\x90\xb5\x18\x01\x12\x20\n\x16MessageType_NEMAddress\x10D\
|
||||
\x1a\x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType_NEMSignTx\x10E\x1a\x04\
|
||||
\x90\xb5\x18\x01\x12!\n\x17MessageType_NEMSignedTx\x10F\x1a\x04\x98\xb5\
|
||||
\x18\x01\x12'\n\x1dMessageType_NEMDecryptMessage\x10K\x1a\x04\x90\xb5\
|
||||
\x18\x01\x12)\n\x1fMessageType_NEMDecryptedMessage\x10L\x1a\x04\x98\xb5\
|
||||
\x18\x01\x12&\n\x1bMessageType_TezosGetAddress\x10\x96\x01\x1a\x04\x90\
|
||||
\xb5\x18\x01\x12#\n\x18MessageType_TezosAddress\x10\x97\x01\x1a\x04\x98\
|
||||
\xb5\x18\x01\x12\"\n\x17MessageType_TezosSignTx\x10\x98\x01\x1a\x04\x90\
|
||||
\xb5\x18\x01\x12$\n\x19MessageType_TezosSignedTx\x10\x99\x01\x1a\x04\x98\
|
||||
\xb5\x18\x01\x12(\n\x1dMessageType_TezosGetPublicKey\x10\x9a\x01\x1a\x04\
|
||||
\x90\xb5\x18\x01\x12%\n\x1aMessageType_TezosPublicKey\x10\x9b\x01\x1a\
|
||||
\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_StellarSignTx\x10\xca\x01\x1a\
|
||||
\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_StellarTxOpRequest\x10\xcb\
|
||||
\x01\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_StellarGetAddress\x10\
|
||||
\xcf\x01\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_StellarAddress\
|
||||
\x10\xd0\x01\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_StellarCreateAc\
|
||||
countOp\x10\xd2\x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_Stella\
|
||||
rPaymentOp\x10\xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-MessageType_Stella\
|
||||
rPathPaymentStrictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\x01\x12/\n$M\
|
||||
essageType_StellarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\xb5\x18\x01\
|
||||
\x126\n+MessageType_StellarCreatePassiveSellOfferOp\x10\xd6\x01\x1a\x04\
|
||||
\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarSetOptionsOp\x10\xd7\x01\
|
||||
\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_StellarChangeTrustOp\x10\
|
||||
\xd8\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarAllowTrust\
|
||||
Op\x10\xd9\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarAccount\
|
||||
MergeOp\x10\xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Stella\
|
||||
rManageDataOp\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_Ste\
|
||||
llarBumpSequenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n#MessageTyp\
|
||||
e_StellarManageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\x125\n*Mes\
|
||||
sageType_StellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\x90\xb5\x18\
|
||||
\x01\x125\n*MessageType_StellarClaimClaimableBalanceOp\x10\xe1\x01\x1a\
|
||||
\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_StellarSignedTx\x10\xe6\x01\
|
||||
\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPublicKey\x10\
|
||||
\xb1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_CardanoPublicKey\
|
||||
\x10\xb2\x02\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoGetAdd\
|
||||
ress\x10\xb3\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoAd\
|
||||
dress\x10\xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_CardanoT\
|
||||
xItemAck\x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_CardanoT\
|
||||
xAuxiliaryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\x12.\n#Mess\
|
||||
ageType_CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\x18\x01\x12/\
|
||||
\n$MessageType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\x98\xb5\x18\
|
||||
\x01\x12'\n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\x04\x90\xb5\
|
||||
\x18\x01\x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\x1a\x04\x98\
|
||||
\xb5\x18\x01\x12,\n!MessageType_CardanoSignTxFinished\x10\xbf\x02\x1a\
|
||||
\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\x10\xc0\x02\
|
||||
\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInput\x10\xc1\
|
||||
\x02\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOutput\x10\
|
||||
\xc2\x02\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAssetGroup\
|
||||
\x10\xc3\x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_CardanoToken\
|
||||
\x10\xc4\x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_CardanoTxCert\
|
||||
ificate\x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Cardan\
|
||||
oTxWithdrawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageType_Ca\
|
||||
rdanoTxAuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessa\
|
||||
geType_CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x121\n&Messa\
|
||||
geType_CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\x18\x01\
|
||||
EraseSdCard\x10\xadF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x120\n!Mess\
|
||||
ageType_DebugLinkInsertSdCard\x10\xaeF\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\
|
||||
\x18\x01\x12/\n\x20MessageType_DebugLinkWatchLayout\x10\xafF\x1a\x08\x80\
|
||||
\xa6\x1d\x01\xa0\xb5\x18\x01\x124\n%MessageType_DebugLinkResetDebugEvent\
|
||||
s\x10\xb0F\x1a\x08\x80\xa6\x1d\x01\xa0\xb5\x18\x01\x12+\n\x20MessageType\
|
||||
_EthereumGetPublicKey\x10\xc2\x03\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMess\
|
||||
ageType_EthereumPublicKey\x10\xc3\x03\x1a\x04\x98\xb5\x18\x01\x12(\n\x1e\
|
||||
MessageType_EthereumGetAddress\x108\x1a\x04\x90\xb5\x18\x01\x12%\n\x1bMe\
|
||||
ssageType_EthereumAddress\x109\x1a\x04\x98\xb5\x18\x01\x12$\n\x1aMessage\
|
||||
Type_EthereumSignTx\x10:\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_Ethe\
|
||||
reumSignTxEIP1559\x10\xc4\x03\x1a\x04\x90\xb5\x18\x01\x12'\n\x1dMessageT\
|
||||
ype_EthereumTxRequest\x10;\x1a\x04\x98\xb5\x18\x01\x12#\n\x19MessageType\
|
||||
_EthereumTxAck\x10<\x1a\x04\x90\xb5\x18\x01\x12)\n\x1fMessageType_Ethere\
|
||||
umSignMessage\x10@\x1a\x04\x90\xb5\x18\x01\x12+\n!MessageType_EthereumVe\
|
||||
rifyMessage\x10A\x1a\x04\x90\xb5\x18\x01\x12.\n$MessageType_EthereumMess\
|
||||
ageSignature\x10B\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSig\
|
||||
nTypedData\x10\xd0\x03\x1a\x04\x90\xb5\x18\x01\x125\n*MessageType_Ethere\
|
||||
umTypedDataStructRequest\x10\xd1\x03\x1a\x04\x98\xb5\x18\x01\x121\n&Mess\
|
||||
ageType_EthereumTypedDataStructAck\x10\xd2\x03\x1a\x04\x90\xb5\x18\x01\
|
||||
\x124\n)MessageType_EthereumTypedDataValueRequest\x10\xd3\x03\x1a\x04\
|
||||
\x98\xb5\x18\x01\x120\n%MessageType_EthereumTypedDataValueAck\x10\xd4\
|
||||
\x03\x1a\x04\x90\xb5\x18\x01\x121\n&MessageType_EthereumTypedDataSignatu\
|
||||
re\x10\xd5\x03\x1a\x04\x98\xb5\x18\x01\x12,\n!MessageType_EthereumSignTy\
|
||||
pedHash\x10\xd6\x03\x1a\x04\x90\xb5\x18\x01\x12#\n\x19MessageType_NEMGet\
|
||||
Address\x10C\x1a\x04\x90\xb5\x18\x01\x12\x20\n\x16MessageType_NEMAddress\
|
||||
\x10D\x1a\x04\x98\xb5\x18\x01\x12\x1f\n\x15MessageType_NEMSignTx\x10E\
|
||||
\x1a\x04\x90\xb5\x18\x01\x12!\n\x17MessageType_NEMSignedTx\x10F\x1a\x04\
|
||||
\x98\xb5\x18\x01\x12'\n\x1dMessageType_NEMDecryptMessage\x10K\x1a\x04\
|
||||
\x90\xb5\x18\x01\x12)\n\x1fMessageType_NEMDecryptedMessage\x10L\x1a\x04\
|
||||
\x98\xb5\x18\x01\x12&\n\x1bMessageType_TezosGetAddress\x10\x96\x01\x1a\
|
||||
\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_TezosAddress\x10\x97\x01\x1a\
|
||||
\x04\x98\xb5\x18\x01\x12\"\n\x17MessageType_TezosSignTx\x10\x98\x01\x1a\
|
||||
\x04\x90\xb5\x18\x01\x12$\n\x19MessageType_TezosSignedTx\x10\x99\x01\x1a\
|
||||
\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_TezosGetPublicKey\x10\x9a\x01\
|
||||
\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_TezosPublicKey\x10\x9b\
|
||||
\x01\x1a\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_StellarSignTx\x10\xca\
|
||||
\x01\x1a\x04\x90\xb5\x18\x01\x12)\n\x1eMessageType_StellarTxOpRequest\
|
||||
\x10\xcb\x01\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_StellarGetAdd\
|
||||
ress\x10\xcf\x01\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_StellarAd\
|
||||
dress\x10\xd0\x01\x1a\x04\x98\xb5\x18\x01\x12-\n\"MessageType_StellarCre\
|
||||
ateAccountOp\x10\xd2\x01\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_S\
|
||||
tellarPaymentOp\x10\xd3\x01\x1a\x04\x90\xb5\x18\x01\x128\n-MessageType_S\
|
||||
tellarPathPaymentStrictReceiveOp\x10\xd4\x01\x1a\x04\x90\xb5\x18\x01\x12\
|
||||
/\n$MessageType_StellarManageSellOfferOp\x10\xd5\x01\x1a\x04\x90\xb5\x18\
|
||||
\x01\x126\n+MessageType_StellarCreatePassiveSellOfferOp\x10\xd6\x01\x1a\
|
||||
\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarSetOptionsOp\x10\xd7\
|
||||
\x01\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_StellarChangeTrustOp\
|
||||
\x10\xd8\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_StellarAllowT\
|
||||
rustOp\x10\xd9\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType_StellarAcc\
|
||||
ountMergeOp\x10\xda\x01\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_St\
|
||||
ellarManageDataOp\x10\xdc\x01\x1a\x04\x90\xb5\x18\x01\x12,\n!MessageType\
|
||||
_StellarBumpSequenceOp\x10\xdd\x01\x1a\x04\x90\xb5\x18\x01\x12.\n#Messag\
|
||||
eType_StellarManageBuyOfferOp\x10\xde\x01\x1a\x04\x90\xb5\x18\x01\x125\n\
|
||||
*MessageType_StellarPathPaymentStrictSendOp\x10\xdf\x01\x1a\x04\x90\xb5\
|
||||
\x18\x01\x125\n*MessageType_StellarClaimClaimableBalanceOp\x10\xe1\x01\
|
||||
\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_StellarSignedTx\x10\xe6\
|
||||
\x01\x1a\x04\x98\xb5\x18\x01\x12*\n\x1fMessageType_CardanoGetPublicKey\
|
||||
\x10\xb1\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMessageType_CardanoPublic\
|
||||
Key\x10\xb2\x02\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoGet\
|
||||
Address\x10\xb3\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_Cardan\
|
||||
oAddress\x10\xb4\x02\x1a\x04\x98\xb5\x18\x01\x12'\n\x1cMessageType_Carda\
|
||||
noTxItemAck\x10\xb9\x02\x1a\x04\x98\xb5\x18\x01\x127\n,MessageType_Carda\
|
||||
noTxAuxiliaryDataSupplement\x10\xba\x02\x1a\x04\x98\xb5\x18\x01\x12.\n#M\
|
||||
essageType_CardanoTxWitnessRequest\x10\xbb\x02\x1a\x04\x90\xb5\x18\x01\
|
||||
\x12/\n$MessageType_CardanoTxWitnessResponse\x10\xbc\x02\x1a\x04\x98\xb5\
|
||||
\x18\x01\x12'\n\x1cMessageType_CardanoTxHostAck\x10\xbd\x02\x1a\x04\x90\
|
||||
\xb5\x18\x01\x12(\n\x1dMessageType_CardanoTxBodyHash\x10\xbe\x02\x1a\x04\
|
||||
\x98\xb5\x18\x01\x12,\n!MessageType_CardanoSignTxFinished\x10\xbf\x02\
|
||||
\x1a\x04\x98\xb5\x18\x01\x12(\n\x1dMessageType_CardanoSignTxInit\x10\xc0\
|
||||
\x02\x1a\x04\x90\xb5\x18\x01\x12%\n\x1aMessageType_CardanoTxInput\x10\
|
||||
\xc1\x02\x1a\x04\x90\xb5\x18\x01\x12&\n\x1bMessageType_CardanoTxOutput\
|
||||
\x10\xc2\x02\x1a\x04\x90\xb5\x18\x01\x12(\n\x1dMessageType_CardanoAssetG\
|
||||
roup\x10\xc3\x02\x1a\x04\x90\xb5\x18\x01\x12#\n\x18MessageType_CardanoTo\
|
||||
ken\x10\xc4\x02\x1a\x04\x90\xb5\x18\x01\x12+\n\x20MessageType_CardanoTxC\
|
||||
ertificate\x10\xc5\x02\x1a\x04\x90\xb5\x18\x01\x12*\n\x1fMessageType_Car\
|
||||
danoTxWithdrawal\x10\xc6\x02\x1a\x04\x90\xb5\x18\x01\x12-\n\"MessageType\
|
||||
_CardanoTxAuxiliaryData\x10\xc7\x02\x1a\x04\x90\xb5\x18\x01\x12'\n\x1cMe\
|
||||
ssageType_CardanoPoolOwner\x10\xc8\x02\x1a\x04\x90\xb5\x18\x01\x121\n&Me\
|
||||
ssageType_CardanoPoolRelayParameters\x10\xc9\x02\x1a\x04\x90\xb5\x18\x01\
|
||||
\x121\n&MessageType_CardanoGetNativeScriptHash\x10\xca\x02\x1a\x04\x90\
|
||||
\xb5\x18\x01\x12.\n#MessageType_CardanoNativeScriptHash\x10\xcb\x02\x1a\
|
||||
\x04\x98\xb5\x18\x01\x12$\n\x19MessageType_CardanoTxMint\x10\xcc\x02\x1a\
|
||||
|
@ -3210,6 +3210,221 @@ impl ::protobuf::reflect::ProtobufValue for DebugLinkEraseSdCard {
|
||||
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
|
||||
}
|
||||
|
||||
// @@protoc_insertion_point(message:hw.trezor.messages.debug.DebugLinkInsertSdCard)
|
||||
#[derive(PartialEq,Clone,Default,Debug)]
|
||||
pub struct DebugLinkInsertSdCard {
|
||||
// message fields
|
||||
// @@protoc_insertion_point(field:hw.trezor.messages.debug.DebugLinkInsertSdCard.serial_number)
|
||||
pub serial_number: ::std::option::Option<u32>,
|
||||
// @@protoc_insertion_point(field:hw.trezor.messages.debug.DebugLinkInsertSdCard.capacity_bytes)
|
||||
pub capacity_bytes: ::std::option::Option<u32>,
|
||||
// @@protoc_insertion_point(field:hw.trezor.messages.debug.DebugLinkInsertSdCard.manuf_ID)
|
||||
pub manuf_ID: ::std::option::Option<u32>,
|
||||
// special fields
|
||||
// @@protoc_insertion_point(special_field:hw.trezor.messages.debug.DebugLinkInsertSdCard.special_fields)
|
||||
pub special_fields: ::protobuf::SpecialFields,
|
||||
}
|
||||
|
||||
impl<'a> ::std::default::Default for &'a DebugLinkInsertSdCard {
|
||||
fn default() -> &'a DebugLinkInsertSdCard {
|
||||
<DebugLinkInsertSdCard as ::protobuf::Message>::default_instance()
|
||||
}
|
||||
}
|
||||
|
||||
impl DebugLinkInsertSdCard {
|
||||
pub fn new() -> DebugLinkInsertSdCard {
|
||||
::std::default::Default::default()
|
||||
}
|
||||
|
||||
// optional uint32 serial_number = 1;
|
||||
|
||||
pub fn serial_number(&self) -> u32 {
|
||||
self.serial_number.unwrap_or(0)
|
||||
}
|
||||
|
||||
pub fn clear_serial_number(&mut self) {
|
||||
self.serial_number = ::std::option::Option::None;
|
||||
}
|
||||
|
||||
pub fn has_serial_number(&self) -> bool {
|
||||
self.serial_number.is_some()
|
||||
}
|
||||
|
||||
// Param is passed by value, moved
|
||||
pub fn set_serial_number(&mut self, v: u32) {
|
||||
self.serial_number = ::std::option::Option::Some(v);
|
||||
}
|
||||
|
||||
// optional uint32 capacity_bytes = 2;
|
||||
|
||||
pub fn capacity_bytes(&self) -> u32 {
|
||||
self.capacity_bytes.unwrap_or(0)
|
||||
}
|
||||
|
||||
pub fn clear_capacity_bytes(&mut self) {
|
||||
self.capacity_bytes = ::std::option::Option::None;
|
||||
}
|
||||
|
||||
pub fn has_capacity_bytes(&self) -> bool {
|
||||
self.capacity_bytes.is_some()
|
||||
}
|
||||
|
||||
// Param is passed by value, moved
|
||||
pub fn set_capacity_bytes(&mut self, v: u32) {
|
||||
self.capacity_bytes = ::std::option::Option::Some(v);
|
||||
}
|
||||
|
||||
// optional uint32 manuf_ID = 3;
|
||||
|
||||
pub fn manuf_ID(&self) -> u32 {
|
||||
self.manuf_ID.unwrap_or(0)
|
||||
}
|
||||
|
||||
pub fn clear_manuf_ID(&mut self) {
|
||||
self.manuf_ID = ::std::option::Option::None;
|
||||
}
|
||||
|
||||
pub fn has_manuf_ID(&self) -> bool {
|
||||
self.manuf_ID.is_some()
|
||||
}
|
||||
|
||||
// Param is passed by value, moved
|
||||
pub fn set_manuf_ID(&mut self, v: u32) {
|
||||
self.manuf_ID = ::std::option::Option::Some(v);
|
||||
}
|
||||
|
||||
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
|
||||
let mut fields = ::std::vec::Vec::with_capacity(3);
|
||||
let mut oneofs = ::std::vec::Vec::with_capacity(0);
|
||||
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||
"serial_number",
|
||||
|m: &DebugLinkInsertSdCard| { &m.serial_number },
|
||||
|m: &mut DebugLinkInsertSdCard| { &mut m.serial_number },
|
||||
));
|
||||
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||
"capacity_bytes",
|
||||
|m: &DebugLinkInsertSdCard| { &m.capacity_bytes },
|
||||
|m: &mut DebugLinkInsertSdCard| { &mut m.capacity_bytes },
|
||||
));
|
||||
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||
"manuf_ID",
|
||||
|m: &DebugLinkInsertSdCard| { &m.manuf_ID },
|
||||
|m: &mut DebugLinkInsertSdCard| { &mut m.manuf_ID },
|
||||
));
|
||||
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<DebugLinkInsertSdCard>(
|
||||
"DebugLinkInsertSdCard",
|
||||
fields,
|
||||
oneofs,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl ::protobuf::Message for DebugLinkInsertSdCard {
|
||||
const NAME: &'static str = "DebugLinkInsertSdCard";
|
||||
|
||||
fn is_initialized(&self) -> bool {
|
||||
true
|
||||
}
|
||||
|
||||
fn merge_from(&mut self, is: &mut ::protobuf::CodedInputStream<'_>) -> ::protobuf::Result<()> {
|
||||
while let Some(tag) = is.read_raw_tag_or_eof()? {
|
||||
match tag {
|
||||
8 => {
|
||||
self.serial_number = ::std::option::Option::Some(is.read_uint32()?);
|
||||
},
|
||||
16 => {
|
||||
self.capacity_bytes = ::std::option::Option::Some(is.read_uint32()?);
|
||||
},
|
||||
24 => {
|
||||
self.manuf_ID = ::std::option::Option::Some(is.read_uint32()?);
|
||||
},
|
||||
tag => {
|
||||
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
|
||||
},
|
||||
};
|
||||
}
|
||||
::std::result::Result::Ok(())
|
||||
}
|
||||
|
||||
// Compute sizes of nested messages
|
||||
#[allow(unused_variables)]
|
||||
fn compute_size(&self) -> u64 {
|
||||
let mut my_size = 0;
|
||||
if let Some(v) = self.serial_number {
|
||||
my_size += ::protobuf::rt::uint32_size(1, v);
|
||||
}
|
||||
if let Some(v) = self.capacity_bytes {
|
||||
my_size += ::protobuf::rt::uint32_size(2, v);
|
||||
}
|
||||
if let Some(v) = self.manuf_ID {
|
||||
my_size += ::protobuf::rt::uint32_size(3, v);
|
||||
}
|
||||
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
|
||||
self.special_fields.cached_size().set(my_size as u32);
|
||||
my_size
|
||||
}
|
||||
|
||||
fn write_to_with_cached_sizes(&self, os: &mut ::protobuf::CodedOutputStream<'_>) -> ::protobuf::Result<()> {
|
||||
if let Some(v) = self.serial_number {
|
||||
os.write_uint32(1, v)?;
|
||||
}
|
||||
if let Some(v) = self.capacity_bytes {
|
||||
os.write_uint32(2, v)?;
|
||||
}
|
||||
if let Some(v) = self.manuf_ID {
|
||||
os.write_uint32(3, v)?;
|
||||
}
|
||||
os.write_unknown_fields(self.special_fields.unknown_fields())?;
|
||||
::std::result::Result::Ok(())
|
||||
}
|
||||
|
||||
fn special_fields(&self) -> &::protobuf::SpecialFields {
|
||||
&self.special_fields
|
||||
}
|
||||
|
||||
fn mut_special_fields(&mut self) -> &mut ::protobuf::SpecialFields {
|
||||
&mut self.special_fields
|
||||
}
|
||||
|
||||
fn new() -> DebugLinkInsertSdCard {
|
||||
DebugLinkInsertSdCard::new()
|
||||
}
|
||||
|
||||
fn clear(&mut self) {
|
||||
self.serial_number = ::std::option::Option::None;
|
||||
self.capacity_bytes = ::std::option::Option::None;
|
||||
self.manuf_ID = ::std::option::Option::None;
|
||||
self.special_fields.clear();
|
||||
}
|
||||
|
||||
fn default_instance() -> &'static DebugLinkInsertSdCard {
|
||||
static instance: DebugLinkInsertSdCard = DebugLinkInsertSdCard {
|
||||
serial_number: ::std::option::Option::None,
|
||||
capacity_bytes: ::std::option::Option::None,
|
||||
manuf_ID: ::std::option::Option::None,
|
||||
special_fields: ::protobuf::SpecialFields::new(),
|
||||
};
|
||||
&instance
|
||||
}
|
||||
}
|
||||
|
||||
impl ::protobuf::MessageFull for DebugLinkInsertSdCard {
|
||||
fn descriptor() -> ::protobuf::reflect::MessageDescriptor {
|
||||
static descriptor: ::protobuf::rt::Lazy<::protobuf::reflect::MessageDescriptor> = ::protobuf::rt::Lazy::new();
|
||||
descriptor.get(|| file_descriptor().message_by_package_relative_name("DebugLinkInsertSdCard").unwrap()).clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl ::std::fmt::Display for DebugLinkInsertSdCard {
|
||||
fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result {
|
||||
::protobuf::text_format::fmt(self, f)
|
||||
}
|
||||
}
|
||||
|
||||
impl ::protobuf::reflect::ProtobufValue for DebugLinkInsertSdCard {
|
||||
type RuntimeType = ::protobuf::reflect::rt::RuntimeTypeMessage<Self>;
|
||||
}
|
||||
|
||||
// @@protoc_insertion_point(message:hw.trezor.messages.debug.DebugLinkWatchLayout)
|
||||
#[derive(PartialEq,Clone,Default,Debug)]
|
||||
pub struct DebugLinkWatchLayout {
|
||||
@ -3499,10 +3714,13 @@ static file_descriptor_proto_data: &'static [u8] = b"\
|
||||
\x01(\rR\x07address\x12\x16\n\x06memory\x18\x02\x20\x01(\x0cR\x06memory\
|
||||
\x12\x14\n\x05flash\x18\x03\x20\x01(\x08R\x05flash\"-\n\x13DebugLinkFlas\
|
||||
hErase\x12\x16\n\x06sector\x18\x01\x20\x01(\rR\x06sector\".\n\x14DebugLi\
|
||||
nkEraseSdCard\x12\x16\n\x06format\x18\x01\x20\x01(\x08R\x06format\",\n\
|
||||
\x14DebugLinkWatchLayout\x12\x14\n\x05watch\x18\x01\x20\x01(\x08R\x05wat\
|
||||
ch\"\x1b\n\x19DebugLinkResetDebugEventsB=\n#com.satoshilabs.trezor.lib.p\
|
||||
rotobufB\x12TrezorMessageDebug\x80\xa6\x1d\x01\
|
||||
nkEraseSdCard\x12\x16\n\x06format\x18\x01\x20\x01(\x08R\x06format\"~\n\
|
||||
\x15DebugLinkInsertSdCard\x12#\n\rserial_number\x18\x01\x20\x01(\rR\x0cs\
|
||||
erialNumber\x12%\n\x0ecapacity_bytes\x18\x02\x20\x01(\rR\rcapacityBytes\
|
||||
\x12\x19\n\x08manuf_ID\x18\x03\x20\x01(\rR\x07manufID\",\n\x14DebugLinkW\
|
||||
atchLayout\x12\x14\n\x05watch\x18\x01\x20\x01(\x08R\x05watch\"\x1b\n\x19\
|
||||
DebugLinkResetDebugEventsB=\n#com.satoshilabs.trezor.lib.protobufB\x12Tr\
|
||||
ezorMessageDebug\x80\xa6\x1d\x01\
|
||||
";
|
||||
|
||||
/// `FileDescriptorProto` object which was a source for this generated file
|
||||
@ -3523,7 +3741,7 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
|
||||
deps.push(super::messages::file_descriptor().clone());
|
||||
deps.push(super::messages_common::file_descriptor().clone());
|
||||
deps.push(super::messages_management::file_descriptor().clone());
|
||||
let mut messages = ::std::vec::Vec::with_capacity(15);
|
||||
let mut messages = ::std::vec::Vec::with_capacity(16);
|
||||
messages.push(DebugLinkDecision::generated_message_descriptor_data());
|
||||
messages.push(DebugLinkLayout::generated_message_descriptor_data());
|
||||
messages.push(DebugLinkReseedRandom::generated_message_descriptor_data());
|
||||
@ -3537,6 +3755,7 @@ pub fn file_descriptor() -> &'static ::protobuf::reflect::FileDescriptor {
|
||||
messages.push(DebugLinkMemoryWrite::generated_message_descriptor_data());
|
||||
messages.push(DebugLinkFlashErase::generated_message_descriptor_data());
|
||||
messages.push(DebugLinkEraseSdCard::generated_message_descriptor_data());
|
||||
messages.push(DebugLinkInsertSdCard::generated_message_descriptor_data());
|
||||
messages.push(DebugLinkWatchLayout::generated_message_descriptor_data());
|
||||
messages.push(DebugLinkResetDebugEvents::generated_message_descriptor_data());
|
||||
let mut enums = ::std::vec::Vec::with_capacity(3);
|
||||
|
@ -198,14 +198,6 @@ def client(
|
||||
):
|
||||
pytest.skip("Test excluded on Trezor R")
|
||||
|
||||
sd_marker = request.node.get_closest_marker("sd_card")
|
||||
if sd_marker and not _raw_client.features.sd_card_present:
|
||||
raise RuntimeError(
|
||||
"This test requires SD card.\n"
|
||||
"To skip all such tests, run:\n"
|
||||
" pytest -m 'not sd_card' <test path>"
|
||||
)
|
||||
|
||||
test_ui = request.config.getoption("ui")
|
||||
|
||||
_raw_client.reset_debug_features()
|
||||
@ -223,7 +215,9 @@ def client(
|
||||
# we need to reseed before the wipe
|
||||
_raw_client.debug.reseed(0)
|
||||
|
||||
sd_marker = request.node.get_closest_marker("sd_card")
|
||||
if sd_marker:
|
||||
_raw_client.debug.insert_sd_card(1)
|
||||
should_format = sd_marker.kwargs.get("formatted", True)
|
||||
_raw_client.debug.erase_sd_card(format=should_format)
|
||||
|
||||
|
34
tests/device_tests/test_debug_sdcard_insert.py
Normal file
34
tests/device_tests/test_debug_sdcard_insert.py
Normal file
@ -0,0 +1,34 @@
|
||||
import pytest
|
||||
|
||||
from trezorlib.debuglink import TrezorClientDebugLink as Client
|
||||
|
||||
pytestmark = [pytest.mark.skip_t1, pytest.mark.skip_tr]
|
||||
|
||||
|
||||
@pytest.mark.sd_card(formatted=True)
|
||||
def test_sd_eject(client: Client):
|
||||
print(client.features)
|
||||
assert client.features.sd_card_present is True
|
||||
|
||||
client.debug.eject_sd_card()
|
||||
client.refresh_features()
|
||||
print(client.features)
|
||||
assert client.features.sd_card_present is False
|
||||
|
||||
client.debug.insert_sd_card(2)
|
||||
client.debug.erase_sd_card(format=True)
|
||||
client.refresh_features()
|
||||
assert client.features.sd_card_present is True
|
||||
|
||||
client.debug.eject_sd_card()
|
||||
client.refresh_features()
|
||||
assert client.features.sd_card_present is False
|
||||
|
||||
client.debug.insert_sd_card(3)
|
||||
client.debug.erase_sd_card(format=False)
|
||||
client.refresh_features()
|
||||
assert client.features.sd_card_present is True
|
||||
|
||||
client.debug.eject_sd_card()
|
||||
client.refresh_features()
|
||||
assert client.features.sd_card_present is False
|
Loading…
Reference in New Issue
Block a user