mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-11-22 23:48:12 +00:00
wire: use memoryview() asap in the parsing process
This commit is contained in:
parent
67ac47f087
commit
688d293b01
@ -76,8 +76,10 @@ Receives report payloads.
|
|||||||
Sends (msg_type, data_len) to target, followed by data chunks.
|
Sends (msg_type, data_len) to target, followed by data chunks.
|
||||||
Throws EOFError after last data chunk, in case of valid checksum.
|
Throws EOFError after last data chunk, in case of valid checksum.
|
||||||
Throws MessageChecksumError to target if data doesn't match the checksum.
|
Throws MessageChecksumError to target if data doesn't match the checksum.
|
||||||
|
|
||||||
|
Pass report payloads as `memoryview` for cheaper slicing.
|
||||||
'''
|
'''
|
||||||
message = memoryview((yield)) # read first report
|
message = yield # read first report
|
||||||
msg_type, data_len, data_tail = parse_message(message)
|
msg_type, data_len, data_tail = parse_message(message)
|
||||||
|
|
||||||
target = genfunc(msg_type, data_len, session_id, *args)
|
target = genfunc(msg_type, data_len, session_id, *args)
|
||||||
@ -95,7 +97,7 @@ Throws MessageChecksumError to target if data doesn't match the checksum.
|
|||||||
checksum = ubinascii.crc32(data_chunk, checksum)
|
checksum = ubinascii.crc32(data_chunk, checksum)
|
||||||
|
|
||||||
if data_len > 0:
|
if data_len > 0:
|
||||||
data_tail = memoryview((yield)) # read next report
|
data_tail = yield # read next report
|
||||||
|
|
||||||
msg_footer = data_tail[:_MSG_FOOTER_LEN]
|
msg_footer = data_tail[:_MSG_FOOTER_LEN]
|
||||||
if len(msg_footer) < _MSG_FOOTER_LEN:
|
if len(msg_footer) < _MSG_FOOTER_LEN:
|
||||||
|
@ -40,6 +40,8 @@ Receives report payloads.
|
|||||||
Sends (msg_type, data_len) to target, followed by data chunks.
|
Sends (msg_type, data_len) to target, followed by data chunks.
|
||||||
Throws EOFError after last data chunk, in case of valid checksum.
|
Throws EOFError after last data chunk, in case of valid checksum.
|
||||||
Throws MessageChecksumError to target if data doesn't match the checksum.
|
Throws MessageChecksumError to target if data doesn't match the checksum.
|
||||||
|
|
||||||
|
Pass report payloads as `memoryview` for cheaper slicing.
|
||||||
'''
|
'''
|
||||||
|
|
||||||
message = yield # read first report
|
message = yield # read first report
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import ubinascii
|
from ubinascii import hexlify
|
||||||
from micropython import const
|
from micropython import const
|
||||||
from trezor import msg, loop, log
|
from trezor import msg, loop, log
|
||||||
|
|
||||||
@ -8,12 +8,12 @@ _DEFAULT_IFACE = const(0xFF00) # TODO: use proper interface
|
|||||||
def read_report_stream(target, iface=_DEFAULT_IFACE):
|
def read_report_stream(target, iface=_DEFAULT_IFACE):
|
||||||
while True:
|
while True:
|
||||||
report, = yield loop.Select(iface)
|
report, = yield loop.Select(iface)
|
||||||
log.debug(__name__, 'read report %s', ubinascii.hexlify(report))
|
log.debug(__name__, 'read report %s', hexlify(report))
|
||||||
target.send(report)
|
target.send(memoryview(report))
|
||||||
|
|
||||||
|
|
||||||
def write_report_stream(iface=_DEFAULT_IFACE):
|
def write_report_stream(iface=_DEFAULT_IFACE):
|
||||||
while True:
|
while True:
|
||||||
report = yield
|
report = yield
|
||||||
log.debug(__name__, 'write report %s', ubinascii.hexlify(report))
|
log.debug(__name__, 'write report %s', hexlify(report))
|
||||||
msg.send(iface, report)
|
msg.send(iface, report)
|
||||||
|
Loading…
Reference in New Issue
Block a user