From d3fbd441d86df50e57a28a1fe40fcfbdb7ff9a95 Mon Sep 17 00:00:00 2001 From: Cambridge Yang Date: Thu, 2 Apr 2020 09:20:25 -0400 Subject: [PATCH] trying to reconnect --- joycontrol/server.py | 12 +++++++++--- run_controller_cli.py | 25 +++++++++++++++++++++---- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/joycontrol/server.py b/joycontrol/server.py index 65351a3..a680f02 100644 --- a/joycontrol/server.py +++ b/joycontrol/server.py @@ -39,7 +39,9 @@ async def create_hid_server(protocol_factory, ctl_psm=17, itr_psm=19, device_id= itr_sock = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_L2CAP) ctl_sock.setblocking(False) itr_sock.setblocking(False) - + ctl_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + itr_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + try: hid = HidDevice(device_id=device_id) @@ -94,6 +96,12 @@ async def create_hid_server(protocol_factory, ctl_psm=17, itr_psm=19, device_id= # stop advertising hid.discoverable(False) + await run_protocol_on_connection(protocol, client_itr, capture_file=capture_file) + + return protocol.transport, protocol + + +async def run_protocol_on_connection(protocol, client_itr, capture_file=None): transport = L2CAP_Transport(asyncio.get_event_loop(), protocol, client_itr, 50, capture_file=capture_file) protocol.connection_made(transport) @@ -105,5 +113,3 @@ async def create_hid_server(protocol_factory, ctl_psm=17, itr_psm=19, device_id= await future except asyncio.CancelledError: pass - - return transport, protocol diff --git a/run_controller_cli.py b/run_controller_cli.py index 8baab92..2550924 100644 --- a/run_controller_cli.py +++ b/run_controller_cli.py @@ -2,6 +2,7 @@ import argparse import asyncio import logging import os +import socket from contextlib import contextmanager from joycontrol import logging_default as log @@ -9,14 +10,24 @@ from joycontrol.command_line_interface import ControllerCLI from joycontrol.controller import Controller from joycontrol.memory import FlashMemory from joycontrol.protocol import controller_protocol_factory -from joycontrol.server import create_hid_server +from joycontrol.server import create_hid_server, run_protocol_on_connection logger = logging.getLogger(__name__) -async def _main(controller, capture_file=None, spi_flash=None, device_id=None): +async def _main(controller, console_bt_addr=None, capture_file=None, spi_flash=None, device_id=None): factory = controller_protocol_factory(controller, spi_flash=spi_flash) - transport, protocol = await create_hid_server(factory, 17, 19, capture_file=capture_file, device_id=device_id) + ctl_psm, itr_psm = 17, 19 + if console_bt_addr is None: + transport, protocol = await create_hid_server(factory, + ctl_psm=ctl_psm, itr_psm=itr_psm, capture_file=capture_file, device_id=device_id) + else: + protocol = factory() + client_ctl = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_SEQPACKET, socket.BTPROTO_L2CAP) + # client_ctl.setblocking(False) + client_ctl.connect((console_bt_addr, ctl_psm)) + await run_protocol_on_connection(protocol, client_ctl) + transport = protocol.transport controller_state = protocol.get_controller_state() @@ -41,6 +52,7 @@ if __name__ == '__main__': parser.add_argument('-l', '--log') parser.add_argument('-d', '--device_id') parser.add_argument('--spi_flash') + parser.add_argument('--console-bt-addr', type=str, default=None) args = parser.parse_args() if args.controller == 'JOYCON_R': @@ -73,5 +85,10 @@ if __name__ == '__main__': with get_output(args.log) as capture_file: loop = asyncio.get_event_loop() loop.run_until_complete( - _main(controller, capture_file=capture_file, spi_flash=spi_flash, device_id=args.device_id) + _main(controller, + console_bt_addr=args.console_bt_addr, + capture_file=capture_file, + spi_flash=spi_flash, + device_id=args.device_id + ) )