Hotfix: Make controller emulation work on new Switch version

This commit is contained in:
Robert Martin
2020-04-15 20:31:17 +09:00
parent ac28b4e39e
commit e90499393b
2 changed files with 8 additions and 4 deletions
+4 -2
View File
@@ -16,7 +16,7 @@ logger = logging.getLogger(__name__)
async def _send_empty_input_reports(transport): async def _send_empty_input_reports(transport):
report = InputReport() report = InputReport()
while True: for i in range(10):
await transport.write(report) await transport.write(report)
await asyncio.sleep(1) await asyncio.sleep(1)
@@ -117,13 +117,15 @@ async def create_hid_server(protocol_factory, ctl_psm=17, itr_psm=19, device_id=
transport = L2CAP_Transport(asyncio.get_event_loop(), protocol, client_itr, client_ctl, 50, capture_file=capture_file) transport = L2CAP_Transport(asyncio.get_event_loop(), protocol, client_itr, client_ctl, 50, capture_file=capture_file)
protocol.connection_made(transport) protocol.connection_made(transport)
# send some empty input reports until the Switch decides to reply # HACK: send some empty input reports until the Switch decides to reply
future = asyncio.ensure_future(_send_empty_input_reports(transport)) future = asyncio.ensure_future(_send_empty_input_reports(transport))
await protocol.wait_for_output_report() await protocol.wait_for_output_report()
"""
future.cancel() future.cancel()
try: try:
await future await future
except asyncio.CancelledError: except asyncio.CancelledError:
pass pass
"""
return protocol.transport, protocol return protocol.transport, protocol
+4 -2
View File
@@ -49,7 +49,6 @@ class L2CAP_Transport(asyncio.Transport):
self._read_thread = None self._read_thread = None
break break
#logger.debug(f'received "{list(data)}"')
await self._protocol.report_received(data, self._itr_sock.getpeername()) await self._protocol.report_received(data, self._itr_sock.getpeername())
def start_reader(self): def start_reader(self):
@@ -99,6 +98,8 @@ class L2CAP_Transport(asyncio.Transport):
await self._is_reading.wait() await self._is_reading.wait()
data = await self._loop.sock_recv(self._itr_sock, self._read_buffer_size) data = await self._loop.sock_recv(self._itr_sock, self._read_buffer_size)
# logger.debug(f'received "{list(data)}"')
if not data: if not data:
# disconnect happened # disconnect happened
logger.error('No data received.') logger.error('No data received.')
@@ -146,7 +147,8 @@ class L2CAP_Transport(asyncio.Transport):
size = struct.pack('i', len(_bytes)) size = struct.pack('i', len(_bytes))
self._capture_file.write(_time + size + _bytes) self._capture_file.write(_time + size + _bytes)
#logger.debug(f'sending "{_bytes}"') # logger.debug(f'sending "{_bytes}"')
try: try:
await self._loop.sock_sendall(self._itr_sock, _bytes) await self._loop.sock_sendall(self._itr_sock, _bytes)
except OSError as err: except OSError as err: