diff --git a/common/protob/messages-management.proto b/common/protob/messages-management.proto
index d0624752e9..e13857a51e 100644
--- a/common/protob/messages-management.proto
+++ b/common/protob/messages-management.proto
@@ -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
}
/**
diff --git a/core/embed/extmod/modtrezorio/modtrezorio-haptic.h b/core/embed/extmod/modtrezorio/modtrezorio-haptic.h
new file mode 100644
index 0000000000..9462b82614
--- /dev/null
+++ b/core/embed/extmod/modtrezorio/modtrezorio-haptic.h
@@ -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 .
+ */
+
+#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,
+};
diff --git a/core/embed/extmod/modtrezorio/modtrezorio.c b/core/embed/extmod/modtrezorio/modtrezorio.c
index 72fa781f4f..b740a12dc9 100644
--- a/core/embed/extmod/modtrezorio/modtrezorio.c
+++ b/core/embed/extmod/modtrezorio/modtrezorio.c
@@ -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)},
diff --git a/core/embed/extmod/modtrezorutils/modtrezorutils.c b/core/embed/extmod/modtrezorutils/modtrezorutils.c
index 5652c951c9..d3c711784f 100644
--- a/core/embed/extmod/modtrezorutils/modtrezorutils.c
+++ b/core/embed/extmod/modtrezorutils/modtrezorutils.c
@@ -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
diff --git a/core/embed/trezorhal/haptic.h b/core/embed/trezorhal/haptic.h
index c54db4a285..f4f1c66bc5 100644
--- a/core/embed/trezorhal/haptic.h
+++ b/core/embed/trezorhal/haptic.h
@@ -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
diff --git a/core/embed/trezorhal/stm32u5/haptic/drv2625/drv2625.c b/core/embed/trezorhal/stm32u5/haptic/drv2625/drv2625.c
index bcc216f218..a4cf9e6c76 100644
--- a/core/embed/trezorhal/stm32u5/haptic/drv2625/drv2625.c
+++ b/core/embed/trezorhal/stm32u5/haptic/drv2625/drv2625.c
@@ -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; }
diff --git a/core/mocks/generated/trezorio/__init__.pyi b/core/mocks/generated/trezorio/__init__.pyi
index 4798c4c4dc..bd360425ab 100644
--- a/core/mocks/generated/trezorio/__init__.pyi
+++ b/core/mocks/generated/trezorio/__init__.pyi
@@ -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
diff --git a/core/mocks/generated/trezorio/haptic.pyi b/core/mocks/generated/trezorio/haptic.pyi
new file mode 100644
index 0000000000..8820ebfa6f
--- /dev/null
+++ b/core/mocks/generated/trezorio/haptic.pyi
@@ -0,0 +1,8 @@
+from typing import *
+
+
+# extmod/modtrezorio/modtrezorio-haptic.h
+def haptic_set_enabled(enable: bool) -> None:
+ """
+ Enable/Disable the haptic feedback.
+ """
diff --git a/core/mocks/generated/trezorutils.pyi b/core/mocks/generated/trezorutils.pyi
index d1a4c157d4..5c497046ba 100644
--- a/core/mocks/generated/trezorutils.pyi
+++ b/core/mocks/generated/trezorutils.pyi
@@ -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
diff --git a/core/src/apps/base.py b/core/src/apps/base.py
index e9d5fc7352..fdf3f6afba 100644
--- a/core/src/apps/base.py
+++ b/core/src/apps/base.py
@@ -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)
diff --git a/core/src/apps/management/apply_settings.py b/core/src/apps/management/apply_settings.py
index 684beb35ff..0ce4ae6a77 100644
--- a/core/src/apps/management/apply_settings.py
+++ b/core/src/apps/management/apply_settings.py
@@ -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,
+ )
diff --git a/core/src/boot.py b/core/src/boot.py
index cffc828b07..5028bdba4d 100644
--- a/core/src/boot.py
+++ b/core/src/boot.py
@@ -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
diff --git a/core/src/storage/device.py b/core/src/storage/device.py
index 0d01363f6d..eef8e648c3 100644
--- a/core/src/storage/device.py
+++ b/core/src/storage/device.py
@@ -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)
diff --git a/core/src/trezor/enums/Capability.py b/core/src/trezor/enums/Capability.py
index a7472fdf30..bb26adb21b 100644
--- a/core/src/trezor/enums/Capability.py
+++ b/core/src/trezor/enums/Capability.py
@@ -11,6 +11,7 @@ ShamirGroups = 16
PassphraseEntry = 17
Translations = 19
Brightness = 20
+Haptic = 21
if not utils.BITCOIN_ONLY:
Bitcoin_like = 2
Binance = 3
diff --git a/core/src/trezor/enums/__init__.py b/core/src/trezor/enums/__init__.py
index a5c314cc46..757ecf5acf 100644
--- a/core/src/trezor/enums/__init__.py
+++ b/core/src/trezor/enums/__init__.py
@@ -461,6 +461,7 @@ if TYPE_CHECKING:
Solana = 18
Translations = 19
Brightness = 20
+ Haptic = 21
class SdProtectOperationType(IntEnum):
DISABLE = 0
diff --git a/core/src/trezor/messages.py b/core/src/trezor/messages.py
index 349be22442..e8afe64751 100644
--- a/core/src/trezor/messages.py
+++ b/core/src/trezor/messages.py
@@ -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
diff --git a/core/src/trezor/utils.py b/core/src/trezor/utils.py
index e580b7be12..134274db6c 100644
--- a/core/src/trezor/utils.py
+++ b/core/src/trezor/utils.py
@@ -11,6 +11,7 @@ from trezorutils import ( # noqa: F401
SCM_REVISION,
UI_LAYOUT,
USE_BACKLIGHT,
+ USE_HAPTIC,
USE_OPTIGA,
USE_SD_CARD,
USE_THP,
diff --git a/python/src/trezorlib/cli/settings.py b/python/src/trezorlib/cli/settings.py
index cc06b60d0a..276bcdc6d7 100644
--- a/python/src/trezorlib/cli/settings.py
+++ b/python/src/trezorlib/cli/settings.py
@@ -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(
diff --git a/python/src/trezorlib/device.py b/python/src/trezorlib/device.py
index 7523235a84..af473442be 100644
--- a/python/src/trezorlib/device.py
+++ b/python/src/trezorlib/device.py
@@ -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)
diff --git a/python/src/trezorlib/messages.py b/python/src/trezorlib/messages.py
index 00064c3967..bd50df1918 100644
--- a/python/src/trezorlib/messages.py
+++ b/python/src/trezorlib/messages.py
@@ -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):
diff --git a/rust/trezor-client/src/protos/generated/messages_management.rs b/rust/trezor-client/src/protos/generated/messages_management.rs
index 50a553370d..4961d6cb78 100644
--- a/rust/trezor-client/src/protos/generated/messages_management.rs
+++ b/rust/trezor-client/src/protos/generated/messages_management.rs
@@ -462,6 +462,8 @@ pub struct Features {
pub language_version_matches: ::std::option::Option,
// @@protoc_insertion_point(field:hw.trezor.messages.management.Features.unit_packaging)
pub unit_packaging: ::std::option::Option,
+ // @@protoc_insertion_point(field:hw.trezor.messages.management.Features.haptic_feedback)
+ pub haptic_feedback: ::std::option::Option,
// 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",
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,
// @@protoc_insertion_point(field:hw.trezor.messages.management.ApplySettings.hide_passphrase_from_host)
pub hide_passphrase_from_host: ::std::option::Option,
+ // @@protoc_insertion_point(field:hw.trezor.messages.management.ApplySettings.haptic_feedback)
+ pub haptic_feedback: ::std::option::Option,
// 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",
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