1
0
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:
tychovrahe 2024-05-07 15:46:15 +02:00 committed by TychoVrahe
parent 2e10d440fa
commit b9a55cf2a7
21 changed files with 359 additions and 122 deletions

View File

@ -116,6 +116,7 @@ message Features {
Capability_Solana = 18;
Capability_Translations = 19 [(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 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 language_version_matches = 50 [default=true]; // translation blob version matches firmware 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 bool experimental_features = 10; // enable experimental message types
optional bool hide_passphrase_from_host = 11; // do not show passphrase coming from host
optional bool haptic_feedback = 13; // enable haptic feedback
}
/**

View 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,
};

View File

@ -55,9 +55,12 @@ bool usb_connected_previously = true;
#include "modtrezorio-fatfs.h"
#include "modtrezorio-sdcard.h"
#endif
#ifdef USE_HAPTIC
#include "modtrezorio-haptic.h"
#endif
/// 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_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)},
#endif
#ifdef USE_HAPTIC
{MP_ROM_QSTR(MP_QSTR_haptic), MP_ROM_PTR(&mod_trezorio_haptic_module)},
#endif
#ifdef USE_TOUCH
{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)},

View File

@ -416,6 +416,8 @@ STATIC mp_obj_tuple_t mod_trezorutils_version_obj = {
/// """Whether the hardware supports SD card."""
/// USE_BACKLIGHT: bool
/// """Whether the hardware supports backlight brightness control."""
/// USE_HAPTIC: bool
/// """Whether the hardware supports haptic feedback."""
/// USE_OPTIGA: bool
/// """Whether the hardware supports Optiga secure element."""
/// MODEL: str
@ -474,6 +476,11 @@ STATIC const mp_rom_map_elem_t mp_module_trezorutils_globals_table[] = {
#else
{MP_ROM_QSTR(MP_QSTR_USE_BACKLIGHT), mp_const_false},
#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
{MP_ROM_QSTR(MP_QSTR_USE_OPTIGA), mp_const_true},
#else

View File

@ -30,4 +30,6 @@ void haptic_play(haptic_effect_t effect);
// the creation of customized haptic effects.
bool haptic_play_custom(int8_t amplitude_pct, uint16_t duration_ms);
void haptic_set_enabled(bool enable);
#endif

View File

@ -81,6 +81,8 @@
#define MAX_AMPLITUDE 127
#define PRODTEST_EFFECT_AMPLITUDE 127
bool haptic_enabled = true;
static bool set_reg(uint8_t addr, uint8_t value) {
uint8_t data[] = {addr, value};
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) {
if (!haptic_enabled) {
return;
}
switch (effect) {
case HAPTIC_BUTTON_PRESS:
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) {
return haptic_play_rtp(PRODTEST_EFFECT_AMPLITUDE, duration_ms);
}
void haptic_set_enabled(bool enable) { haptic_enabled = enable; }

View File

@ -193,7 +193,7 @@ class WebUSB:
"""
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_WRITE: int # wait until interface is writable

View 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.
"""

View File

@ -126,6 +126,8 @@ USE_SD_CARD: bool
"""Whether the hardware supports SD card."""
USE_BACKLIGHT: bool
"""Whether the hardware supports backlight brightness control."""
USE_HAPTIC: bool
"""Whether the hardware supports haptic feedback."""
USE_OPTIGA: bool
"""Whether the hardware supports Optiga secure element."""
MODEL: str

View File

@ -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:
f.capabilities.append(Capability.Brightness)

View File

@ -2,7 +2,7 @@ from typing import TYPE_CHECKING
import storage.device as storage_device
import trezorui2
from trezor import TR
from trezor import TR, utils
from trezor.enums import ButtonRequestType
from trezor.ui.layouts import confirm_action
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
experimental_features = msg.experimental_features # local_cache_attribute
hide_passphrase_from_host = msg.hide_passphrase_from_host # local_cache_attribute
haptic_feedback = msg.haptic_feedback
if (
homescreen is None
@ -61,6 +62,7 @@ async def apply_settings(msg: ApplySettings) -> Success:
and msg_safety_checks is None
and experimental_features is None
and hide_passphrase_from_host is None
and (haptic_feedback is None or not utils.USE_HAPTIC)
):
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)
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()
return Success(message="Settings applied")
@ -255,3 +264,15 @@ async def _require_confirm_hide_passphrase_from_host(enable: bool) -> None:
description=TR.passphrase__hide,
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,
)

View File

@ -10,7 +10,7 @@ welcome_screen_start_ms = utime.ticks_ms()
import storage
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 (
allow_all_loader_messages,
ignore_nonpin_loader_messages,
@ -51,6 +51,9 @@ async def bootscreen() -> None:
enforce_welcome_screen_duration()
ui.backlight_fade(ui.BacklightLevels.NONE)
ui.display.orientation(storage.device.get_rotation())
if utils.USE_HAPTIC:
io.haptic.haptic_set_enabled(storage.device.get_haptic_feedback())
await lockscreen
await verify_user_pin()
storage.init_unlocked()
@ -61,6 +64,9 @@ async def bootscreen() -> None:
storage.init_unlocked()
enforce_welcome_screen_duration()
rotation = storage.device.get_rotation()
if utils.USE_HAPTIC:
io.haptic.haptic_set_enabled(storage.device.get_haptic_feedback())
if rotation != ui.display.orientation():
# there is a slight delay before next screen is shown,
# so we don't fade unless there is a change of orientation

View File

@ -36,12 +36,13 @@ INITIALIZED = const(0x13) # bool (0x01 or empty)
_SAFETY_CHECK_LEVEL = const(0x14) # int
_EXPERIMENTAL_FEATURES = const(0x15) # 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:
_DEVICE_SECRET = const(0x17) # 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_PROMPT : Literal[1] = const(1)
@ -377,3 +378,17 @@ if utils.USE_THP:
counter = int.from_bytes(get_cred_auth_key_counter(), "big")
utils.ensure(counter < 0xFFFFFFFF, "Overflow of cred_auth_key_counter")
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)

View File

@ -11,6 +11,7 @@ ShamirGroups = 16
PassphraseEntry = 17
Translations = 19
Brightness = 20
Haptic = 21
if not utils.BITCOIN_ONLY:
Bitcoin_like = 2
Binance = 3

View File

@ -461,6 +461,7 @@ if TYPE_CHECKING:
Solana = 18
Translations = 19
Brightness = 20
Haptic = 21
class SdProtectOperationType(IntEnum):
DISABLE = 0

View File

@ -2163,6 +2163,7 @@ if TYPE_CHECKING:
bootloader_locked: "bool | None"
language_version_matches: "bool"
unit_packaging: "int | None"
haptic_feedback: "bool | None"
def __init__(
self,
@ -2215,6 +2216,7 @@ if TYPE_CHECKING:
bootloader_locked: "bool | None" = None,
language_version_matches: "bool | None" = None,
unit_packaging: "int | None" = None,
haptic_feedback: "bool | None" = None,
) -> None:
pass
@ -2258,6 +2260,7 @@ if TYPE_CHECKING:
safety_checks: "SafetyCheckLevel | None"
experimental_features: "bool | None"
hide_passphrase_from_host: "bool | None"
haptic_feedback: "bool | None"
def __init__(
self,
@ -2271,6 +2274,7 @@ if TYPE_CHECKING:
safety_checks: "SafetyCheckLevel | None" = None,
experimental_features: "bool | None" = None,
hide_passphrase_from_host: "bool | None" = None,
haptic_feedback: "bool | None" = None,
) -> None:
pass

View File

@ -11,6 +11,7 @@ from trezorutils import ( # noqa: F401
SCM_REVISION,
UI_LAYOUT,
USE_BACKLIGHT,
USE_HAPTIC,
USE_OPTIGA,
USE_SD_CARD,
USE_THP,

View File

@ -213,6 +213,14 @@ def brightness(client: "TrezorClient") -> str:
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()
@click.argument("path_or_url", required=False)
@click.option(

View File

@ -47,6 +47,7 @@ def apply_settings(
safety_checks: Optional[messages.SafetyCheckLevel] = None,
experimental_features: Optional[bool] = None,
hide_passphrase_from_host: Optional[bool] = None,
haptic_feedback: Optional[bool] = None,
) -> "MessageType":
if language is not None:
warnings.warn(
@ -63,6 +64,7 @@ def apply_settings(
safety_checks=safety_checks,
experimental_features=experimental_features,
hide_passphrase_from_host=hide_passphrase_from_host,
haptic_feedback=haptic_feedback,
)
out = client.call(settings)

View File

@ -493,6 +493,7 @@ class Capability(IntEnum):
Solana = 18
Translations = 19
Brightness = 20
Haptic = 21
class SdProtectOperationType(IntEnum):
@ -3263,6 +3264,7 @@ class Features(protobuf.MessageType):
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),
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__(
@ -3317,6 +3319,7 @@ class Features(protobuf.MessageType):
bootloader_locked: Optional["bool"] = None,
language_version_matches: Optional["bool"] = True,
unit_packaging: Optional["int"] = None,
haptic_feedback: Optional["bool"] = None,
) -> None:
self.capabilities: Sequence["Capability"] = capabilities if capabilities is not None else []
self.major_version = major_version
@ -3367,6 +3370,7 @@ class Features(protobuf.MessageType):
self.bootloader_locked = bootloader_locked
self.language_version_matches = language_version_matches
self.unit_packaging = unit_packaging
self.haptic_feedback = haptic_feedback
class LockDevice(protobuf.MessageType):
@ -3405,6 +3409,7 @@ class ApplySettings(protobuf.MessageType):
9: protobuf.Field("safety_checks", "SafetyCheckLevel", 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),
13: protobuf.Field("haptic_feedback", "bool", repeated=False, required=False, default=None),
}
def __init__(
@ -3421,6 +3426,7 @@ class ApplySettings(protobuf.MessageType):
safety_checks: Optional["SafetyCheckLevel"] = None,
experimental_features: Optional["bool"] = None,
hide_passphrase_from_host: Optional["bool"] = None,
haptic_feedback: Optional["bool"] = None,
) -> None:
self.language = language
self.label = label
@ -3433,6 +3439,7 @@ class ApplySettings(protobuf.MessageType):
self.safety_checks = safety_checks
self.experimental_features = experimental_features
self.hide_passphrase_from_host = hide_passphrase_from_host
self.haptic_feedback = haptic_feedback
class ChangeLanguage(protobuf.MessageType):

View File

@ -462,6 +462,8 @@ pub struct Features {
pub language_version_matches: ::std::option::Option<bool>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.unit_packaging)
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
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.Features.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@ -1569,8 +1571,27 @@ impl Features {
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 {
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);
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"vendor",
@ -1817,6 +1838,11 @@ impl Features {
|m: &Features| { &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>(
"Features",
fields,
@ -1994,6 +2020,9 @@ impl ::protobuf::Message for Features {
408 => {
self.unit_packaging = ::std::option::Option::Some(is.read_uint32()?);
},
416 => {
self.haptic_feedback = ::std::option::Option::Some(is.read_bool()?);
},
tag => {
::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 {
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());
self.special_fields.cached_size().set(my_size as u32);
my_size
@ -2306,6 +2338,9 @@ impl ::protobuf::Message for Features {
if let Some(v) = self.unit_packaging {
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())?;
::std::result::Result::Ok(())
}
@ -2372,6 +2407,7 @@ impl ::protobuf::Message for Features {
self.bootloader_locked = ::std::option::Option::None;
self.language_version_matches = ::std::option::Option::None;
self.unit_packaging = ::std::option::Option::None;
self.haptic_feedback = ::std::option::Option::None;
self.special_fields.clear();
}
@ -2426,6 +2462,7 @@ impl ::protobuf::Message for Features {
bootloader_locked: ::std::option::Option::None,
language_version_matches: ::std::option::Option::None,
unit_packaging: ::std::option::Option::None,
haptic_feedback: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&instance
@ -2494,6 +2531,8 @@ pub mod features {
Capability_Translations = 19,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.management.Features.Capability.Capability_Brightness)
Capability_Brightness = 20,
// @@protoc_insertion_point(enum_value:hw.trezor.messages.management.Features.Capability.Capability_Haptic)
Capability_Haptic = 21,
}
impl ::protobuf::Enum for Capability {
@ -2525,6 +2564,7 @@ pub mod features {
18 => ::std::option::Option::Some(Capability::Capability_Solana),
19 => ::std::option::Option::Some(Capability::Capability_Translations),
20 => ::std::option::Option::Some(Capability::Capability_Brightness),
21 => ::std::option::Option::Some(Capability::Capability_Haptic),
_ => ::std::option::Option::None
}
}
@ -2551,6 +2591,7 @@ pub mod features {
"Capability_Solana" => ::std::option::Option::Some(Capability::Capability_Solana),
"Capability_Translations" => ::std::option::Option::Some(Capability::Capability_Translations),
"Capability_Brightness" => ::std::option::Option::Some(Capability::Capability_Brightness),
"Capability_Haptic" => ::std::option::Option::Some(Capability::Capability_Haptic),
_ => ::std::option::Option::None
}
}
@ -2576,6 +2617,7 @@ pub mod features {
Capability::Capability_Solana,
Capability::Capability_Translations,
Capability::Capability_Brightness,
Capability::Capability_Haptic,
];
}
@ -2607,6 +2649,7 @@ pub mod features {
Capability::Capability_Solana => 17,
Capability::Capability_Translations => 18,
Capability::Capability_Brightness => 19,
Capability::Capability_Haptic => 20,
};
Self::enum_descriptor().value_by_index(index)
}
@ -2999,6 +3042,8 @@ pub struct ApplySettings {
pub experimental_features: ::std::option::Option<bool>,
// @@protoc_insertion_point(field:hw.trezor.messages.management.ApplySettings.hide_passphrase_from_host)
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
// @@protoc_insertion_point(special_field:hw.trezor.messages.management.ApplySettings.special_fields)
pub special_fields: ::protobuf::SpecialFields,
@ -3278,8 +3323,27 @@ impl ApplySettings {
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 {
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);
fields.push(::protobuf::reflect::rt::v2::make_option_accessor::<_, _>(
"language",
@ -3336,6 +3400,11 @@ impl ApplySettings {
|m: &ApplySettings| { &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>(
"ApplySettings",
fields,
@ -3387,6 +3456,9 @@ impl ::protobuf::Message for ApplySettings {
88 => {
self.hide_passphrase_from_host = ::std::option::Option::Some(is.read_bool()?);
},
104 => {
self.haptic_feedback = ::std::option::Option::Some(is.read_bool()?);
},
tag => {
::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 {
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());
self.special_fields.cached_size().set(my_size as u32);
my_size
@ -3471,6 +3546,9 @@ impl ::protobuf::Message for ApplySettings {
if let Some(v) = self.hide_passphrase_from_host {
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())?;
::std::result::Result::Ok(())
}
@ -3499,6 +3577,7 @@ impl ::protobuf::Message for ApplySettings {
self.safety_checks = ::std::option::Option::None;
self.experimental_features = ::std::option::Option::None;
self.hide_passphrase_from_host = ::std::option::Option::None;
self.haptic_feedback = ::std::option::Option::None;
self.special_fields.clear();
}
@ -3515,6 +3594,7 @@ impl ::protobuf::Message for ApplySettings {
safety_checks: ::std::option::Option::None,
experimental_features: ::std::option::Option::None,
hide_passphrase_from_host: ::std::option::Option::None,
haptic_feedback: ::std::option::Option::None,
special_fields: ::protobuf::SpecialFields::new(),
};
&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\
\x20\x01(\x0cR\tsessionId\x12,\n\x10_skip_passphrase\x18\x02\x20\x01(\
\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\
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\
@ -10804,118 +10884,121 @@ static file_descriptor_proto_data: &'static [u8] = b"\
\x180\x20\x01(\rR\x10homescreenHeight\x12+\n\x11bootloader_locked\x181\
\x20\x01(\x08R\x10bootloaderLocked\x12>\n\x18language_version_matches\
\x182\x20\x01(\x08:\x04trueR\x16languageVersionMatches\x12%\n\x0eunit_pa\
ckaging\x183\x20\x01(\rR\runitPackaging\"\xa5\x04\n\nCapability\x12\x1c\
\n\x12Capability_Bitcoin\x10\x01\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x17Ca\
pability_Bitcoin_like\x10\x02\x12\x16\n\x12Capability_Binance\x10\x03\
\x12\x16\n\x12Capability_Cardano\x10\x04\x12\x1b\n\x11Capability_Crypto\
\x10\x05\x1a\x04\x80\xa6\x1d\x01\x12\x12\n\x0eCapability_EOS\x10\x06\x12\
\x17\n\x13Capability_Ethereum\x10\x07\x12\x17\n\x0fCapability_Lisk\x10\
\x08\x1a\x02\x08\x01\x12\x15\n\x11Capability_Monero\x10\t\x12\x12\n\x0eC\
apability_NEM\x10\n\x12\x15\n\x11Capability_Ripple\x10\x0b\x12\x16\n\x12\
Capability_Stellar\x10\x0c\x12\x14\n\x10Capability_Tezos\x10\r\x12\x12\n\
\x0eCapability_U2F\x10\x0e\x12\x1b\n\x11Capability_Shamir\x10\x0f\x1a\
\x04\x80\xa6\x1d\x01\x12!\n\x17Capability_ShamirGroups\x10\x10\x1a\x04\
\x80\xa6\x1d\x01\x12$\n\x1aCapability_PassphraseEntry\x10\x11\x1a\x04\
\x80\xa6\x1d\x01\x12\x15\n\x11Capability_Solana\x10\x12\x12!\n\x17Capabi\
lity_Translations\x10\x13\x1a\x04\x80\xa6\x1d\x01\x12\x1f\n\x15Capabilit\
y_Brightness\x10\x14\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\x01\"\
\x0c\n\nLockDevice\"&\n\x07SetBusy\x12\x1b\n\texpiry_ms\x18\x01\x20\x01(\
\rR\x08expiryMs\"\x0c\n\nEndSession\"\x9b\x04\n\rApplySettings\x12\x1e\n\
\x08language\x18\x01\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05l\
abel\x18\x02\x20\x01(\tR\x05label\x12%\n\x0euse_passphrase\x18\x03\x20\
\x01(\x08R\rusePassphrase\x12\x1e\n\nhomescreen\x18\x04\x20\x01(\x0cR\nh\
omescreen\x120\n\x12_passphrase_source\x18\x05\x20\x01(\rR\x10Passphrase\
SourceB\x02\x18\x01\x12+\n\x12auto_lock_delay_ms\x18\x06\x20\x01(\rR\x0f\
autoLockDelayMs\x12)\n\x10display_rotation\x18\x07\x20\x01(\rR\x0fdispla\
yRotation\x12=\n\x1bpassphrase_always_on_device\x18\x08\x20\x01(\x08R\
\x18passphraseAlwaysOnDevice\x12T\n\rsafety_checks\x18\t\x20\x01(\x0e2/.\
hw.trezor.messages.management.SafetyCheckLevelR\x0csafetyChecks\x123\n\
\x15experimental_features\x18\n\x20\x01(\x08R\x14experimentalFeatures\
\x129\n\x19hide_passphrase_from_host\x18\x0b\x20\x01(\x08R\x16hidePassph\
raseFromHost\"T\n\x0eChangeLanguage\x12\x1f\n\x0bdata_length\x18\x01\x20\
\x02(\rR\ndataLength\x12!\n\x0cshow_display\x18\x02\x20\x01(\x08R\x0bsho\
wDisplay\"Z\n\x16TranslationDataRequest\x12\x1f\n\x0bdata_length\x18\x01\
\x20\x02(\rR\ndataLength\x12\x1f\n\x0bdata_offset\x18\x02\x20\x02(\rR\nd\
ataOffset\"3\n\x12TranslationDataAck\x12\x1d\n\ndata_chunk\x18\x01\x20\
\x02(\x0cR\tdataChunk\"\"\n\nApplyFlags\x12\x14\n\x05flags\x18\x01\x20\
\x02(\rR\x05flags\"#\n\tChangePin\x12\x16\n\x06remove\x18\x01\x20\x01(\
\x08R\x06remove\"(\n\x0eChangeWipeCode\x12\x16\n\x06remove\x18\x01\x20\
\x01(\x08R\x06remove\"\xaa\x01\n\tSdProtect\x12]\n\toperation\x18\x01\
\x20\x02(\x0e2?.hw.trezor.messages.management.SdProtect.SdProtectOperati\
onTypeR\toperation\">\n\x16SdProtectOperationType\x12\x0b\n\x07DISABLE\
\x10\0\x12\n\n\x06ENABLE\x10\x01\x12\x0b\n\x07REFRESH\x10\x02\"O\n\x04Pi\
ng\x12\x1a\n\x07message\x18\x01\x20\x01(\t:\0R\x07message\x12+\n\x11butt\
on_protection\x18\x02\x20\x01(\x08R\x10buttonProtection\"\x08\n\x06Cance\
l\"\x20\n\nGetEntropy\x12\x12\n\x04size\x18\x01\x20\x02(\rR\x04size\"#\n\
\x07Entropy\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"/\n\
\x0fGetFirmwareHash\x12\x1c\n\tchallenge\x18\x01\x20\x01(\x0cR\tchalleng\
e\"\"\n\x0cFirmwareHash\x12\x12\n\x04hash\x18\x01\x20\x02(\x0cR\x04hash\
\"2\n\x12AuthenticateDevice\x12\x1c\n\tchallenge\x18\x01\x20\x02(\x0cR\t\
challenge\"U\n\x11AuthenticityProof\x12\"\n\x0ccertificates\x18\x01\x20\
\x03(\x0cR\x0ccertificates\x12\x1c\n\tsignature\x18\x02\x20\x02(\x0cR\ts\
ignature\"\x0c\n\nWipeDevice\"\xad\x02\n\nLoadDevice\x12\x1c\n\tmnemonic\
s\x18\x01\x20\x03(\tR\tmnemonics\x12\x10\n\x03pin\x18\x03\x20\x01(\tR\
\x03pin\x123\n\x15passphrase_protection\x18\x04\x20\x01(\x08R\x14passphr\
aseProtection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08languageB\x02\
\x18\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12#\n\rskip_ch\
ecksum\x18\x07\x20\x01(\x08R\x0cskipChecksum\x12\x1f\n\x0bu2f_counter\
\x18\x08\x20\x01(\rR\nu2fCounter\x12!\n\x0cneeds_backup\x18\t\x20\x01(\
\x08R\x0bneedsBackup\x12\x1b\n\tno_backup\x18\n\x20\x01(\x08R\x08noBacku\
p\"\x99\x03\n\x0bResetDevice\x12%\n\x0edisplay_random\x18\x01\x20\x01(\
\x08R\rdisplayRandom\x12\x1f\n\x08strength\x18\x02\x20\x01(\r:\x03256R\
\x08strength\x123\n\x15passphrase_protection\x18\x03\x20\x01(\x08R\x14pa\
ssphraseProtection\x12%\n\x0epin_protection\x18\x04\x20\x01(\x08R\rpinPr\
otection\x12\x1e\n\x08language\x18\x05\x20\x01(\tR\x08languageB\x02\x18\
\x01\x12\x14\n\x05label\x18\x06\x20\x01(\tR\x05label\x12\x1f\n\x0bu2f_co\
unter\x18\x07\x20\x01(\rR\nu2fCounter\x12\x1f\n\x0bskip_backup\x18\x08\
\x20\x01(\x08R\nskipBackup\x12\x1b\n\tno_backup\x18\t\x20\x01(\x08R\x08n\
oBackup\x12Q\n\x0bbackup_type\x18\n\x20\x01(\x0e2).hw.trezor.messages.ma\
nagement.BackupType:\x05Bip39R\nbackupType\"\xe5\x01\n\x0cBackupDevice\
\x12'\n\x0fgroup_threshold\x18\x01\x20\x01(\rR\x0egroupThreshold\x12O\n\
\x06groups\x18\x02\x20\x03(\x0b27.hw.trezor.messages.management.BackupDe\
vice.Slip39GroupR\x06groups\x1a[\n\x0bSlip39Group\x12)\n\x10member_thres\
hold\x18\x01\x20\x02(\rR\x0fmemberThreshold\x12!\n\x0cmember_count\x18\
\x02\x20\x02(\rR\x0bmemberCount\"\x10\n\x0eEntropyRequest\"&\n\nEntropyA\
ck\x12\x18\n\x07entropy\x18\x01\x20\x02(\x0cR\x07entropy\"\xd8\x03\n\x0e\
RecoveryDevice\x12\x1d\n\nword_count\x18\x01\x20\x01(\rR\twordCount\x123\
\n\x15passphrase_protection\x18\x02\x20\x01(\x08R\x14passphraseProtectio\
n\x12%\n\x0epin_protection\x18\x03\x20\x01(\x08R\rpinProtection\x12\x1e\
\n\x08language\x18\x04\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\
\x05label\x18\x05\x20\x01(\tR\x05label\x12)\n\x10enforce_wordlist\x18\
\x06\x20\x01(\x08R\x0fenforceWordlist\x12T\n\x04type\x18\x08\x20\x01(\
\x0e2@.hw.trezor.messages.management.RecoveryDevice.RecoveryDeviceTypeR\
\x04type\x12\x1f\n\x0bu2f_counter\x18\t\x20\x01(\rR\nu2fCounter\x12\x17\
\n\x07dry_run\x18\n\x20\x01(\x08R\x06dryRun\"Z\n\x12RecoveryDeviceType\
\x12%\n!RecoveryDeviceType_ScrambledWords\x10\0\x12\x1d\n\x19RecoveryDev\
iceType_Matrix\x10\x01\"\xc5\x01\n\x0bWordRequest\x12N\n\x04type\x18\x01\
\x20\x02(\x0e2:.hw.trezor.messages.management.WordRequest.WordRequestTyp\
eR\x04type\"f\n\x0fWordRequestType\x12\x19\n\x15WordRequestType_Plain\
\x10\0\x12\x1b\n\x17WordRequestType_Matrix9\x10\x01\x12\x1b\n\x17WordReq\
uestType_Matrix6\x10\x02\"\x1d\n\x07WordAck\x12\x12\n\x04word\x18\x01\
\x20\x02(\tR\x04word\"0\n\rSetU2FCounter\x12\x1f\n\x0bu2f_counter\x18\
\x01\x20\x02(\rR\nu2fCounter\"\x13\n\x11GetNextU2FCounter\"1\n\x0eNextU2\
FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x11\
\n\x0fDoPreauthorized\"\x16\n\x14PreauthorizedRequest\"\x15\n\x13CancelA\
uthorization\"\x9a\x02\n\x12RebootToBootloader\x12o\n\x0cboot_command\
\x18\x01\x20\x01(\x0e2=.hw.trezor.messages.management.RebootToBootloader\
.BootCommand:\rSTOP_AND_WAITR\x0bbootCommand\x12'\n\x0ffirmware_header\
\x18\x02\x20\x01(\x0cR\x0efirmwareHeader\x123\n\x14language_data_length\
\x18\x03\x20\x01(\r:\x010R\x12languageDataLength\"5\n\x0bBootCommand\x12\
\x11\n\rSTOP_AND_WAIT\x10\0\x12\x13\n\x0fINSTALL_UPGRADE\x10\x01\"\x10\n\
\x08GetNonce:\x04\x88\xb2\x19\x01\"#\n\x05Nonce\x12\x14\n\x05nonce\x18\
\x01\x20\x02(\x0cR\x05nonce:\x04\x88\xb2\x19\x01\";\n\nUnlockPath\x12\
\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\x10\n\x03mac\x18\
\x02\x20\x01(\x0cR\x03mac\"'\n\x13UnlockedPathRequest\x12\x10\n\x03mac\
\x18\x01\x20\x01(\x0cR\x03mac\"\x14\n\x12ShowDeviceTutorial\"\x12\n\x10U\
nlockBootloader\"%\n\rSetBrightness\x12\x14\n\x05value\x18\x01\x20\x01(\
\rR\x05value*\x99\x01\n\nBackupType\x12\t\n\x05Bip39\x10\0\x12\x10\n\x0c\
Slip39_Basic\x10\x01\x12\x13\n\x0fSlip39_Advanced\x10\x02\x12\x1c\n\x18S\
lip39_Single_Extendable\x10\x03\x12\x1b\n\x17Slip39_Basic_Extendable\x10\
\x04\x12\x1e\n\x1aSlip39_Advanced_Extendable\x10\x05*G\n\x10SafetyCheckL\
evel\x12\n\n\x06Strict\x10\0\x12\x10\n\x0cPromptAlways\x10\x01\x12\x15\n\
\x11PromptTemporarily\x10\x02*0\n\x10HomescreenFormat\x12\x08\n\x04Toif\
\x10\x01\x12\x08\n\x04Jpeg\x10\x02\x12\x08\n\x04ToiG\x10\x03BB\n#com.sat\
oshilabs.trezor.lib.protobufB\x17TrezorMessageManagement\x80\xa6\x1d\x01\
ckaging\x183\x20\x01(\rR\runitPackaging\x12'\n\x0fhaptic_feedback\x184\
\x20\x01(\x08R\x0ehapticFeedback\"\xc2\x04\n\nCapability\x12\x1c\n\x12Ca\
pability_Bitcoin\x10\x01\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x17Capability\
_Bitcoin_like\x10\x02\x12\x16\n\x12Capability_Binance\x10\x03\x12\x16\n\
\x12Capability_Cardano\x10\x04\x12\x1b\n\x11Capability_Crypto\x10\x05\
\x1a\x04\x80\xa6\x1d\x01\x12\x12\n\x0eCapability_EOS\x10\x06\x12\x17\n\
\x13Capability_Ethereum\x10\x07\x12\x17\n\x0fCapability_Lisk\x10\x08\x1a\
\x02\x08\x01\x12\x15\n\x11Capability_Monero\x10\t\x12\x12\n\x0eCapabilit\
y_NEM\x10\n\x12\x15\n\x11Capability_Ripple\x10\x0b\x12\x16\n\x12Capabili\
ty_Stellar\x10\x0c\x12\x14\n\x10Capability_Tezos\x10\r\x12\x12\n\x0eCapa\
bility_U2F\x10\x0e\x12\x1b\n\x11Capability_Shamir\x10\x0f\x1a\x04\x80\
\xa6\x1d\x01\x12!\n\x17Capability_ShamirGroups\x10\x10\x1a\x04\x80\xa6\
\x1d\x01\x12$\n\x1aCapability_PassphraseEntry\x10\x11\x1a\x04\x80\xa6\
\x1d\x01\x12\x15\n\x11Capability_Solana\x10\x12\x12!\n\x17Capability_Tra\
nslations\x10\x13\x1a\x04\x80\xa6\x1d\x01\x12\x1f\n\x15Capability_Bright\
ness\x10\x14\x1a\x04\x80\xa6\x1d\x01\x12\x1b\n\x11Capability_Haptic\x10\
\x15\x1a\x04\x80\xa6\x1d\x01\x1a\x04\xc8\xf3\x18\x01\"\x0c\n\nLockDevice\
\"&\n\x07SetBusy\x12\x1b\n\texpiry_ms\x18\x01\x20\x01(\rR\x08expiryMs\"\
\x0c\n\nEndSession\"\xc4\x04\n\rApplySettings\x12\x1e\n\x08language\x18\
\x01\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x02\x20\
\x01(\tR\x05label\x12%\n\x0euse_passphrase\x18\x03\x20\x01(\x08R\rusePas\
sphrase\x12\x1e\n\nhomescreen\x18\x04\x20\x01(\x0cR\nhomescreen\x120\n\
\x12_passphrase_source\x18\x05\x20\x01(\rR\x10PassphraseSourceB\x02\x18\
\x01\x12+\n\x12auto_lock_delay_ms\x18\x06\x20\x01(\rR\x0fautoLockDelayMs\
\x12)\n\x10display_rotation\x18\x07\x20\x01(\rR\x0fdisplayRotation\x12=\
\n\x1bpassphrase_always_on_device\x18\x08\x20\x01(\x08R\x18passphraseAlw\
aysOnDevice\x12T\n\rsafety_checks\x18\t\x20\x01(\x0e2/.hw.trezor.message\
s.management.SafetyCheckLevelR\x0csafetyChecks\x123\n\x15experimental_fe\
atures\x18\n\x20\x01(\x08R\x14experimentalFeatures\x129\n\x19hide_passph\
rase_from_host\x18\x0b\x20\x01(\x08R\x16hidePassphraseFromHost\x12'\n\
\x0fhaptic_feedback\x18\r\x20\x01(\x08R\x0ehapticFeedback\"T\n\x0eChange\
Language\x12\x1f\n\x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\x12!\n\
\x0cshow_display\x18\x02\x20\x01(\x08R\x0bshowDisplay\"Z\n\x16Translatio\
nDataRequest\x12\x1f\n\x0bdata_length\x18\x01\x20\x02(\rR\ndataLength\
\x12\x1f\n\x0bdata_offset\x18\x02\x20\x02(\rR\ndataOffset\"3\n\x12Transl\
ationDataAck\x12\x1d\n\ndata_chunk\x18\x01\x20\x02(\x0cR\tdataChunk\"\"\
\n\nApplyFlags\x12\x14\n\x05flags\x18\x01\x20\x02(\rR\x05flags\"#\n\tCha\
ngePin\x12\x16\n\x06remove\x18\x01\x20\x01(\x08R\x06remove\"(\n\x0eChang\
eWipeCode\x12\x16\n\x06remove\x18\x01\x20\x01(\x08R\x06remove\"\xaa\x01\
\n\tSdProtect\x12]\n\toperation\x18\x01\x20\x02(\x0e2?.hw.trezor.message\
s.management.SdProtect.SdProtectOperationTypeR\toperation\">\n\x16SdProt\
ectOperationType\x12\x0b\n\x07DISABLE\x10\0\x12\n\n\x06ENABLE\x10\x01\
\x12\x0b\n\x07REFRESH\x10\x02\"O\n\x04Ping\x12\x1a\n\x07message\x18\x01\
\x20\x01(\t:\0R\x07message\x12+\n\x11button_protection\x18\x02\x20\x01(\
\x08R\x10buttonProtection\"\x08\n\x06Cancel\"\x20\n\nGetEntropy\x12\x12\
\n\x04size\x18\x01\x20\x02(\rR\x04size\"#\n\x07Entropy\x12\x18\n\x07entr\
opy\x18\x01\x20\x02(\x0cR\x07entropy\"/\n\x0fGetFirmwareHash\x12\x1c\n\t\
challenge\x18\x01\x20\x01(\x0cR\tchallenge\"\"\n\x0cFirmwareHash\x12\x12\
\n\x04hash\x18\x01\x20\x02(\x0cR\x04hash\"2\n\x12AuthenticateDevice\x12\
\x1c\n\tchallenge\x18\x01\x20\x02(\x0cR\tchallenge\"U\n\x11AuthenticityP\
roof\x12\"\n\x0ccertificates\x18\x01\x20\x03(\x0cR\x0ccertificates\x12\
\x1c\n\tsignature\x18\x02\x20\x02(\x0cR\tsignature\"\x0c\n\nWipeDevice\"\
\xad\x02\n\nLoadDevice\x12\x1c\n\tmnemonics\x18\x01\x20\x03(\tR\tmnemoni\
cs\x12\x10\n\x03pin\x18\x03\x20\x01(\tR\x03pin\x123\n\x15passphrase_prot\
ection\x18\x04\x20\x01(\x08R\x14passphraseProtection\x12\x1e\n\x08langua\
ge\x18\x05\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\
\x06\x20\x01(\tR\x05label\x12#\n\rskip_checksum\x18\x07\x20\x01(\x08R\
\x0cskipChecksum\x12\x1f\n\x0bu2f_counter\x18\x08\x20\x01(\rR\nu2fCounte\
r\x12!\n\x0cneeds_backup\x18\t\x20\x01(\x08R\x0bneedsBackup\x12\x1b\n\tn\
o_backup\x18\n\x20\x01(\x08R\x08noBackup\"\x99\x03\n\x0bResetDevice\x12%\
\n\x0edisplay_random\x18\x01\x20\x01(\x08R\rdisplayRandom\x12\x1f\n\x08s\
trength\x18\x02\x20\x01(\r:\x03256R\x08strength\x123\n\x15passphrase_pro\
tection\x18\x03\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_prot\
ection\x18\x04\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\x18\
\x05\x20\x01(\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x06\x20\
\x01(\tR\x05label\x12\x1f\n\x0bu2f_counter\x18\x07\x20\x01(\rR\nu2fCount\
er\x12\x1f\n\x0bskip_backup\x18\x08\x20\x01(\x08R\nskipBackup\x12\x1b\n\
\tno_backup\x18\t\x20\x01(\x08R\x08noBackup\x12Q\n\x0bbackup_type\x18\n\
\x20\x01(\x0e2).hw.trezor.messages.management.BackupType:\x05Bip39R\nbac\
kupType\"\xe5\x01\n\x0cBackupDevice\x12'\n\x0fgroup_threshold\x18\x01\
\x20\x01(\rR\x0egroupThreshold\x12O\n\x06groups\x18\x02\x20\x03(\x0b27.h\
w.trezor.messages.management.BackupDevice.Slip39GroupR\x06groups\x1a[\n\
\x0bSlip39Group\x12)\n\x10member_threshold\x18\x01\x20\x02(\rR\x0fmember\
Threshold\x12!\n\x0cmember_count\x18\x02\x20\x02(\rR\x0bmemberCount\"\
\x10\n\x0eEntropyRequest\"&\n\nEntropyAck\x12\x18\n\x07entropy\x18\x01\
\x20\x02(\x0cR\x07entropy\"\xd8\x03\n\x0eRecoveryDevice\x12\x1d\n\nword_\
count\x18\x01\x20\x01(\rR\twordCount\x123\n\x15passphrase_protection\x18\
\x02\x20\x01(\x08R\x14passphraseProtection\x12%\n\x0epin_protection\x18\
\x03\x20\x01(\x08R\rpinProtection\x12\x1e\n\x08language\x18\x04\x20\x01(\
\tR\x08languageB\x02\x18\x01\x12\x14\n\x05label\x18\x05\x20\x01(\tR\x05l\
abel\x12)\n\x10enforce_wordlist\x18\x06\x20\x01(\x08R\x0fenforceWordlist\
\x12T\n\x04type\x18\x08\x20\x01(\x0e2@.hw.trezor.messages.management.Rec\
overyDevice.RecoveryDeviceTypeR\x04type\x12\x1f\n\x0bu2f_counter\x18\t\
\x20\x01(\rR\nu2fCounter\x12\x17\n\x07dry_run\x18\n\x20\x01(\x08R\x06dry\
Run\"Z\n\x12RecoveryDeviceType\x12%\n!RecoveryDeviceType_ScrambledWords\
\x10\0\x12\x1d\n\x19RecoveryDeviceType_Matrix\x10\x01\"\xc5\x01\n\x0bWor\
dRequest\x12N\n\x04type\x18\x01\x20\x02(\x0e2:.hw.trezor.messages.manage\
ment.WordRequest.WordRequestTypeR\x04type\"f\n\x0fWordRequestType\x12\
\x19\n\x15WordRequestType_Plain\x10\0\x12\x1b\n\x17WordRequestType_Matri\
x9\x10\x01\x12\x1b\n\x17WordRequestType_Matrix6\x10\x02\"\x1d\n\x07WordA\
ck\x12\x12\n\x04word\x18\x01\x20\x02(\tR\x04word\"0\n\rSetU2FCounter\x12\
\x1f\n\x0bu2f_counter\x18\x01\x20\x02(\rR\nu2fCounter\"\x13\n\x11GetNext\
U2FCounter\"1\n\x0eNextU2FCounter\x12\x1f\n\x0bu2f_counter\x18\x01\x20\
\x02(\rR\nu2fCounter\"\x11\n\x0fDoPreauthorized\"\x16\n\x14Preauthorized\
Request\"\x15\n\x13CancelAuthorization\"\x9a\x02\n\x12RebootToBootloader\
\x12o\n\x0cboot_command\x18\x01\x20\x01(\x0e2=.hw.trezor.messages.manage\
ment.RebootToBootloader.BootCommand:\rSTOP_AND_WAITR\x0bbootCommand\x12'\
\n\x0ffirmware_header\x18\x02\x20\x01(\x0cR\x0efirmwareHeader\x123\n\x14\
language_data_length\x18\x03\x20\x01(\r:\x010R\x12languageDataLength\"5\
\n\x0bBootCommand\x12\x11\n\rSTOP_AND_WAIT\x10\0\x12\x13\n\x0fINSTALL_UP\
GRADE\x10\x01\"\x10\n\x08GetNonce:\x04\x88\xb2\x19\x01\"#\n\x05Nonce\x12\
\x14\n\x05nonce\x18\x01\x20\x02(\x0cR\x05nonce:\x04\x88\xb2\x19\x01\";\n\
\nUnlockPath\x12\x1b\n\taddress_n\x18\x01\x20\x03(\rR\x08addressN\x12\
\x10\n\x03mac\x18\x02\x20\x01(\x0cR\x03mac\"'\n\x13UnlockedPathRequest\
\x12\x10\n\x03mac\x18\x01\x20\x01(\x0cR\x03mac\"\x14\n\x12ShowDeviceTuto\
rial\"\x12\n\x10UnlockBootloader\"%\n\rSetBrightness\x12\x14\n\x05value\
\x18\x01\x20\x01(\rR\x05value*\x99\x01\n\nBackupType\x12\t\n\x05Bip39\
\x10\0\x12\x10\n\x0cSlip39_Basic\x10\x01\x12\x13\n\x0fSlip39_Advanced\
\x10\x02\x12\x1c\n\x18Slip39_Single_Extendable\x10\x03\x12\x1b\n\x17Slip\
39_Basic_Extendable\x10\x04\x12\x1e\n\x1aSlip39_Advanced_Extendable\x10\
\x05*G\n\x10SafetyCheckLevel\x12\n\n\x06Strict\x10\0\x12\x10\n\x0cPrompt\
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