mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-19 04:48:12 +00:00
feat(core): add settings to turn haptic on/off
[no changelog]
This commit is contained in:
parent
2e10d440fa
commit
b9a55cf2a7
@ -116,6 +116,7 @@ message Features {
|
|||||||
Capability_Solana = 18;
|
Capability_Solana = 18;
|
||||||
Capability_Translations = 19 [(bitcoin_only) = true];
|
Capability_Translations = 19 [(bitcoin_only) = true];
|
||||||
Capability_Brightness = 20 [(bitcoin_only) = true];
|
Capability_Brightness = 20 [(bitcoin_only) = true];
|
||||||
|
Capability_Haptic = 21 [(bitcoin_only) = true];
|
||||||
}
|
}
|
||||||
optional BackupType backup_type = 31; // type of device backup (BIP-39 / SLIP-39 basic / SLIP-39 advanced)
|
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 present
|
||||||
@ -138,6 +139,7 @@ message Features {
|
|||||||
optional bool bootloader_locked = 49; // bootloader is locked
|
optional bool bootloader_locked = 49; // bootloader is locked
|
||||||
optional bool language_version_matches = 50 [default=true]; // translation blob version matches firmware version
|
optional bool language_version_matches = 50 [default=true]; // translation blob version matches firmware version
|
||||||
optional uint32 unit_packaging = 51; // unit/device packaging version
|
optional uint32 unit_packaging = 51; // unit/device packaging version
|
||||||
|
optional bool haptic_feedback = 52; // haptic feedback is enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -185,6 +187,7 @@ message ApplySettings {
|
|||||||
optional SafetyCheckLevel safety_checks = 9; // Safety check level, set to Prompt to limit path namespace enforcement
|
optional SafetyCheckLevel safety_checks = 9; // Safety check level, set to Prompt to limit path namespace enforcement
|
||||||
optional bool experimental_features = 10; // enable experimental message types
|
optional bool experimental_features = 10; // enable experimental message types
|
||||||
optional bool hide_passphrase_from_host = 11; // do not show passphrase coming from host
|
optional bool hide_passphrase_from_host = 11; // do not show passphrase coming from host
|
||||||
|
optional bool haptic_feedback = 13; // enable haptic feedback
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
47
core/embed/extmod/modtrezorio/modtrezorio-haptic.h
Normal file
47
core/embed/extmod/modtrezorio/modtrezorio-haptic.h
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
/*
|
||||||
|
* 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 "haptic.h"
|
||||||
|
|
||||||
|
/// package: trezorio.haptic
|
||||||
|
|
||||||
|
/// def haptic_set_enabled(enable: bool) -> None:
|
||||||
|
/// """
|
||||||
|
/// Enable/Disable the haptic feedback.
|
||||||
|
/// """
|
||||||
|
STATIC mp_obj_t mod_trezorio_haptic_set_enabled(mp_obj_t enable) {
|
||||||
|
haptic_set_enabled(mp_obj_is_true(enable));
|
||||||
|
return mp_const_none;
|
||||||
|
}
|
||||||
|
STATIC MP_DEFINE_CONST_FUN_OBJ_1(mod_trezorio_haptic_set_enabled_obj,
|
||||||
|
mod_trezorio_haptic_set_enabled);
|
||||||
|
|
||||||
|
STATIC const mp_rom_map_elem_t mod_trezorio_haptic_globals_table[] = {
|
||||||
|
{MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_haptic)},
|
||||||
|
{MP_ROM_QSTR(MP_QSTR_haptic_set_enabled),
|
||||||
|
MP_ROM_PTR(&mod_trezorio_haptic_set_enabled_obj)},
|
||||||
|
|
||||||
|
};
|
||||||
|
STATIC MP_DEFINE_CONST_DICT(mod_trezorio_haptic_globals,
|
||||||
|
mod_trezorio_haptic_globals_table);
|
||||||
|
|
||||||
|
STATIC const mp_obj_module_t mod_trezorio_haptic_module = {
|
||||||
|
.base = {&mp_type_module},
|
||||||
|
.globals = (mp_obj_dict_t *)&mod_trezorio_haptic_globals,
|
||||||
|
};
|
@ -55,9 +55,12 @@ bool usb_connected_previously = true;
|
|||||||
#include "modtrezorio-fatfs.h"
|
#include "modtrezorio-fatfs.h"
|
||||||
#include "modtrezorio-sdcard.h"
|
#include "modtrezorio-sdcard.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_HAPTIC
|
||||||
|
#include "modtrezorio-haptic.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
/// package: trezorio.__init__
|
/// package: trezorio.__init__
|
||||||
/// from . import fatfs, sdcard
|
/// from . import fatfs, haptic, sdcard
|
||||||
|
|
||||||
/// POLL_READ: int # wait until interface is readable and return read data
|
/// POLL_READ: int # wait until interface is readable and return read data
|
||||||
/// POLL_WRITE: int # wait until interface is writable
|
/// POLL_WRITE: int # wait until interface is writable
|
||||||
@ -89,6 +92,10 @@ STATIC const mp_rom_map_elem_t mp_module_trezorio_globals_table[] = {
|
|||||||
{MP_ROM_QSTR(MP_QSTR_sdcard), MP_ROM_PTR(&mod_trezorio_sdcard_module)},
|
{MP_ROM_QSTR(MP_QSTR_sdcard), MP_ROM_PTR(&mod_trezorio_sdcard_module)},
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef USE_HAPTIC
|
||||||
|
{MP_ROM_QSTR(MP_QSTR_haptic), MP_ROM_PTR(&mod_trezorio_haptic_module)},
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef USE_TOUCH
|
#ifdef USE_TOUCH
|
||||||
{MP_ROM_QSTR(MP_QSTR_TOUCH), MP_ROM_INT(TOUCH_IFACE)},
|
{MP_ROM_QSTR(MP_QSTR_TOUCH), MP_ROM_INT(TOUCH_IFACE)},
|
||||||
{MP_ROM_QSTR(MP_QSTR_TOUCH_START), MP_ROM_INT((TOUCH_START >> 24) & 0xFFU)},
|
{MP_ROM_QSTR(MP_QSTR_TOUCH_START), MP_ROM_INT((TOUCH_START >> 24) & 0xFFU)},
|
||||||
|
@ -416,6 +416,8 @@ STATIC mp_obj_tuple_t mod_trezorutils_version_obj = {
|
|||||||
/// """Whether the hardware supports SD card."""
|
/// """Whether the hardware supports SD card."""
|
||||||
/// USE_BACKLIGHT: bool
|
/// USE_BACKLIGHT: bool
|
||||||
/// """Whether the hardware supports backlight brightness control."""
|
/// """Whether the hardware supports backlight brightness control."""
|
||||||
|
/// USE_HAPTIC: bool
|
||||||
|
/// """Whether the hardware supports haptic feedback."""
|
||||||
/// USE_OPTIGA: bool
|
/// USE_OPTIGA: bool
|
||||||
/// """Whether the hardware supports Optiga secure element."""
|
/// """Whether the hardware supports Optiga secure element."""
|
||||||
/// MODEL: str
|
/// MODEL: str
|
||||||
@ -474,6 +476,11 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = {
|
|||||||
#else
|
#else
|
||||||
{MP_ROM_QSTR(MP_QSTR_USE_BACKLIGHT), mp_const_false},
|
{MP_ROM_QSTR(MP_QSTR_USE_BACKLIGHT), mp_const_false},
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef USE_HAPTIC
|
||||||
|
{MP_ROM_QSTR(MP_QSTR_USE_HAPTIC), mp_const_true},
|
||||||
|
#else
|
||||||
|
{MP_ROM_QSTR(MP_QSTR_USE_HAPTIC), mp_const_false},
|
||||||
|
#endif
|
||||||
#ifdef USE_OPTIGA
|
#ifdef USE_OPTIGA
|
||||||
{MP_ROM_QSTR(MP_QSTR_USE_OPTIGA), mp_const_true},
|
{MP_ROM_QSTR(MP_QSTR_USE_OPTIGA), mp_const_true},
|
||||||
#else
|
#else
|
||||||
|
@ -30,4 +30,6 @@ void haptic_play(haptic_effect_t effect);
|
|||||||
// the creation of customized haptic effects.
|
// the creation of customized haptic effects.
|
||||||
bool haptic_play_custom(int8_t amplitude_pct, uint16_t duration_ms);
|
bool haptic_play_custom(int8_t amplitude_pct, uint16_t duration_ms);
|
||||||
|
|
||||||
|
void haptic_set_enabled(bool enable);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -81,6 +81,8 @@
|
|||||||
#define MAX_AMPLITUDE 127
|
#define MAX_AMPLITUDE 127
|
||||||
#define PRODTEST_EFFECT_AMPLITUDE 127
|
#define PRODTEST_EFFECT_AMPLITUDE 127
|
||||||
|
|
||||||
|
bool haptic_enabled = true;
|
||||||
|
|
||||||
static bool set_reg(uint8_t addr, uint8_t value) {
|
static bool set_reg(uint8_t addr, uint8_t value) {
|
||||||
uint8_t data[] = {addr, value};
|
uint8_t data[] = {addr, value};
|
||||||
return i2c_transmit(DRV2625_I2C_INSTANCE, DRV2625_I2C_ADDRESS, data,
|
return i2c_transmit(DRV2625_I2C_INSTANCE, DRV2625_I2C_ADDRESS, data,
|
||||||
@ -184,6 +186,10 @@ static void haptic_play_lib(drv2625_lib_effect_t effect) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void haptic_play(haptic_effect_t effect) {
|
void haptic_play(haptic_effect_t effect) {
|
||||||
|
if (!haptic_enabled) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (effect) {
|
switch (effect) {
|
||||||
case HAPTIC_BUTTON_PRESS:
|
case HAPTIC_BUTTON_PRESS:
|
||||||
haptic_play_rtp(PRESS_EFFECT_AMPLITUDE, PRESS_EFFECT_DURATION);
|
haptic_play_rtp(PRESS_EFFECT_AMPLITUDE, PRESS_EFFECT_DURATION);
|
||||||
@ -213,3 +219,5 @@ bool haptic_play_custom(int8_t amplitude_pct, uint16_t duration_ms) {
|
|||||||
bool haptic_test(uint16_t duration_ms) {
|
bool haptic_test(uint16_t duration_ms) {
|
||||||
return haptic_play_rtp(PRODTEST_EFFECT_AMPLITUDE, duration_ms);
|
return haptic_play_rtp(PRODTEST_EFFECT_AMPLITUDE, duration_ms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void haptic_set_enabled(bool enable) { haptic_enabled = enable; }
|
||||||
|
@ -193,7 +193,7 @@ class WebUSB:
|
|||||||
"""
|
"""
|
||||||
Sends message using USB WebUSB (device) or UDP (emulator).
|
Sends message using USB WebUSB (device) or UDP (emulator).
|
||||||
"""
|
"""
|
||||||
from . import fatfs, sdcard
|
from . import fatfs, haptic, sdcard
|
||||||
POLL_READ: int # wait until interface is readable and return read data
|
POLL_READ: int # wait until interface is readable and return read data
|
||||||
POLL_WRITE: int # wait until interface is writable
|
POLL_WRITE: int # wait until interface is writable
|
||||||
|
|
||||||
|
8
core/mocks/generated/trezorio/haptic.pyi
Normal file
8
core/mocks/generated/trezorio/haptic.pyi
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
from typing import *
|
||||||
|
|
||||||
|
|
||||||
|
# extmod/modtrezorio/modtrezorio-haptic.h
|
||||||
|
def haptic_set_enabled(enable: bool) -> None:
|
||||||
|
"""
|
||||||
|
Enable/Disable the haptic feedback.
|
||||||
|
"""
|
@ -126,6 +126,8 @@ USE_SD_CARD: bool
|
|||||||
"""Whether the hardware supports SD card."""
|
"""Whether the hardware supports SD card."""
|
||||||
USE_BACKLIGHT: bool
|
USE_BACKLIGHT: bool
|
||||||
"""Whether the hardware supports backlight brightness control."""
|
"""Whether the hardware supports backlight brightness control."""
|
||||||
|
USE_HAPTIC: bool
|
||||||
|
"""Whether the hardware supports haptic feedback."""
|
||||||
USE_OPTIGA: bool
|
USE_OPTIGA: bool
|
||||||
"""Whether the hardware supports Optiga secure element."""
|
"""Whether the hardware supports Optiga secure element."""
|
||||||
MODEL: str
|
MODEL: str
|
||||||
|
@ -135,6 +135,10 @@ def get_features() -> Features:
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if utils.USE_HAPTIC:
|
||||||
|
f.haptic_feedback = storage_device.get_haptic_feedback()
|
||||||
|
f.capabilities.append(Capability.Haptic)
|
||||||
|
|
||||||
if utils.USE_BACKLIGHT:
|
if utils.USE_BACKLIGHT:
|
||||||
f.capabilities.append(Capability.Brightness)
|
f.capabilities.append(Capability.Brightness)
|
||||||
|
|
||||||
|
@ -2,7 +2,7 @@ from typing import TYPE_CHECKING
|
|||||||
|
|
||||||
import storage.device as storage_device
|
import storage.device as storage_device
|
||||||
import trezorui2
|
import trezorui2
|
||||||
from trezor import TR
|
from trezor import TR, utils
|
||||||
from trezor.enums import ButtonRequestType
|
from trezor.enums import ButtonRequestType
|
||||||
from trezor.ui.layouts import confirm_action
|
from trezor.ui.layouts import confirm_action
|
||||||
from trezor.wire import DataError
|
from trezor.wire import DataError
|
||||||
@ -50,6 +50,7 @@ async def apply_settings(msg: ApplySettings) -> Success:
|
|||||||
msg_safety_checks = msg.safety_checks # local_cache_attribute
|
msg_safety_checks = msg.safety_checks # local_cache_attribute
|
||||||
experimental_features = msg.experimental_features # local_cache_attribute
|
experimental_features = msg.experimental_features # local_cache_attribute
|
||||||
hide_passphrase_from_host = msg.hide_passphrase_from_host # local_cache_attribute
|
hide_passphrase_from_host = msg.hide_passphrase_from_host # local_cache_attribute
|
||||||
|
haptic_feedback = msg.haptic_feedback
|
||||||
|
|
||||||
if (
|
if (
|
||||||
homescreen is None
|
homescreen is None
|
||||||
@ -61,6 +62,7 @@ async def apply_settings(msg: ApplySettings) -> Success:
|
|||||||
and msg_safety_checks is None
|
and msg_safety_checks is None
|
||||||
and experimental_features is None
|
and experimental_features is None
|
||||||
and hide_passphrase_from_host is None
|
and hide_passphrase_from_host is None
|
||||||
|
and (haptic_feedback is None or not utils.USE_HAPTIC)
|
||||||
):
|
):
|
||||||
raise ProcessError("No setting provided")
|
raise ProcessError("No setting provided")
|
||||||
|
|
||||||
@ -114,6 +116,13 @@ async def apply_settings(msg: ApplySettings) -> Success:
|
|||||||
await _require_confirm_hide_passphrase_from_host(hide_passphrase_from_host)
|
await _require_confirm_hide_passphrase_from_host(hide_passphrase_from_host)
|
||||||
storage_device.set_hide_passphrase_from_host(hide_passphrase_from_host)
|
storage_device.set_hide_passphrase_from_host(hide_passphrase_from_host)
|
||||||
|
|
||||||
|
if haptic_feedback is not None and utils.USE_HAPTIC:
|
||||||
|
from trezor import io
|
||||||
|
|
||||||
|
await _require_confirm_haptic_feedback(haptic_feedback)
|
||||||
|
io.haptic.haptic_set_enabled(haptic_feedback)
|
||||||
|
storage_device.set_haptic_feedback(haptic_feedback)
|
||||||
|
|
||||||
reload_settings_from_storage()
|
reload_settings_from_storage()
|
||||||
|
|
||||||
return Success(message="Settings applied")
|
return Success(message="Settings applied")
|
||||||
@ -255,3 +264,15 @@ async def _require_confirm_hide_passphrase_from_host(enable: bool) -> None:
|
|||||||
description=TR.passphrase__hide,
|
description=TR.passphrase__hide,
|
||||||
br_code=BRT_PROTECT_CALL,
|
br_code=BRT_PROTECT_CALL,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
if utils.USE_HAPTIC:
|
||||||
|
|
||||||
|
async def _require_confirm_haptic_feedback(enable: bool) -> None:
|
||||||
|
await confirm_action(
|
||||||
|
"haptic_feedback__settings",
|
||||||
|
TR.haptic_feedback__title,
|
||||||
|
TR.haptic_feedback__enable if enable else TR.haptic_feedback__disable,
|
||||||
|
subtitle=TR.haptic_feedback__subtitle,
|
||||||
|
br_code=BRT_PROTECT_CALL,
|
||||||
|
)
|
||||||
|
@ -10,7 +10,7 @@ welcome_screen_start_ms = utime.ticks_ms()
|
|||||||
|
|
||||||
import storage
|
import storage
|
||||||
import storage.device
|
import storage.device
|
||||||
from trezor import config, log, loop, ui, utils, wire, translations
|
from trezor import config, io, log, loop, ui, utils, wire, translations
|
||||||
from trezor.pin import (
|
from trezor.pin import (
|
||||||
allow_all_loader_messages,
|
allow_all_loader_messages,
|
||||||
ignore_nonpin_loader_messages,
|
ignore_nonpin_loader_messages,
|
||||||
@ -51,6 +51,9 @@ async def bootscreen() -> None:
|
|||||||
enforce_welcome_screen_duration()
|
enforce_welcome_screen_duration()
|
||||||
ui.backlight_fade(ui.BacklightLevels.NONE)
|
ui.backlight_fade(ui.BacklightLevels.NONE)
|
||||||
ui.display.orientation(storage.device.get_rotation())
|
ui.display.orientation(storage.device.get_rotation())
|
||||||
|
if utils.USE_HAPTIC:
|
||||||
|
io.haptic.haptic_set_enabled(storage.device.get_haptic_feedback())
|
||||||
|
|
||||||
await lockscreen
|
await lockscreen
|
||||||
await verify_user_pin()
|
await verify_user_pin()
|
||||||
storage.init_unlocked()
|
storage.init_unlocked()
|
||||||
@ -61,6 +64,9 @@ async def bootscreen() -> None:
|
|||||||
storage.init_unlocked()
|
storage.init_unlocked()
|
||||||
enforce_welcome_screen_duration()
|
enforce_welcome_screen_duration()
|
||||||
rotation = storage.device.get_rotation()
|
rotation = storage.device.get_rotation()
|
||||||
|
if utils.USE_HAPTIC:
|
||||||
|
io.haptic.haptic_set_enabled(storage.device.get_haptic_feedback())
|
||||||
|
|
||||||
if rotation != ui.display.orientation():
|
if rotation != ui.display.orientation():
|
||||||
# there is a slight delay before next screen is shown,
|
# there is a slight delay before next screen is shown,
|
||||||
# so we don't fade unless there is a change of orientation
|
# so we don't fade unless there is a change of orientation
|
||||||
|
@ -36,12 +36,13 @@ INITIALIZED = const(0x13) # bool (0x01 or empty)
|
|||||||
_SAFETY_CHECK_LEVEL = const(0x14) # int
|
_SAFETY_CHECK_LEVEL = const(0x14) # int
|
||||||
_EXPERIMENTAL_FEATURES = const(0x15) # bool (0x01 or empty)
|
_EXPERIMENTAL_FEATURES = const(0x15) # bool (0x01 or empty)
|
||||||
_HIDE_PASSPHRASE_FROM_HOST = const(0x16) # bool (0x01 or empty)
|
_HIDE_PASSPHRASE_FROM_HOST = const(0x16) # bool (0x01 or empty)
|
||||||
# unused from python:
|
|
||||||
# _BRIGHTNESS = const(0x18) # int
|
|
||||||
|
|
||||||
if utils.USE_THP:
|
if utils.USE_THP:
|
||||||
_DEVICE_SECRET = const(0x17) # bytes
|
_DEVICE_SECRET = const(0x17) # bytes
|
||||||
_CRED_AUTH_KEY_COUNTER = const(0x18) # bytes
|
_CRED_AUTH_KEY_COUNTER = const(0x18) # bytes
|
||||||
|
# unused from python:
|
||||||
|
# _BRIGHTNESS = const(0x19) # int
|
||||||
|
_DISABLE_HAPTIC_FEEDBACK = const(0x20) # bool (0x01 or empty)
|
||||||
|
|
||||||
|
|
||||||
SAFETY_CHECK_LEVEL_STRICT : Literal[0] = const(0)
|
SAFETY_CHECK_LEVEL_STRICT : Literal[0] = const(0)
|
||||||
SAFETY_CHECK_LEVEL_PROMPT : Literal[1] = const(1)
|
SAFETY_CHECK_LEVEL_PROMPT : Literal[1] = const(1)
|
||||||
@ -377,3 +378,17 @@ if utils.USE_THP:
|
|||||||
counter = int.from_bytes(get_cred_auth_key_counter(), "big")
|
counter = int.from_bytes(get_cred_auth_key_counter(), "big")
|
||||||
utils.ensure(counter < 0xFFFFFFFF, "Overflow of cred_auth_key_counter")
|
utils.ensure(counter < 0xFFFFFFFF, "Overflow of cred_auth_key_counter")
|
||||||
common.set(_NAMESPACE, _CRED_AUTH_KEY_COUNTER, (counter + 1).to_bytes(4, "big"))
|
common.set(_NAMESPACE, _CRED_AUTH_KEY_COUNTER, (counter + 1).to_bytes(4, "big"))
|
||||||
|
|
||||||
|
|
||||||
|
def set_haptic_feedback(enable: bool) -> None:
|
||||||
|
"""
|
||||||
|
Enable or disable haptic feedback.
|
||||||
|
"""
|
||||||
|
common.set_bool(_NAMESPACE, _DISABLE_HAPTIC_FEEDBACK, not enable, True)
|
||||||
|
|
||||||
|
|
||||||
|
def get_haptic_feedback() -> bool:
|
||||||
|
"""
|
||||||
|
Get haptic feedback enable, default to true if not set.
|
||||||
|
"""
|
||||||
|
return not common.get_bool(_NAMESPACE, _DISABLE_HAPTIC_FEEDBACK, True)
|
||||||
|
1
core/src/trezor/enums/Capability.py
generated
1
core/src/trezor/enums/Capability.py
generated
@ -11,6 +11,7 @@ ShamirGroups = 16
|
|||||||
PassphraseEntry = 17
|
PassphraseEntry = 17
|
||||||
Translations = 19
|
Translations = 19
|
||||||
Brightness = 20
|
Brightness = 20
|
||||||
|
Haptic = 21
|
||||||
if not utils.BITCOIN_ONLY:
|
if not utils.BITCOIN_ONLY:
|
||||||
Bitcoin_like = 2
|
Bitcoin_like = 2
|
||||||
Binance = 3
|
Binance = 3
|
||||||
|
1
core/src/trezor/enums/__init__.py
generated
1
core/src/trezor/enums/__init__.py
generated
@ -461,6 +461,7 @@ if TYPE_CHECKING:
|
|||||||
Solana = 18
|
Solana = 18
|
||||||
Translations = 19
|
Translations = 19
|
||||||
Brightness = 20
|
Brightness = 20
|
||||||
|
Haptic = 21
|
||||||
|
|
||||||
class SdProtectOperationType(IntEnum):
|
class SdProtectOperationType(IntEnum):
|
||||||
DISABLE = 0
|
DISABLE = 0
|
||||||
|
4
core/src/trezor/messages.py
generated
4
core/src/trezor/messages.py
generated
@ -2163,6 +2163,7 @@ if TYPE_CHECKING:
|
|||||||
bootloader_locked: "bool | None"
|
bootloader_locked: "bool | None"
|
||||||
language_version_matches: "bool"
|
language_version_matches: "bool"
|
||||||
unit_packaging: "int | None"
|
unit_packaging: "int | None"
|
||||||
|
haptic_feedback: "bool | None"
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@ -2215,6 +2216,7 @@ if TYPE_CHECKING:
|
|||||||
bootloader_locked: "bool | None" = None,
|
bootloader_locked: "bool | None" = None,
|
||||||
language_version_matches: "bool | None" = None,
|
language_version_matches: "bool | None" = None,
|
||||||
unit_packaging: "int | None" = None,
|
unit_packaging: "int | None" = None,
|
||||||
|
haptic_feedback: "bool | None" = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -2258,6 +2260,7 @@ if TYPE_CHECKING:
|
|||||||
safety_checks: "SafetyCheckLevel | None"
|
safety_checks: "SafetyCheckLevel | None"
|
||||||
experimental_features: "bool | None"
|
experimental_features: "bool | None"
|
||||||
hide_passphrase_from_host: "bool | None"
|
hide_passphrase_from_host: "bool | None"
|
||||||
|
haptic_feedback: "bool | None"
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@ -2271,6 +2274,7 @@ if TYPE_CHECKING:
|
|||||||
safety_checks: "SafetyCheckLevel | None" = None,
|
safety_checks: "SafetyCheckLevel | None" = None,
|
||||||
experimental_features: "bool | None" = None,
|
experimental_features: "bool | None" = None,
|
||||||
hide_passphrase_from_host: "bool | None" = None,
|
hide_passphrase_from_host: "bool | None" = None,
|
||||||
|
haptic_feedback: "bool | None" = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -11,6 +11,7 @@ from trezorutils import ( # noqa: F401
|
|||||||
SCM_REVISION,
|
SCM_REVISION,
|
||||||
UI_LAYOUT,
|
UI_LAYOUT,
|
||||||
USE_BACKLIGHT,
|
USE_BACKLIGHT,
|
||||||
|
USE_HAPTIC,
|
||||||
USE_OPTIGA,
|
USE_OPTIGA,
|
||||||
USE_SD_CARD,
|
USE_SD_CARD,
|
||||||
USE_THP,
|
USE_THP,
|
||||||
|
@ -213,6 +213,14 @@ def brightness(client: "TrezorClient") -> str:
|
|||||||
return device.set_brightness(client)
|
return device.set_brightness(client)
|
||||||
|
|
||||||
|
|
||||||
|
@cli.command()
|
||||||
|
@click.argument("enable", type=ChoiceType({"on": True, "off": False}))
|
||||||
|
@with_client
|
||||||
|
def haptic_feedback(client: "TrezorClient", enable: bool) -> str:
|
||||||
|
"""Enable or disable haptic feedback."""
|
||||||
|
return device.apply_settings(client, haptic_feedback=enable)
|
||||||
|
|
||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@click.argument("path_or_url", required=False)
|
@click.argument("path_or_url", required=False)
|
||||||
@click.option(
|
@click.option(
|
||||||
|
@ -47,6 +47,7 @@ def apply_settings(
|
|||||||
safety_checks: Optional[messages.SafetyCheckLevel] = None,
|
safety_checks: Optional[messages.SafetyCheckLevel] = None,
|
||||||
experimental_features: Optional[bool] = None,
|
experimental_features: Optional[bool] = None,
|
||||||
hide_passphrase_from_host: Optional[bool] = None,
|
hide_passphrase_from_host: Optional[bool] = None,
|
||||||
|
haptic_feedback: Optional[bool] = None,
|
||||||
) -> "MessageType":
|
) -> "MessageType":
|
||||||
if language is not None:
|
if language is not None:
|
||||||
warnings.warn(
|
warnings.warn(
|
||||||
@ -63,6 +64,7 @@ def apply_settings(
|
|||||||
safety_checks=safety_checks,
|
safety_checks=safety_checks,
|
||||||
experimental_features=experimental_features,
|
experimental_features=experimental_features,
|
||||||
hide_passphrase_from_host=hide_passphrase_from_host,
|
hide_passphrase_from_host=hide_passphrase_from_host,
|
||||||
|
haptic_feedback=haptic_feedback,
|
||||||
)
|
)
|
||||||
|
|
||||||
out = client.call(settings)
|
out = client.call(settings)
|
||||||
|
7
python/src/trezorlib/messages.py
generated
7
python/src/trezorlib/messages.py
generated
@ -493,6 +493,7 @@ class Capability(IntEnum):
|
|||||||
Solana = 18
|
Solana = 18
|
||||||
Translations = 19
|
Translations = 19
|
||||||
Brightness = 20
|
Brightness = 20
|
||||||
|
Haptic = 21
|
||||||
|
|
||||||
|
|
||||||
class SdProtectOperationType(IntEnum):
|
class SdProtectOperationType(IntEnum):
|
||||||
@ -3263,6 +3264,7 @@ class Features(protobuf.MessageType):
|
|||||||
49: protobuf.Field("bootloader_locked", "bool", repeated=False, required=False, default=None),
|
49: protobuf.Field("bootloader_locked", "bool", repeated=False, required=False, default=None),
|
||||||
50: protobuf.Field("language_version_matches", "bool", repeated=False, required=False, default=True),
|
50: protobuf.Field("language_version_matches", "bool", repeated=False, required=False, default=True),
|
||||||
51: protobuf.Field("unit_packaging", "uint32", repeated=False, required=False, default=None),
|
51: protobuf.Field("unit_packaging", "uint32", repeated=False, required=False, default=None),
|
||||||
|
52: protobuf.Field("haptic_feedback", "bool", repeated=False, required=False, default=None),
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
@ -3317,6 +3319,7 @@ class Features(protobuf.MessageType):
|
|||||||
bootloader_locked: Optional["bool"] = None,
|
bootloader_locked: Optional["bool"] = None,
|
||||||
language_version_matches: Optional["bool"] = True,
|
language_version_matches: Optional["bool"] = True,
|
||||||
unit_packaging: Optional["int"] = None,
|
unit_packaging: Optional["int"] = None,
|
||||||
|
haptic_feedback: Optional["bool"] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.capabilities: Sequence["Capability"] = capabilities if capabilities is not None else []
|
self.capabilities: Sequence["Capability"] = capabilities if capabilities is not None else []
|
||||||
self.major_version = major_version
|
self.major_version = major_version
|
||||||
@ -3367,6 +3370,7 @@ class Features(protobuf.MessageType):
|
|||||||
self.bootloader_locked = bootloader_locked
|
self.bootloader_locked = bootloader_locked
|
||||||
self.language_version_matches = language_version_matches
|
self.language_version_matches = language_version_matches
|
||||||
self.unit_packaging = unit_packaging
|
self.unit_packaging = unit_packaging
|
||||||
|
self.haptic_feedback = haptic_feedback
|
||||||
|
|
||||||
|
|
||||||
class LockDevice(protobuf.MessageType):
|
class LockDevice(protobuf.MessageType):
|
||||||
@ -3405,6 +3409,7 @@ class ApplySettings(protobuf.MessageType):
|
|||||||
9: protobuf.Field("safety_checks", "SafetyCheckLevel", repeated=False, required=False, default=None),
|
9: protobuf.Field("safety_checks", "SafetyCheckLevel", repeated=False, required=False, default=None),
|
||||||
10: protobuf.Field("experimental_features", "bool", repeated=False, required=False, default=None),
|
10: protobuf.Field("experimental_features", "bool", repeated=False, required=False, default=None),
|
||||||
11: protobuf.Field("hide_passphrase_from_host", "bool", repeated=False, required=False, default=None),
|
11: protobuf.Field("hide_passphrase_from_host", "bool", repeated=False, required=False, default=None),
|
||||||
|
13: protobuf.Field("haptic_feedback", "bool", repeated=False, required=False, default=None),
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
@ -3421,6 +3426,7 @@ class ApplySettings(protobuf.MessageType):
|
|||||||
safety_checks: Optional["SafetyCheckLevel"] = None,
|
safety_checks: Optional["SafetyCheckLevel"] = None,
|
||||||
experimental_features: Optional["bool"] = None,
|
experimental_features: Optional["bool"] = None,
|
||||||
hide_passphrase_from_host: Optional["bool"] = None,
|
hide_passphrase_from_host: Optional["bool"] = None,
|
||||||
|
haptic_feedback: Optional["bool"] = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
self.language = language
|
self.language = language
|
||||||
self.label = label
|
self.label = label
|
||||||
@ -3433,6 +3439,7 @@ class ApplySettings(protobuf.MessageType):
|
|||||||
self.safety_checks = safety_checks
|
self.safety_checks = safety_checks
|
||||||
self.experimental_features = experimental_features
|
self.experimental_features = experimental_features
|
||||||
self.hide_passphrase_from_host = hide_passphrase_from_host
|
self.hide_passphrase_from_host = hide_passphrase_from_host
|
||||||
|
self.haptic_feedback = haptic_feedback
|
||||||
|
|
||||||
|
|
||||||
class ChangeLanguage(protobuf.MessageType):
|
class ChangeLanguage(protobuf.MessageType):
|
||||||
|
@ -462,6 +462,8 @@ pub struct Features {
|
|||||||
pub language_version_matches: ::std::option::Option<bool>,
|
pub language_version_matches: ::std::option::Option<bool>,
|
||||||
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.unit_packaging)
|
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.unit_packaging)
|
||||||
pub unit_packaging: ::std::option::Option<u32>,
|
pub unit_packaging: ::std::option::Option<u32>,
|
||||||
|
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.haptic_feedback)
|
||||||
|
pub haptic_feedback: ::std::option::Option<bool>,
|
||||||
// special fields
|
// special fields
|
||||||
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.Features.special_fields)
|
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.Features.special_fields)
|
||||||
pub special_fields: ::protobuf::SpecialFields,
|
pub special_fields: ::protobuf::SpecialFields,
|
||||||
@ -1569,8 +1571,27 @@ impl Features {
|
|||||||
self.unit_packaging = ::std::option::Option::Some(v);
|
self.unit_packaging = ::std::option::Option::Some(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional bool haptic_feedback = 52;
|
||||||
|
|
||||||
|
pub fn haptic_feedback(&self) -> bool {
|
||||||
|
self.haptic_feedback.unwrap_or(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn clear_haptic_feedback(&mut self) {
|
||||||
|
self.haptic_feedback = ::std::option::Option::None;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn has_haptic_feedback(&self) -> bool {
|
||||||
|
self.haptic_feedback.is_some()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Param is passed by value, moved
|
||||||
|
pub fn set_haptic_feedback(&mut self, v: bool) {
|
||||||
|
self.haptic_feedback = ::std::option::Option::Some(v);
|
||||||
|
}
|
||||||
|
|
||||||
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
|
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
|
||||||
let mut fields = ::std::vec::Vec::with_capacity(49);
|
let mut fields = ::std::vec::Vec::with_capacity(50);
|
||||||
let mut oneofs = ::std::vec::Vec::with_capacity(0);
|
let mut oneofs = ::std::vec::Vec::with_capacity(0);
|
||||||
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||||
"vendor",
|
"vendor",
|
||||||
@ -1817,6 +1838,11 @@ impl Features {
|
|||||||
|m: &Features| { &m.unit_packaging },
|
|m: &Features| { &m.unit_packaging },
|
||||||
|m: &mut Features| { &mut m.unit_packaging },
|
|m: &mut Features| { &mut m.unit_packaging },
|
||||||
));
|
));
|
||||||
|
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||||
|
"haptic_feedback",
|
||||||
|
|m: &Features| { &m.haptic_feedback },
|
||||||
|
|m: &mut Features| { &mut m.haptic_feedback },
|
||||||
|
));
|
||||||
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Features>(
|
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<Features>(
|
||||||
"Features",
|
"Features",
|
||||||
fields,
|
fields,
|
||||||
@ -1994,6 +2020,9 @@ impl ::protobuf::Message for Features {
|
|||||||
408 => {
|
408 => {
|
||||||
self.unit_packaging = ::std::option::Option::Some(is.read_uint32()?);
|
self.unit_packaging = ::std::option::Option::Some(is.read_uint32()?);
|
||||||
},
|
},
|
||||||
|
416 => {
|
||||||
|
self.haptic_feedback = ::std::option::Option::Some(is.read_bool()?);
|
||||||
|
},
|
||||||
tag => {
|
tag => {
|
||||||
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
|
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
|
||||||
},
|
},
|
||||||
@ -2153,6 +2182,9 @@ impl ::protobuf::Message for Features {
|
|||||||
if let Some(v) = self.unit_packaging {
|
if let Some(v) = self.unit_packaging {
|
||||||
my_size += ::protobuf::rt::uint32_size(51, v);
|
my_size += ::protobuf::rt::uint32_size(51, v);
|
||||||
}
|
}
|
||||||
|
if let Some(v) = self.haptic_feedback {
|
||||||
|
my_size += 2 + 1;
|
||||||
|
}
|
||||||
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
|
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
|
||||||
self.special_fields.cached_size().set(my_size as u32);
|
self.special_fields.cached_size().set(my_size as u32);
|
||||||
my_size
|
my_size
|
||||||
@ -2306,6 +2338,9 @@ impl ::protobuf::Message for Features {
|
|||||||
if let Some(v) = self.unit_packaging {
|
if let Some(v) = self.unit_packaging {
|
||||||
os.write_uint32(51, v)?;
|
os.write_uint32(51, v)?;
|
||||||
}
|
}
|
||||||
|
if let Some(v) = self.haptic_feedback {
|
||||||
|
os.write_bool(52, v)?;
|
||||||
|
}
|
||||||
os.write_unknown_fields(self.special_fields.unknown_fields())?;
|
os.write_unknown_fields(self.special_fields.unknown_fields())?;
|
||||||
::std::result::Result::Ok(())
|
::std::result::Result::Ok(())
|
||||||
}
|
}
|
||||||
@ -2372,6 +2407,7 @@ impl ::protobuf::Message for Features {
|
|||||||
self.bootloader_locked = ::std::option::Option::None;
|
self.bootloader_locked = ::std::option::Option::None;
|
||||||
self.language_version_matches = ::std::option::Option::None;
|
self.language_version_matches = ::std::option::Option::None;
|
||||||
self.unit_packaging = ::std::option::Option::None;
|
self.unit_packaging = ::std::option::Option::None;
|
||||||
|
self.haptic_feedback = ::std::option::Option::None;
|
||||||
self.special_fields.clear();
|
self.special_fields.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2426,6 +2462,7 @@ impl ::protobuf::Message for Features {
|
|||||||
bootloader_locked: ::std::option::Option::None,
|
bootloader_locked: ::std::option::Option::None,
|
||||||
language_version_matches: ::std::option::Option::None,
|
language_version_matches: ::std::option::Option::None,
|
||||||
unit_packaging: ::std::option::Option::None,
|
unit_packaging: ::std::option::Option::None,
|
||||||
|
haptic_feedback: ::std::option::Option::None,
|
||||||
special_fields: ::protobuf::SpecialFields::new(),
|
special_fields: ::protobuf::SpecialFields::new(),
|
||||||
};
|
};
|
||||||
&instance
|
&instance
|
||||||
@ -2494,6 +2531,8 @@ pub mod features {
|
|||||||
Capability_Translations = 19,
|
Capability_Translations = 19,
|
||||||
// @@protoc_insertion_point(enum_value:hw.trezor.messages.management.Features.Capability.Capability_Brightness)
|
// @@protoc_insertion_point(enum_value:hw.trezor.messages.management.Features.Capability.Capability_Brightness)
|
||||||
Capability_Brightness = 20,
|
Capability_Brightness = 20,
|
||||||
|
// @@protoc_insertion_point(enum_value:hw.trezor.messages.management.Features.Capability.Capability_Haptic)
|
||||||
|
Capability_Haptic = 21,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ::protobuf::Enum for Capability {
|
impl ::protobuf::Enum for Capability {
|
||||||
@ -2525,6 +2564,7 @@ pub mod features {
|
|||||||
18 => ::std::option::Option::Some(Capability::Capability_Solana),
|
18 => ::std::option::Option::Some(Capability::Capability_Solana),
|
||||||
19 => ::std::option::Option::Some(Capability::Capability_Translations),
|
19 => ::std::option::Option::Some(Capability::Capability_Translations),
|
||||||
20 => ::std::option::Option::Some(Capability::Capability_Brightness),
|
20 => ::std::option::Option::Some(Capability::Capability_Brightness),
|
||||||
|
21 => ::std::option::Option::Some(Capability::Capability_Haptic),
|
||||||
_ => ::std::option::Option::None
|
_ => ::std::option::Option::None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2551,6 +2591,7 @@ pub mod features {
|
|||||||
"Capability_Solana" => ::std::option::Option::Some(Capability::Capability_Solana),
|
"Capability_Solana" => ::std::option::Option::Some(Capability::Capability_Solana),
|
||||||
"Capability_Translations" => ::std::option::Option::Some(Capability::Capability_Translations),
|
"Capability_Translations" => ::std::option::Option::Some(Capability::Capability_Translations),
|
||||||
"Capability_Brightness" => ::std::option::Option::Some(Capability::Capability_Brightness),
|
"Capability_Brightness" => ::std::option::Option::Some(Capability::Capability_Brightness),
|
||||||
|
"Capability_Haptic" => ::std::option::Option::Some(Capability::Capability_Haptic),
|
||||||
_ => ::std::option::Option::None
|
_ => ::std::option::Option::None
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2576,6 +2617,7 @@ pub mod features {
|
|||||||
Capability::Capability_Solana,
|
Capability::Capability_Solana,
|
||||||
Capability::Capability_Translations,
|
Capability::Capability_Translations,
|
||||||
Capability::Capability_Brightness,
|
Capability::Capability_Brightness,
|
||||||
|
Capability::Capability_Haptic,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2607,6 +2649,7 @@ pub mod features {
|
|||||||
Capability::Capability_Solana => 17,
|
Capability::Capability_Solana => 17,
|
||||||
Capability::Capability_Translations => 18,
|
Capability::Capability_Translations => 18,
|
||||||
Capability::Capability_Brightness => 19,
|
Capability::Capability_Brightness => 19,
|
||||||
|
Capability::Capability_Haptic => 20,
|
||||||
};
|
};
|
||||||
Self::enum_descriptor().value_by_index(index)
|
Self::enum_descriptor().value_by_index(index)
|
||||||
}
|
}
|
||||||
@ -2999,6 +3042,8 @@ pub struct ApplySettings {
|
|||||||
pub experimental_features: ::std::option::Option<bool>,
|
pub experimental_features: ::std::option::Option<bool>,
|
||||||
// @@protoc_insertion_point(field:hw.trezor.messages.management.ApplySettings.hide_passphrase_from_host)
|
// @@protoc_insertion_point(field:hw.trezor.messages.management.ApplySettings.hide_passphrase_from_host)
|
||||||
pub hide_passphrase_from_host: ::std::option::Option<bool>,
|
pub hide_passphrase_from_host: ::std::option::Option<bool>,
|
||||||
|
// @@protoc_insertion_point(field:hw.trezor.messages.management.ApplySettings.haptic_feedback)
|
||||||
|
pub haptic_feedback: ::std::option::Option<bool>,
|
||||||
// special fields
|
// special fields
|
||||||
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.ApplySettings.special_fields)
|
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.ApplySettings.special_fields)
|
||||||
pub special_fields: ::protobuf::SpecialFields,
|
pub special_fields: ::protobuf::SpecialFields,
|
||||||
@ -3278,8 +3323,27 @@ impl ApplySettings {
|
|||||||
self.hide_passphrase_from_host = ::std::option::Option::Some(v);
|
self.hide_passphrase_from_host = ::std::option::Option::Some(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// optional bool haptic_feedback = 13;
|
||||||
|
|
||||||
|
pub fn haptic_feedback(&self) -> bool {
|
||||||
|
self.haptic_feedback.unwrap_or(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn clear_haptic_feedback(&mut self) {
|
||||||
|
self.haptic_feedback = ::std::option::Option::None;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn has_haptic_feedback(&self) -> bool {
|
||||||
|
self.haptic_feedback.is_some()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Param is passed by value, moved
|
||||||
|
pub fn set_haptic_feedback(&mut self, v: bool) {
|
||||||
|
self.haptic_feedback = ::std::option::Option::Some(v);
|
||||||
|
}
|
||||||
|
|
||||||
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
|
fn generated_message_descriptor_data() -> ::protobuf::reflect::GeneratedMessageDescriptorData {
|
||||||
let mut fields = ::std::vec::Vec::with_capacity(11);
|
let mut fields = ::std::vec::Vec::with_capacity(12);
|
||||||
let mut oneofs = ::std::vec::Vec::with_capacity(0);
|
let mut oneofs = ::std::vec::Vec::with_capacity(0);
|
||||||
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||||
"language",
|
"language",
|
||||||
@ -3336,6 +3400,11 @@ impl ApplySettings {
|
|||||||
|m: &ApplySettings| { &m.hide_passphrase_from_host },
|
|m: &ApplySettings| { &m.hide_passphrase_from_host },
|
||||||
|m: &mut ApplySettings| { &mut m.hide_passphrase_from_host },
|
|m: &mut ApplySettings| { &mut m.hide_passphrase_from_host },
|
||||||
));
|
));
|
||||||
|
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
|
||||||
|
"haptic_feedback",
|
||||||
|
|m: &ApplySettings| { &m.haptic_feedback },
|
||||||
|
|m: &mut ApplySettings| { &mut m.haptic_feedback },
|
||||||
|
));
|
||||||
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ApplySettings>(
|
::protobuf::reflect::GeneratedMessageDescriptorData::new_2::<ApplySettings>(
|
||||||
"ApplySettings",
|
"ApplySettings",
|
||||||
fields,
|
fields,
|
||||||
@ -3387,6 +3456,9 @@ impl ::protobuf::Message for ApplySettings {
|
|||||||
88 => {
|
88 => {
|
||||||
self.hide_passphrase_from_host = ::std::option::Option::Some(is.read_bool()?);
|
self.hide_passphrase_from_host = ::std::option::Option::Some(is.read_bool()?);
|
||||||
},
|
},
|
||||||
|
104 => {
|
||||||
|
self.haptic_feedback = ::std::option::Option::Some(is.read_bool()?);
|
||||||
|
},
|
||||||
tag => {
|
tag => {
|
||||||
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
|
::protobuf::rt::read_unknown_or_skip_group(tag, is, self.special_fields.mut_unknown_fields())?;
|
||||||
},
|
},
|
||||||
@ -3432,6 +3504,9 @@ impl ::protobuf::Message for ApplySettings {
|
|||||||
if let Some(v) = self.hide_passphrase_from_host {
|
if let Some(v) = self.hide_passphrase_from_host {
|
||||||
my_size += 1 + 1;
|
my_size += 1 + 1;
|
||||||
}
|
}
|
||||||
|
if let Some(v) = self.haptic_feedback {
|
||||||
|
my_size += 1 + 1;
|
||||||
|
}
|
||||||
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
|
my_size += ::protobuf::rt::unknown_fields_size(self.special_fields.unknown_fields());
|
||||||
self.special_fields.cached_size().set(my_size as u32);
|
self.special_fields.cached_size().set(my_size as u32);
|
||||||
my_size
|
my_size
|
||||||
@ -3471,6 +3546,9 @@ impl ::protobuf::Message for ApplySettings {
|
|||||||
if let Some(v) = self.hide_passphrase_from_host {
|
if let Some(v) = self.hide_passphrase_from_host {
|
||||||
os.write_bool(11, v)?;
|
os.write_bool(11, v)?;
|
||||||
}
|
}
|
||||||
|
if let Some(v) = self.haptic_feedback {
|
||||||
|
os.write_bool(13, v)?;
|
||||||
|
}
|
||||||
os.write_unknown_fields(self.special_fields.unknown_fields())?;
|
os.write_unknown_fields(self.special_fields.unknown_fields())?;
|
||||||
::std::result::Result::Ok(())
|
::std::result::Result::Ok(())
|
||||||
}
|
}
|
||||||
@ -3499,6 +3577,7 @@ impl ::protobuf::Message for ApplySettings {
|
|||||||
self.safety_checks = ::std::option::Option::None;
|
self.safety_checks = ::std::option::Option::None;
|
||||||
self.experimental_features = ::std::option::Option::None;
|
self.experimental_features = ::std::option::Option::None;
|
||||||
self.hide_passphrase_from_host = ::std::option::Option::None;
|
self.hide_passphrase_from_host = ::std::option::Option::None;
|
||||||
|
self.haptic_feedback = ::std::option::Option::None;
|
||||||
self.special_fields.clear();
|
self.special_fields.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3515,6 +3594,7 @@ impl ::protobuf::Message for ApplySettings {
|
|||||||
safety_checks: ::std::option::Option::None,
|
safety_checks: ::std::option::Option::None,
|
||||||
experimental_features: ::std::option::Option::None,
|
experimental_features: ::std::option::Option::None,
|
||||||
hide_passphrase_from_host: ::std::option::Option::None,
|
hide_passphrase_from_host: ::std::option::Option::None,
|
||||||
|
haptic_feedback: ::std::option::Option::None,
|
||||||
special_fields: ::protobuf::SpecialFields::new(),
|
special_fields: ::protobuf::SpecialFields::new(),
|
||||||
};
|
};
|
||||||
&instance
|
&instance
|
||||||
@ -10759,7 +10839,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\
|
|||||||
\x0emessages.proto\"\x80\x01\n\nInitialize\x12\x1d\n\nsession_id\x18\x01\
|
\x0emessages.proto\"\x80\x01\n\nInitialize\x12\x1d\n\nsession_id\x18\x01\
|
||||||
\x20\x01(\x0cR\tsessionId\x12,\n\x10_skip_passphrase\x18\x02\x20\x01(\
|
\x20\x01(\x0cR\tsessionId\x12,\n\x10_skip_passphrase\x18\x02\x20\x01(\
|
||||||
\x08R\x0eSkipPassphraseB\x02\x18\x01\x12%\n\x0ederive_cardano\x18\x03\
|
\x08R\x0eSkipPassphraseB\x02\x18\x01\x12%\n\x0ederive_cardano\x18\x03\
|
||||||
\x20\x01(\x08R\rderiveCardano\"\r\n\x0bGetFeatures\"\x9b\x14\n\x08Featur\
|
\x20\x01(\x08R\rderiveCardano\"\r\n\x0bGetFeatures\"\xe1\x14\n\x08Featur\
|
||||||
es\x12\x16\n\x06vendor\x18\x01\x20\x01(\tR\x06vendor\x12#\n\rmajor_versi\
|
es\x12\x16\n\x06vendor\x18\x01\x20\x01(\tR\x06vendor\x12#\n\rmajor_versi\
|
||||||
on\x18\x02\x20\x02(\rR\x0cmajorVersion\x12#\n\rminor_version\x18\x03\x20\
|
on\x18\x02\x20\x02(\rR\x0cmajorVersion\x12#\n\rminor_version\x18\x03\x20\
|
||||||
\x02(\rR\x0cminorVersion\x12#\n\rpatch_version\x18\x04\x20\x02(\rR\x0cpa\
|
\x02(\rR\x0cminorVersion\x12#\n\rpatch_version\x18\x04\x20\x02(\rR\x0cpa\
|
||||||
@ -10804,118 +10884,121 @@ static file_descriptor_proto_data: &'static [u8] = b"\
|
|||||||
\x180\x20\x01(\rR\x10homescreenHeight\x12+\n\x11bootloader_locked\x181\
|
\x180\x20\x01(\rR\x10homescreenHeight\x12+\n\x11bootloader_locked\x181\
|
||||||
\x20\x01(\x08R\x10bootloaderLocked\x12>\n\x18language_version_matches\
|
\x20\x01(\x08R\x10bootloaderLocked\x12>\n\x18language_version_matches\
|
||||||
\x182\x20\x01(\x08:\x04trueR\x16languageVersionMatches\x12%\n\x0eunit_pa\
|
\x182\x20\x01(\x08:\x04trueR\x16languageVersionMatches\x12%\n\x0eunit_pa\
|
||||||
ckaging\x183\x20\x01(\rR\runitPackaging\"\xa5\x04\n\nCapability\x12\x1c\
|
ckaging\x183\x20\x01(\rR\runitPackaging\x12'\n\x0fhaptic_feedback\x184\
|
||||||
\n\x12Capability_Bitcoin\x10\x01\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x17Ca\
|
\x20\x01(\x08R\x0ehapticFeedback\"\xc2\x04\n\nCapability\x12\x1c\n\x12Ca\
|
||||||
pability_Bitcoin_like\x10\x02\x12\x16\n\x12Capability_Binance\x10\x03\
|
pability_Bitcoin\x10\x01\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x17Capability\
|
||||||
\x12\x16\n\x12Capability_Cardano\x10\x04\x12\x1b\n\x11Capability_Crypto\
|
_Bitcoin_like\x10\x02\x12\x16\n\x12Capability_Binance\x10\x03\x12\x16\n\
|
||||||
\x10\x05\x1a\x04\x80\xa6\x1d\x01\x12\x12\n\x0eCapability_EOS\x10\x06\x12\
|
\x12Capability_Cardano\x10\x04\x12\x1b\n\x11Capability_Crypto\x10\x05\
|
||||||
\x17\n\x13Capability_Ethereum\x10\x07\x12\x17\n\x0fCapability_Lisk\x10\
|
\x1a\x04\x80\xa6\x1d\x01\x12\x12\n\x0eCapability_EOS\x10\x06\x12\x17\n\
|
||||||
\x08\x1a\x02\x08\x01\x12\x15\n\x11Capability_Monero\x10\t\x12\x12\n\x0eC\
|
\x13Capability_Ethereum\x10\x07\x12\x17\n\x0fCapability_Lisk\x10\x08\x1a\
|
||||||
apability_NEM\x10\n\x12\x15\n\x11Capability_Ripple\x10\x0b\x12\x16\n\x12\
|
\x02\x08\x01\x12\x15\n\x11Capability_Monero\x10\t\x12\x12\n\x0eCapabilit\
|
||||||
Capability_Stellar\x10\x0c\x12\x14\n\x10Capability_Tezos\x10\r\x12\x12\n\
|
y_NEM\x10\n\x12\x15\n\x11Capability_Ripple\x10\x0b\x12\x16\n\x12Capabili\
|
||||||
\x0eCapability_U2F\x10\x0e\x12\x1b\n\x11Capability_Shamir\x10\x0f\x1a\
|
ty_Stellar\x10\x0c\x12\x14\n\x10Capability_Tezos\x10\r\x12\x12\n\x0eCapa\
|
||||||
\x04\x80\xa6\x1d\x01\x12!\n\x17Capability_ShamirGroups\x10\x10\x1a\x04\
|
bility_U2F\x10\x0e\x12\x1b\n\x11Capability_Shamir\x10\x0f\x1a\x04\x80\
|
||||||
\x80\xa6\x1d\x01\x12$\n\x1aCapability_PassphraseEntry\x10\x11\x1a\x04\
|
\xa6\x1d\x01\x12!\n\x17Capability_ShamirGroups\x10\x10\x1a\x04\x80\xa6\
|
||||||
\x80\xa6\x1d\x01\x12\x15\n\x11Capability_Solana\x10\x12\x12!\n\x17Capabi\
|
\x1d\x01\x12$\n\x1aCapability_PassphraseEntry\x10\x11\x1a\x04\x80\xa6\
|
||||||
lity_Translations\x10\x13\x1a\x04\x80\xa6\x1d\x01\x12\x1f\n\x15Capabilit\
|
\x1d\x01\x12\x15\n\x11Capability_Solana\x10\x12\x12!\n\x17Capability_Tra\
|
||||||
y_Brightness\x10\x14\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\x01\"\
|
nslations\x10\x13\x1a\x04\x80\xa6\x1d\x01\x12\x1f\n\x15Capability_Bright\
|
||||||
\x0c\n\nLockDevice\"&\n\x07SetBusy\x12\x1b\n\texpiry_ms\x18\x01\x20\x01(\
|
ness\x10\x14\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x11Capability_Haptic\x10\
|
||||||
\rR\x08expiryMs\"\x0c\n\nEndSession\"\x9b\x04\n\rApplySettings\x12\x1e\n\
|
\x15\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\x01\"\x0c\n\nLockDevice\
|
||||||
\x08language\x18\x01\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05l\
|
\"&\n\x07SetBusy\x12\x1b\n\texpiry_ms\x18\x01\x20\x01(\rR\x08expiryMs\"\
|
||||||
abel\x18\x02\x20\x01(\tR\x05label\x12%\n\x0euse_passphrase\x18\x03\x20\
|
\x0c\n\nEndSession\"\xc4\x04\n\rApplySettings\x12\x1e\n\x08language\x18\
|
||||||
\x01(\x08R\rusePassphrase\x12\x1e\n\nhomescreen\x18\x04\x20\x01(\x0cR\nh\
|
\x01\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x02\x20\
|
||||||
omescreen\x120\n\x12_passphrase_source\x18\x05\x20\x01(\rR\x10Passphrase\
|
\x01(\tR\x05label\x12%\n\x0euse_passphrase\x18\x03\x20\x01(\x08R\rusePas\
|
||||||
SourceB\x02\x18\x01\x12+\n\x12auto_lock_delay_ms\x18\x06\x20\x01(\rR\x0f\
|
sphrase\x12\x1e\n\nhomescreen\x18\x04\x20\x01(\x0cR\nhomescreen\x120\n\
|
||||||
autoLockDelayMs\x12)\n\x10display_rotation\x18\x07\x20\x01(\rR\x0fdispla\
|
\x12_passphrase_source\x18\x05\x20\x01(\rR\x10PassphraseSourceB\x02\x18\
|
||||||
yRotation\x12=\n\x1bpassphrase_always_on_device\x18\x08\x20\x01(\x08R\
|
\x01\x12+\n\x12auto_lock_delay_ms\x18\x06\x20\x01(\rR\x0fautoLockDelayMs\
|
||||||
\x18passphraseAlwaysOnDevice\x12T\n\rsafety_checks\x18\t\x20\x01(\x0e2/.\
|
\x12)\n\x10display_rotation\x18\x07\x20\x01(\rR\x0fdisplayRotation\x12=\
|
||||||
hw.trezor.messages.management.SafetyCheckLevelR\x0csafetyChecks\x123\n\
|
\n\x1bpassphrase_always_on_device\x18\x08\x20\x01(\x08R\x18passphraseAlw\
|
||||||
\x15experimental_features\x18\n\x20\x01(\x08R\x14experimentalFeatures\
|
aysOnDevice\x12T\n\rsafety_checks\x18\t\x20\x01(\x0e2/.hw.trezor.message\
|
||||||
\x129\n\x19hide_passphrase_from_host\x18\x0b\x20\x01(\x08R\x16hidePassph\
|
s.management.SafetyCheckLevelR\x0csafetyChecks\x123\n\x15experimental_fe\
|
||||||
raseFromHost\"T\n\x0eChangeLanguage\x12\x1f\n\x0bdata_length\x18\x01\x20\
|
atures\x18\n\x20\x01(\x08R\x14experimentalFeatures\x129\n\x19hide_passph\
|
||||||
\x02(\rR\ndataLength\x12!\n\x0cshow_display\x18\x02\x20\x01(\x08R\x0bsho\
|
rase_from_host\x18\x0b\x20\x01(\x08R\x16hidePassphraseFromHost\x12'\n\
|
||||||
wDisplay\"Z\n\x16TranslationDataRequest\x12\x1f\n\x0bdata_length\x18\x01\
|
\x0fhaptic_feedback\x18\r\x20\x01(\x08R\x0ehapticFeedback\"T\n\x0eChange\
|
||||||
\x20\x02(\rR\ndataLength\x12\x1f\n\x0bdata_offset\x18\x02\x20\x02(\rR\nd\
|
Language\x12\x1f\n\x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\x12!\n\
|
||||||
ataOffset\"3\n\x12TranslationDataAck\x12\x1d\n\ndata_chunk\x18\x01\x20\
|
\x0cshow_display\x18\x02\x20\x01(\x08R\x0bshowDisplay\"Z\n\x16Translatio\
|
||||||
\x02(\x0cR\tdataChunk\"\"\n\nApplyFlags\x12\x14\n\x05flags\x18\x01\x20\
|
nDataRequest\x12\x1f\n\x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\
|
||||||
\x02(\rR\x05flags\"#\n\tChangePin\x12\x16\n\x06remove\x18\x01\x20\x01(\
|
\x12\x1f\n\x0bdata_offset\x18\x02\x20\x02(\rR\ndataOffset\"3\n\x12Transl\
|
||||||
\x08R\x06remove\"(\n\x0eChangeWipeCode\x12\x16\n\x06remove\x18\x01\x20\
|
ationDataAck\x12\x1d\n\ndata_chunk\x18\x01\x20\x02(\x0cR\tdataChunk\"\"\
|
||||||
\x01(\x08R\x06remove\"\xaa\x01\n\tSdProtect\x12]\n\toperation\x18\x01\
|
\n\nApplyFlags\x12\x14\n\x05flags\x18\x01\x20\x02(\rR\x05flags\"#\n\tCha\
|
||||||
\x20\x02(\x0e2?.hw.trezor.messages.management.SdProtect.SdProtectOperati\
|
ngePin\x12\x16\n\x06remove\x18\x01\x20\x01(\x08R\x06remove\"(\n\x0eChang\
|
||||||
onTypeR\toperation\">\n\x16SdProtectOperationType\x12\x0b\n\x07DISABLE\
|
eWipeCode\x12\x16\n\x06remove\x18\x01\x20\x01(\x08R\x06remove\"\xaa\x01\
|
||||||
\x10\0\x12\n\n\x06ENABLE\x10\x01\x12\x0b\n\x07REFRESH\x10\x02\"O\n\x04Pi\
|
\n\tSdProtect\x12]\n\toperation\x18\x01\x20\x02(\x0e2?.hw.trezor.message\
|
||||||
ng\x12\x1a\n\x07message\x18\x01\x20\x01(\t:\0R\x07message\x12+\n\x11butt\
|
s.management.SdProtect.SdProtectOperationTypeR\toperation\">\n\x16SdProt\
|
||||||
on_protection\x18\x02\x20\x01(\x08R\x10buttonProtection\"\x08\n\x06Cance\
|
ectOperationType\x12\x0b\n\x07DISABLE\x10\0\x12\n\n\x06ENABLE\x10\x01\
|
||||||
l\"\x20\n\nGetEntropy\x12\x12\n\x04size\x18\x01\x20\x02(\rR\x04size\"#\n\
|
\x12\x0b\n\x07REFRESH\x10\x02\"O\n\x04Ping\x12\x1a\n\x07message\x18\x01\
|
||||||
\x07Entropy\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"/\n\
|
\x20\x01(\t:\0R\x07message\x12+\n\x11button_protection\x18\x02\x20\x01(\
|
||||||
\x0fGetFirmwareHash\x12\x1c\n\tchallenge\x18\x01\x20\x01(\x0cR\tchalleng\
|
\x08R\x10buttonProtection\"\x08\n\x06Cancel\"\x20\n\nGetEntropy\x12\x12\
|
||||||
e\"\"\n\x0cFirmwareHash\x12\x12\n\x04hash\x18\x01\x20\x02(\x0cR\x04hash\
|
\n\x04size\x18\x01\x20\x02(\rR\x04size\"#\n\x07Entropy\x12\x18\n\x07entr\
|
||||||
\"2\n\x12AuthenticateDevice\x12\x1c\n\tchallenge\x18\x01\x20\x02(\x0cR\t\
|
opy\x18\x01\x20\x02(\x0cR\x07entropy\"/\n\x0fGetFirmwareHash\x12\x1c\n\t\
|
||||||
challenge\"U\n\x11AuthenticityProof\x12\"\n\x0ccertificates\x18\x01\x20\
|
challenge\x18\x01\x20\x01(\x0cR\tchallenge\"\"\n\x0cFirmwareHash\x12\x12\
|
||||||
\x03(\x0cR\x0ccertificates\x12\x1c\n\tsignature\x18\x02\x20\x02(\x0cR\ts\
|
\n\x04hash\x18\x01\x20\x02(\x0cR\x04hash\"2\n\x12AuthenticateDevice\x12\
|
||||||
ignature\"\x0c\n\nWipeDevice\"\xad\x02\n\nLoadDevice\x12\x1c\n\tmnemonic\
|
\x1c\n\tchallenge\x18\x01\x20\x02(\x0cR\tchallenge\"U\n\x11AuthenticityP\
|
||||||
s\x18\x01\x20\x03(\tR\tmnemonics\x12\x10\n\x03pin\x18\x03\x20\x01(\tR\
|
roof\x12\"\n\x0ccertificates\x18\x01\x20\x03(\x0cR\x0ccertificates\x12\
|
||||||
\x03pin\x123\n\x15passphrase_protection\x18\x04\x20\x01(\x08R\x14passphr\
|
\x1c\n\tsignature\x18\x02\x20\x02(\x0cR\tsignature\"\x0c\n\nWipeDevice\"\
|
||||||
aseProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08languageB\x02\
|
\xad\x02\n\nLoadDevice\x12\x1c\n\tmnemonics\x18\x01\x20\x03(\tR\tmnemoni\
|
||||||
\x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12#\n\rskip_ch\
|
cs\x12\x10\n\x03pin\x18\x03\x20\x01(\tR\x03pin\x123\n\x15passphrase_prot\
|
||||||
ecksum\x18\x07\x20\x01(\x08R\x0cskipChecksum\x12\x1f\n\x0bu2f_counter\
|
ection\x18\x04\x20\x01(\x08R\x14passphraseProtection\x12\x1e\n\x08langua\
|
||||||
\x18\x08\x20\x01(\rR\nu2fCounter\x12!\n\x0cneeds_backup\x18\t\x20\x01(\
|
ge\x18\x05\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\
|
||||||
\x08R\x0bneedsBackup\x12\x1b\n\tno_backup\x18\n\x20\x01(\x08R\x08noBacku\
|
\x06\x20\x01(\tR\x05label\x12#\n\rskip_checksum\x18\x07\x20\x01(\x08R\
|
||||||
p\"\x99\x03\n\x0bResetDevice\x12%\n\x0edisplay_random\x18\x01\x20\x01(\
|
\x0cskipChecksum\x12\x1f\n\x0bu2f_counter\x18\x08\x20\x01(\rR\nu2fCounte\
|
||||||
\x08R\rdisplayRandom\x12\x1f\n\x08strength\x18\x02\x20\x01(\r:\x03256R\
|
r\x12!\n\x0cneeds_backup\x18\t\x20\x01(\x08R\x0bneedsBackup\x12\x1b\n\tn\
|
||||||
\x08strength\x123\n\x15passphrase_protection\x18\x03\x20\x01(\x08R\x14pa\
|
o_backup\x18\n\x20\x01(\x08R\x08noBackup\"\x99\x03\n\x0bResetDevice\x12%\
|
||||||
ssphraseProtection\x12%\n\x0epin_protection\x18\x04\x20\x01(\x08R\rpinPr\
|
\n\x0edisplay_random\x18\x01\x20\x01(\x08R\rdisplayRandom\x12\x1f\n\x08s\
|
||||||
otection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08languageB\x02\x18\
|
trength\x18\x02\x20\x01(\r:\x03256R\x08strength\x123\n\x15passphrase_pro\
|
||||||
\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12\x1f\n\x0bu2f_co\
|
tection\x18\x03\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_prot\
|
||||||
unter\x18\x07\x20\x01(\rR\nu2fCounter\x12\x1f\n\x0bskip_backup\x18\x08\
|
ection\x18\x04\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\x18\
|
||||||
\x20\x01(\x08R\nskipBackup\x12\x1b\n\tno_backup\x18\t\x20\x01(\x08R\x08n\
|
\x05\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x06\x20\
|
||||||
oBackup\x12Q\n\x0bbackup_type\x18\n\x20\x01(\x0e2).hw.trezor.messages.ma\
|
\x01(\tR\x05label\x12\x1f\n\x0bu2f_counter\x18\x07\x20\x01(\rR\nu2fCount\
|
||||||
nagement.BackupType:\x05Bip39R\nbackupType\"\xe5\x01\n\x0cBackupDevice\
|
er\x12\x1f\n\x0bskip_backup\x18\x08\x20\x01(\x08R\nskipBackup\x12\x1b\n\
|
||||||
\x12'\n\x0fgroup_threshold\x18\x01\x20\x01(\rR\x0egroupThreshold\x12O\n\
|
\tno_backup\x18\t\x20\x01(\x08R\x08noBackup\x12Q\n\x0bbackup_type\x18\n\
|
||||||
\x06groups\x18\x02\x20\x03(\x0b27.hw.trezor.messages.management.BackupDe\
|
\x20\x01(\x0e2).hw.trezor.messages.management.BackupType:\x05Bip39R\nbac\
|
||||||
vice.Slip39GroupR\x06groups\x1a[\n\x0bSlip39Group\x12)\n\x10member_thres\
|
kupType\"\xe5\x01\n\x0cBackupDevice\x12'\n\x0fgroup_threshold\x18\x01\
|
||||||
hold\x18\x01\x20\x02(\rR\x0fmemberThreshold\x12!\n\x0cmember_count\x18\
|
\x20\x01(\rR\x0egroupThreshold\x12O\n\x06groups\x18\x02\x20\x03(\x0b27.h\
|
||||||
\x02\x20\x02(\rR\x0bmemberCount\"\x10\n\x0eEntropyRequest\"&\n\nEntropyA\
|
w.trezor.messages.management.BackupDevice.Slip39GroupR\x06groups\x1a[\n\
|
||||||
ck\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"\xd8\x03\n\x0e\
|
\x0bSlip39Group\x12)\n\x10member_threshold\x18\x01\x20\x02(\rR\x0fmember\
|
||||||
RecoveryDevice\x12\x1d\n\nword_count\x18\x01\x20\x01(\rR\twordCount\x123\
|
Threshold\x12!\n\x0cmember_count\x18\x02\x20\x02(\rR\x0bmemberCount\"\
|
||||||
\n\x15passphrase_protection\x18\x02\x20\x01(\x08R\x14passphraseProtectio\
|
\x10\n\x0eEntropyRequest\"&\n\nEntropyAck\x12\x18\n\x07entropy\x18\x01\
|
||||||
n\x12%\n\x0epin_protection\x18\x03\x20\x01(\x08R\rpinProtection\x12\x1e\
|
\x20\x02(\x0cR\x07entropy\"\xd8\x03\n\x0eRecoveryDevice\x12\x1d\n\nword_\
|
||||||
\n\x08language\x18\x04\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\
|
count\x18\x01\x20\x01(\rR\twordCount\x123\n\x15passphrase_protection\x18\
|
||||||
\x05label\x18\x05\x20\x01(\tR\x05label\x12)\n\x10enforce_wordlist\x18\
|
\x02\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_protection\x18\
|
||||||
\x06\x20\x01(\x08R\x0fenforceWordlist\x12T\n\x04type\x18\x08\x20\x01(\
|
\x03\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\x18\x04\x20\x01(\
|
||||||
\x0e2@.hw.trezor.messages.management.RecoveryDevice.RecoveryDeviceTypeR\
|
\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x05\x20\x01(\tR\x05l\
|
||||||
\x04type\x12\x1f\n\x0bu2f_counter\x18\t\x20\x01(\rR\nu2fCounter\x12\x17\
|
abel\x12)\n\x10enforce_wordlist\x18\x06\x20\x01(\x08R\x0fenforceWordlist\
|
||||||
\n\x07dry_run\x18\n\x20\x01(\x08R\x06dryRun\"Z\n\x12RecoveryDeviceType\
|
\x12T\n\x04type\x18\x08\x20\x01(\x0e2@.hw.trezor.messages.management.Rec\
|
||||||
\x12%\n!RecoveryDeviceType_ScrambledWords\x10\0\x12\x1d\n\x19RecoveryDev\
|
overyDevice.RecoveryDeviceTypeR\x04type\x12\x1f\n\x0bu2f_counter\x18\t\
|
||||||
iceType_Matrix\x10\x01\"\xc5\x01\n\x0bWordRequest\x12N\n\x04type\x18\x01\
|
\x20\x01(\rR\nu2fCounter\x12\x17\n\x07dry_run\x18\n\x20\x01(\x08R\x06dry\
|
||||||
\x20\x02(\x0e2:.hw.trezor.messages.management.WordRequest.WordRequestTyp\
|
Run\"Z\n\x12RecoveryDeviceType\x12%\n!RecoveryDeviceType_ScrambledWords\
|
||||||
eR\x04type\"f\n\x0fWordRequestType\x12\x19\n\x15WordRequestType_Plain\
|
\x10\0\x12\x1d\n\x19RecoveryDeviceType_Matrix\x10\x01\"\xc5\x01\n\x0bWor\
|
||||||
\x10\0\x12\x1b\n\x17WordRequestType_Matrix9\x10\x01\x12\x1b\n\x17WordReq\
|
dRequest\x12N\n\x04type\x18\x01\x20\x02(\x0e2:.hw.trezor.messages.manage\
|
||||||
uestType_Matrix6\x10\x02\"\x1d\n\x07WordAck\x12\x12\n\x04word\x18\x01\
|
ment.WordRequest.WordRequestTypeR\x04type\"f\n\x0fWordRequestType\x12\
|
||||||
\x20\x02(\tR\x04word\"0\n\rSetU2FCounter\x12\x1f\n\x0bu2f_counter\x18\
|
\x19\n\x15WordRequestType_Plain\x10\0\x12\x1b\n\x17WordRequestType_Matri\
|
||||||
\x01\x20\x02(\rR\nu2fCounter\"\x13\n\x11GetNextU2FCounter\"1\n\x0eNextU2\
|
x9\x10\x01\x12\x1b\n\x17WordRequestType_Matrix6\x10\x02\"\x1d\n\x07WordA\
|
||||||
FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x11\
|
ck\x12\x12\n\x04word\x18\x01\x20\x02(\tR\x04word\"0\n\rSetU2FCounter\x12\
|
||||||
\n\x0fDoPreauthorized\"\x16\n\x14PreauthorizedRequest\"\x15\n\x13CancelA\
|
\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x13\n\x11GetNext\
|
||||||
uthorization\"\x9a\x02\n\x12RebootToBootloader\x12o\n\x0cboot_command\
|
U2FCounter\"1\n\x0eNextU2FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\
|
||||||
\x18\x01\x20\x01(\x0e2=.hw.trezor.messages.management.RebootToBootloader\
|
\x02(\rR\nu2fCounter\"\x11\n\x0fDoPreauthorized\"\x16\n\x14Preauthorized\
|
||||||
.BootCommand:\rSTOP_AND_WAITR\x0bbootCommand\x12'\n\x0ffirmware_header\
|
Request\"\x15\n\x13CancelAuthorization\"\x9a\x02\n\x12RebootToBootloader\
|
||||||
\x18\x02\x20\x01(\x0cR\x0efirmwareHeader\x123\n\x14language_data_length\
|
\x12o\n\x0cboot_command\x18\x01\x20\x01(\x0e2=.hw.trezor.messages.manage\
|
||||||
\x18\x03\x20\x01(\r:\x010R\x12languageDataLength\"5\n\x0bBootCommand\x12\
|
ment.RebootToBootloader.BootCommand:\rSTOP_AND_WAITR\x0bbootCommand\x12'\
|
||||||
\x11\n\rSTOP_AND_WAIT\x10\0\x12\x13\n\x0fINSTALL_UPGRADE\x10\x01\"\x10\n\
|
\n\x0ffirmware_header\x18\x02\x20\x01(\x0cR\x0efirmwareHeader\x123\n\x14\
|
||||||
\x08GetNonce:\x04\x88\xb2\x19\x01\"#\n\x05Nonce\x12\x14\n\x05nonce\x18\
|
language_data_length\x18\x03\x20\x01(\r:\x010R\x12languageDataLength\"5\
|
||||||
\x01\x20\x02(\x0cR\x05nonce:\x04\x88\xb2\x19\x01\";\n\nUnlockPath\x12\
|
\n\x0bBootCommand\x12\x11\n\rSTOP_AND_WAIT\x10\0\x12\x13\n\x0fINSTALL_UP\
|
||||||
\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\x10\n\x03mac\x18\
|
GRADE\x10\x01\"\x10\n\x08GetNonce:\x04\x88\xb2\x19\x01\"#\n\x05Nonce\x12\
|
||||||
\x02\x20\x01(\x0cR\x03mac\"'\n\x13UnlockedPathRequest\x12\x10\n\x03mac\
|
\x14\n\x05nonce\x18\x01\x20\x02(\x0cR\x05nonce:\x04\x88\xb2\x19\x01\";\n\
|
||||||
\x18\x01\x20\x01(\x0cR\x03mac\"\x14\n\x12ShowDeviceTutorial\"\x12\n\x10U\
|
\nUnlockPath\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\
|
||||||
nlockBootloader\"%\n\rSetBrightness\x12\x14\n\x05value\x18\x01\x20\x01(\
|
\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac\"'\n\x13UnlockedPathRequest\
|
||||||
\rR\x05value*\x99\x01\n\nBackupType\x12\t\n\x05Bip39\x10\0\x12\x10\n\x0c\
|
\x12\x10\n\x03mac\x18\x01\x20\x01(\x0cR\x03mac\"\x14\n\x12ShowDeviceTuto\
|
||||||
Slip39_Basic\x10\x01\x12\x13\n\x0fSlip39_Advanced\x10\x02\x12\x1c\n\x18S\
|
rial\"\x12\n\x10UnlockBootloader\"%\n\rSetBrightness\x12\x14\n\x05value\
|
||||||
lip39_Single_Extendable\x10\x03\x12\x1b\n\x17Slip39_Basic_Extendable\x10\
|
\x18\x01\x20\x01(\rR\x05value*\x99\x01\n\nBackupType\x12\t\n\x05Bip39\
|
||||||
\x04\x12\x1e\n\x1aSlip39_Advanced_Extendable\x10\x05*G\n\x10SafetyCheckL\
|
\x10\0\x12\x10\n\x0cSlip39_Basic\x10\x01\x12\x13\n\x0fSlip39_Advanced\
|
||||||
evel\x12\n\n\x06Strict\x10\0\x12\x10\n\x0cPromptAlways\x10\x01\x12\x15\n\
|
\x10\x02\x12\x1c\n\x18Slip39_Single_Extendable\x10\x03\x12\x1b\n\x17Slip\
|
||||||
\x11PromptTemporarily\x10\x02*0\n\x10HomescreenFormat\x12\x08\n\x04Toif\
|
39_Basic_Extendable\x10\x04\x12\x1e\n\x1aSlip39_Advanced_Extendable\x10\
|
||||||
\x10\x01\x12\x08\n\x04Jpeg\x10\x02\x12\x08\n\x04ToiG\x10\x03BB\n#com.sat\
|
\x05*G\n\x10SafetyCheckLevel\x12\n\n\x06Strict\x10\0\x12\x10\n\x0cPrompt\
|
||||||
oshilabs.trezor.lib.protobufB\x17TrezorMessageManagement\x80\xa6\x1d\x01\
|
Always\x10\x01\x12\x15\n\x11PromptTemporarily\x10\x02*0\n\x10HomescreenF\
|
||||||
|
ormat\x12\x08\n\x04Toif\x10\x01\x12\x08\n\x04Jpeg\x10\x02\x12\x08\n\x04T\
|
||||||
|
oiG\x10\x03BB\n#com.satoshilabs.trezor.lib.protobufB\x17TrezorMessageMan\
|
||||||
|
agement\x80\xa6\x1d\x01\
|
||||||
";
|
";
|
||||||
|
|
||||||
/// `FileDescriptorProto` object which was a source for this generated file
|
/// `FileDescriptorProto` object which was a source for this generated file
|
||||||
|
Loading…
Reference in New Issue
Block a user