Skip to content

Commit 514fe62

Browse files
committed
feat(python): use THP ACK piggybacking in DataChunk streaming
Used by translations & homescreen upload. [no changelog]
1 parent 2b41da5 commit 514fe62

1 file changed

Lines changed: 13 additions & 11 deletions

File tree

python/src/trezorlib/device.py

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
from .tools import Address, parse_path, workflow
3232

3333
if TYPE_CHECKING:
34-
from .client import Session
34+
from .client import InteractionContext, Session
3535

3636

3737
RECOVERY_BACK = "\x08" # backspace character, sent literally
@@ -77,16 +77,17 @@ def apply_settings(
7777

7878
if homescreen and session.version >= HOMESCREEN_STREAMING_MIN_VERSION:
7979
settings.homescreen_length = len(homescreen)
80-
response = session.call(settings, expect=messages.DataChunkRequest)
81-
_send_chunked_data(session, response, homescreen)
80+
with session.interact() as ctx:
81+
response = ctx.call(settings, expect=messages.DataChunkRequest)
82+
_send_chunked_data(ctx, response, homescreen)
8283
else:
8384
settings.homescreen = homescreen
8485
session.call(settings, expect=messages.Success)
8586
session.refresh_features()
8687

8788

8889
def _send_chunked_data(
89-
session: "Session",
90+
ctx: "InteractionContext",
9091
request: "messages.DataChunkRequest",
9192
language_data: bytes,
9293
) -> None:
@@ -96,7 +97,7 @@ def _send_chunked_data(
9697
data_length = response.data_length
9798
data_offset = response.data_offset
9899
chunk = language_data[data_offset : data_offset + data_length]
99-
response = session.call(messages.DataChunkAck(data_chunk=chunk))
100+
response = ctx.call(messages.DataChunkAck(data_chunk=chunk))
100101

101102

102103
@workflow()
@@ -108,12 +109,13 @@ def change_language(
108109
data_length = len(language_data)
109110
msg = messages.ChangeLanguage(data_length=data_length, show_display=show_display)
110111

111-
response = session.call(msg)
112-
if data_length > 0:
113-
response = messages.DataChunkRequest.ensure_isinstance(response)
114-
_send_chunked_data(session, response, language_data)
115-
else:
116-
messages.Success.ensure_isinstance(response)
112+
with session.interact() as ctx:
113+
response = ctx.call(msg)
114+
if data_length > 0:
115+
response = messages.DataChunkRequest.ensure_isinstance(response)
116+
_send_chunked_data(ctx, response, language_data)
117+
else:
118+
messages.Success.ensure_isinstance(response)
117119
session.refresh_features() # changing the language in features
118120

119121

0 commit comments

Comments
 (0)