diff --git a/platform/daemon/binding/python/btstack/btstack_client.py b/platform/daemon/binding/python/btstack/btstack_client.py index f84b831f7..a9d4deb2c 100755 --- a/platform/daemon/binding/python/btstack/btstack_client.py +++ b/platform/daemon/binding/python/btstack/btstack_client.py @@ -2,6 +2,7 @@ import socket import struct import btstack.command_builder import btstack.event_factory +import time BTSTACK_SERVER_HOST = "localhost" BTSTACK_SERVER_TCP_PORT = 13333 @@ -27,8 +28,16 @@ class BTstackClient(btstack.command_builder.CommandBuilder): print("[+] Connect to server on port %u" % BTSTACK_SERVER_TCP_PORT) self.btstack_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.btstack_server_socket.connect((BTSTACK_SERVER_HOST, BTSTACK_SERVER_TCP_PORT)) - # TODO: handle connection failure - e.g. retry for max 5 seconds every seconde + timeout = time.time() + 3 + while True: + try: + self.btstack_server_socket.connect((BTSTACK_SERVER_HOST, BTSTACK_SERVER_TCP_PORT)) + return True + + except socket.error as e: + if time.time() > timeout: + print ("[!] Connection error: %s" % e) + return False def register_packet_handler(self, callback): print("[+] Register packet handler") diff --git a/platform/daemon/binding/python/test.py b/platform/daemon/binding/python/test.py index 2640765d4..9e64cc217 100755 --- a/platform/daemon/binding/python/test.py +++ b/platform/daemon/binding/python/test.py @@ -20,12 +20,12 @@ btstack_server.load() # btstack_server.set_storage_path("/tmp") btstack_server.run_tcp() - # Client for BTstack Server btstack_client = btstack_client.BTstackClient() # connect to slient, register for HCI packets and power up -btstack_client.connect() -btstack_client.register_packet_handler(packet_handler) -btstack_client.btstack_set_power_mode(1) -btstack_client.run() +ok = btstack_client.connect() +if ok: + btstack_client.register_packet_handler(packet_handler) + btstack_client.btstack_set_power_mode(1) + btstack_client.run()