1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-01-12 00:10:58 +00:00

feat(common): Add INFO button to DebugLinkDecision.

[no changelog]
This commit is contained in:
Andrew Kozlik 2021-12-13 12:42:53 +01:00 committed by matejcik
parent b35e6ca5c4
commit ba4f046d6f
12 changed files with 55 additions and 17 deletions

View File

@ -17,7 +17,7 @@ import "messages-management.proto";
* @next DebugLinkLayout * @next DebugLinkLayout
*/ */
message DebugLinkDecision { message DebugLinkDecision {
optional bool yes_no = 1; // true for "Confirm", false for "Cancel" optional DebugButton button = 1; // button press
optional DebugSwipeDirection swipe = 2; // swipe direction optional DebugSwipeDirection swipe = 2; // swipe direction
optional string input = 3; // keyboard input optional string input = 3; // keyboard input
/** /**
@ -30,6 +30,15 @@ message DebugLinkDecision {
RIGHT = 3; RIGHT = 3;
} }
/**
* Structure representing button presses
*/
enum DebugButton {
NO = 0;
YES = 1;
INFO = 2;
}
optional uint32 x = 4; // touch X coordinate optional uint32 x = 4; // touch X coordinate
optional uint32 y = 5; // touch Y coordinate optional uint32 y = 5; // touch Y coordinate
optional bool wait = 6; // wait for layout change optional bool wait = 6; // wait for layout change

View File

@ -94,6 +94,8 @@ trezor.enums.ButtonRequestType
import trezor.enums.ButtonRequestType import trezor.enums.ButtonRequestType
trezor.enums.Capability trezor.enums.Capability
import trezor.enums.Capability import trezor.enums.Capability
trezor.enums.DebugButton
import trezor.enums.DebugButton
trezor.enums.DebugSwipeDirection trezor.enums.DebugSwipeDirection
import trezor.enums.DebugSwipeDirection import trezor.enums.DebugSwipeDirection
trezor.enums.DecredStakingSpendType trezor.enums.DecredStakingSpendType

View File

@ -62,14 +62,18 @@ if __debug__:
layout_change_chan.publish(storage.current_content) layout_change_chan.publish(storage.current_content)
async def dispatch_debuglink_decision(msg: DebugLinkDecision) -> None: async def dispatch_debuglink_decision(msg: DebugLinkDecision) -> None:
from trezor.enums import DebugButton
from trezor.enums import DebugSwipeDirection from trezor.enums import DebugSwipeDirection
from trezor.ui import Result from trezor.ui import Result
from trezor.ui.components.tt import confirm, swipe from trezor.ui.components.tt import confirm, swipe
if msg.yes_no is not None: if msg.button is not None:
await confirm_chan.put( if msg.button == DebugButton.NO:
Result(confirm.CONFIRMED if msg.yes_no else confirm.CANCELLED) await confirm_chan.put(Result(confirm.CANCELLED))
) elif msg.button == DebugButton.YES:
await confirm_chan.put(Result(confirm.CONFIRMED))
elif msg.button == DebugButton.INFO:
await confirm_chan.put(Result(confirm.INFO))
if msg.swipe is not None: if msg.swipe is not None:
if msg.swipe == DebugSwipeDirection.UP: if msg.swipe == DebugSwipeDirection.UP:
await swipe_chan.put(swipe.SWIPE_UP) await swipe_chan.put(swipe.SWIPE_UP)

View File

@ -0,0 +1,7 @@
# Automatically generated by pb2py
# fmt: off
# isort:skip_file
NO = 0
YES = 1
INFO = 2

View File

@ -429,6 +429,11 @@ if TYPE_CHECKING:
LEFT = 2 LEFT = 2
RIGHT = 3 RIGHT = 3
class DebugButton(IntEnum):
NO = 0
YES = 1
INFO = 2
class EthereumDataType(IntEnum): class EthereumDataType(IntEnum):
UINT = 1 UINT = 1
INT = 2 INT = 2

View File

@ -32,6 +32,7 @@ if TYPE_CHECKING:
from trezor.enums import CardanoTxAuxiliaryDataSupplementType # noqa: F401 from trezor.enums import CardanoTxAuxiliaryDataSupplementType # noqa: F401
from trezor.enums import CardanoTxSigningMode # noqa: F401 from trezor.enums import CardanoTxSigningMode # noqa: F401
from trezor.enums import CardanoTxWitnessType # noqa: F401 from trezor.enums import CardanoTxWitnessType # noqa: F401
from trezor.enums import DebugButton # noqa: F401
from trezor.enums import DebugSwipeDirection # noqa: F401 from trezor.enums import DebugSwipeDirection # noqa: F401
from trezor.enums import DecredStakingSpendType # noqa: F401 from trezor.enums import DecredStakingSpendType # noqa: F401
from trezor.enums import EthereumDataType # noqa: F401 from trezor.enums import EthereumDataType # noqa: F401
@ -2258,7 +2259,7 @@ if TYPE_CHECKING:
return isinstance(msg, cls) return isinstance(msg, cls)
class DebugLinkDecision(protobuf.MessageType): class DebugLinkDecision(protobuf.MessageType):
yes_no: "bool | None" button: "DebugButton | None"
swipe: "DebugSwipeDirection | None" swipe: "DebugSwipeDirection | None"
input: "str | None" input: "str | None"
x: "int | None" x: "int | None"
@ -2269,7 +2270,7 @@ if TYPE_CHECKING:
def __init__( def __init__(
self, self,
*, *,
yes_no: "bool | None" = None, button: "DebugButton | None" = None,
swipe: "DebugSwipeDirection | None" = None, swipe: "DebugSwipeDirection | None" = None,
input: "str | None" = None, input: "str | None" = None,
x: "int | None" = None, x: "int | None" = None,

View File

@ -91,7 +91,7 @@ bool protectButton(ButtonRequestType type, bool confirm_only) {
if (msg_tiny_id == MessageType_MessageType_DebugLinkDecision) { if (msg_tiny_id == MessageType_MessageType_DebugLinkDecision) {
msg_tiny_id = 0xFFFF; msg_tiny_id = 0xFFFF;
DebugLinkDecision *dld = (DebugLinkDecision *)msg_tiny; DebugLinkDecision *dld = (DebugLinkDecision *)msg_tiny;
result = dld->yes_no; result = dld->button;
debug_decided = true; debug_decided = true;
} }

View File

@ -0,0 +1 @@
Add press_info() to DebugLink.

View File

@ -147,7 +147,7 @@ class DebugLink:
def input( def input(
self, self,
word: Optional[str] = None, word: Optional[str] = None,
button: Optional[bool] = None, button: Optional[messages.DebugButton] = None,
swipe: Optional[messages.DebugSwipeDirection] = None, swipe: Optional[messages.DebugSwipeDirection] = None,
x: Optional[int] = None, x: Optional[int] = None,
y: Optional[int] = None, y: Optional[int] = None,
@ -162,7 +162,7 @@ class DebugLink:
raise ValueError("Invalid input - must use one of word, button, swipe") raise ValueError("Invalid input - must use one of word, button, swipe")
decision = messages.DebugLinkDecision( decision = messages.DebugLinkDecision(
yes_no=button, swipe=swipe, input=word, x=x, y=y, wait=wait, hold_ms=hold_ms button=button, swipe=swipe, input=word, x=x, y=y, wait=wait, hold_ms=hold_ms
) )
ret = self._call(decision, nowait=not wait) ret = self._call(decision, nowait=not wait)
if ret is not None: if ret is not None:
@ -177,10 +177,13 @@ class DebugLink:
return self.input(x=x, y=y, wait=wait) return self.input(x=x, y=y, wait=wait)
def press_yes(self) -> None: def press_yes(self) -> None:
self.input(button=True) self.input(button=messages.DebugButton.YES)
def press_no(self) -> None: def press_no(self) -> None:
self.input(button=False) self.input(button=messages.DebugButton.NO)
def press_info(self) -> None:
self.input(button=messages.DebugButton.INFO)
def swipe_up(self, wait: bool = False) -> None: def swipe_up(self, wait: bool = False) -> None:
self.input(swipe=messages.DebugSwipeDirection.UP, wait=wait) self.input(swipe=messages.DebugSwipeDirection.UP, wait=wait)

View File

@ -462,6 +462,12 @@ class DebugSwipeDirection(IntEnum):
RIGHT = 3 RIGHT = 3
class DebugButton(IntEnum):
NO = 0
YES = 1
INFO = 2
class EthereumDataType(IntEnum): class EthereumDataType(IntEnum):
UINT = 1 UINT = 1
INT = 2 INT = 2
@ -3529,7 +3535,7 @@ class RebootToBootloader(protobuf.MessageType):
class DebugLinkDecision(protobuf.MessageType): class DebugLinkDecision(protobuf.MessageType):
MESSAGE_WIRE_TYPE = 100 MESSAGE_WIRE_TYPE = 100
FIELDS = { FIELDS = {
1: protobuf.Field("yes_no", "bool", repeated=False, required=False), 1: protobuf.Field("button", "DebugButton", repeated=False, required=False),
2: protobuf.Field("swipe", "DebugSwipeDirection", repeated=False, required=False), 2: protobuf.Field("swipe", "DebugSwipeDirection", repeated=False, required=False),
3: protobuf.Field("input", "string", repeated=False, required=False), 3: protobuf.Field("input", "string", repeated=False, required=False),
4: protobuf.Field("x", "uint32", repeated=False, required=False), 4: protobuf.Field("x", "uint32", repeated=False, required=False),
@ -3541,7 +3547,7 @@ class DebugLinkDecision(protobuf.MessageType):
def __init__( def __init__(
self, self,
*, *,
yes_no: Optional["bool"] = None, button: Optional["DebugButton"] = None,
swipe: Optional["DebugSwipeDirection"] = None, swipe: Optional["DebugSwipeDirection"] = None,
input: Optional["str"] = None, input: Optional["str"] = None,
x: Optional["int"] = None, x: Optional["int"] = None,
@ -3549,7 +3555,7 @@ class DebugLinkDecision(protobuf.MessageType):
wait: Optional["bool"] = None, wait: Optional["bool"] = None,
hold_ms: Optional["int"] = None, hold_ms: Optional["int"] = None,
) -> None: ) -> None:
self.yes_no = yes_no self.button = button
self.swipe = swipe self.swipe = swipe
self.input = input self.input = input
self.x = x self.x = x

View File

@ -126,7 +126,7 @@ def send_clicks(dest):
echo("Please wait...") echo("Please wait...")
if key == "confirm": if key == "confirm":
output = "debug.input(button=True)" output = "debug.input(button=messages.DebugButton.YES)"
DEBUGLINK.press_yes() DEBUGLINK.press_yes()
elif key in "uj": elif key in "uj":
output = "debug.input(swipe=messages.DebugSwipeDirection.UP)" output = "debug.input(swipe=messages.DebugSwipeDirection.UP)"

View File

@ -49,7 +49,7 @@ int DEV_touch(struct U2Fob* device) {
return 0; return 0;
} }
sleep(1); sleep(1);
// send DebugLinkDecision{yes_no=True} to DebugLink interface // send DebugLinkDecision{button=DebugButton.YES} to DebugLink interface
hid_write(device->dev_debug, (const uint8_t *)"\x00?##\x00" "d\x00\x00\x00\x02\x08\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 65); hid_write(device->dev_debug, (const uint8_t *)"\x00?##\x00" "d\x00\x00\x00\x02\x08\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", 65);
sleep(1); sleep(1);
return 1; return 1;