@@ -70,18 +70,61 @@ def handleNotification(self, cHandle, data):
70
70
_log .info ("Notification from hndl: %s - %r" , cHandle , data )
71
71
72
72
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
+
73
117
def main ():
74
118
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 )
76
121
77
122
while True :
78
123
try :
79
- zei .waitForNotifications (5.0 )
124
+ zei .waitForNotifications (timeout = None )
80
125
except Exception as e :
81
126
_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 ()
85
128
86
129
zei .disconnect ()
87
130
0 commit comments