Skip to content

Commit 3a887ad

Browse files
committed
[WIP] Try to improve connection handling
1 parent cb27cbf commit 3a887ad

File tree

1 file changed

+48
-5
lines changed

1 file changed

+48
-5
lines changed

zei.py

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -70,18 +70,61 @@ def handleNotification(self, cHandle, data):
7070
_log.info("Notification from hndl: %s - %r", cHandle, data)
7171

7272

73+
class ZeiDiscoveryDelegate(btle.DefaultDelegate):
74+
def __init__(self, scanner, periph):
75+
btle.DefaultDelegate.__init__(self)
76+
self.scanner = scanner
77+
self.periph = periph
78+
79+
def handleDiscovery(self, dev, isNewDev, isNewData):
80+
if not dev.addr == 'f1:05:a5:9c:2e:9b':
81+
return
82+
_log.info("Device %s (%s), RSSI=%d dB", dev.addr, dev.addrType, dev.rssi)
83+
for (adtype, desc, value) in dev.getScanData():
84+
_log.info(" %s = %s", desc, value)
85+
# reconnect
86+
87+
# bluepy can only do one thing at a time, so stop scanning while trying to connect
88+
# this is not supported by bluepy
89+
#self.scanner.stop()
90+
91+
try:
92+
self.periph.connect(dev)
93+
self.scanner.stop_scanning = True
94+
except:
95+
# re
96+
self.scanner.start()
97+
pass
98+
99+
100+
class ZeiDiscovery(btle.Scanner):
101+
102+
def __init__(self, periph=None, **kwargs):
103+
self.zei = periph
104+
btle.Scanner.__init__(self, **kwargs)
105+
#self.withDelegate(ZeiDiscoveryDelegate(self, self.zei))
106+
#self.stop_scanning = False
107+
108+
def reconnect(self):
109+
self.iface=self.zei.iface
110+
self.clear()
111+
self.start()
112+
while self.zei.addr not in self.scanned:
113+
self.process(timeout=2)
114+
self.stop()
115+
self.zei.connect(self.scanned[self.zei.addr])
116+
73117
def main():
74118

75-
zei = Zei('f1:05:a5:9c:2e:9b', 'random', iface=0)
119+
zei = Zei('f1:05:a5:9c:2e:9b', 'random', iface=1)
120+
scanner = ZeiDiscovery(zei)
76121

77122
while True:
78123
try:
79-
zei.waitForNotifications(5.0)
124+
zei.waitForNotifications(timeout=None)
80125
except Exception as e:
81126
_log.exception(e)
82-
83-
# todo: Not just connect. Check if device is advertising first.
84-
zei.connect('f1:05:a5:9c:2e:9b', 'random', iface=0)
127+
scanner.reconnect()
85128

86129
zei.disconnect()
87130

0 commit comments

Comments
 (0)