Skip to content

Commit aec5af5

Browse files
committed
simplify switching between USB and Bluetooth
1 parent acd2ee2 commit aec5af5

File tree

2 files changed

+36
-37
lines changed

2 files changed

+36
-37
lines changed

keyboard/__init__.py

Lines changed: 35 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,11 @@ def __init__(self, keymap=(), pairs=(), verbose=True):
121121
self.advertisement = ProvideServicesAdvertisement(ble_hid, self.battery)
122122
self.advertisement.appearance = 961
123123
self.ble = adafruit_ble.BLERadio()
124-
self.change_bt(self.ble_id)
124+
self.set_bt_id(self.ble_id)
125125
self.ble_hid = HID(ble_hid.devices)
126126
self.usb_hid = HID(usb_hid.devices)
127+
if not usb_is_connected():
128+
self.change_bt(self.ble_id)
127129

128130
def update_connection(self):
129131
if usb_is_connected() and self.usb_status == 3:
@@ -157,28 +159,24 @@ def check(self):
157159
elif time.time() > self.adv_timeout:
158160
self.stop_advertising()
159161

160-
leds = None
161162
if usb_is_connected():
162163
if self.usb_status == 0:
163164
self.usb_status = 3
164-
elif self.usb_status == 3:
165-
leds = self.usb_hid.leds
165+
self.update_connection()
166166
elif self.usb_status > 0:
167167
self.usb_status = 0
168-
if not self.ble._adapter.advertising:
168+
self.update_connection()
169+
if not self.ble.connected and not self.ble._adapter.advertising:
169170
self.start_advertising()
170171

171-
if leds is None:
172-
leds = self.ble_hid.leds if self.ble.connected else 0
173-
if leds != self.leds:
174-
self.leds = leds
175-
self.backlight.set_hid_leds(leds)
176-
self.log("keyboard leds {}".format(bin(leds)))
177-
self.update_connection()
172+
if self.usb_status == 3:
173+
self.backlight.set_hid_leds(self.usb_hid.leds)
174+
elif self.ble.connected:
175+
self.backlight.set_hid_leds(self.ble_hid.leds)
178176

179177
# update battery level
180178
if time.time() > self.battery_update_time:
181-
self.battery_update_time = time.time() + 360
179+
self.battery_update_time = time.time() + 3600
182180
self.battery.level = battery_level()
183181

184182
def setup(self):
@@ -290,7 +288,10 @@ def is_tapping_key(self, key):
290288

291289
return False
292290

293-
def change_bt(self, n):
291+
def set_bt_id(self, n):
292+
if 0 > n or n > 9:
293+
n = 0
294+
294295
if self.ble.connected:
295296
try:
296297
self.ble_hid.release_all()
@@ -301,9 +302,6 @@ def change_bt(self, n):
301302
if self.ble._adapter.advertising:
302303
self.ble.stop_advertising()
303304

304-
if 0 > n or n > 9:
305-
return
306-
307305
uid = self.uid[n : n + 6]
308306
uid[-1] = uid[-1] | 0xC0
309307
address = _bleio.Address(uid, _bleio.Address.RANDOM_STATIC)
@@ -320,9 +318,18 @@ def change_bt(self, n):
320318
print(e)
321319
self.log(self.ble._adapter.address)
322320

323-
self.start_advertising()
321+
def change_bt(self, n):
322+
if self.usb_status == 3:
323+
self.usb_status = 1
324+
if n != self.ble_id:
325+
self.set_bt_id(n)
326+
self.start_advertising()
327+
elif not self.ble.connected and not self.ble._adapter.advertising:
328+
self.start_advertising()
329+
self.update_connection()
324330

325331
def toggle_bt(self):
332+
bt_is_off = True
326333
if self.ble.connected:
327334
try:
328335
self.ble_hid.release_all()
@@ -334,6 +341,13 @@ def toggle_bt(self):
334341
self.stop_advertising()
335342
else:
336343
self.start_advertising()
344+
bt_is_off = False
345+
if bt_is_off:
346+
if self.usb_status == 1:
347+
self.usb_status = 3
348+
else:
349+
if self.usb_status == 3:
350+
self.usb_status = 1
337351
self.update_connection()
338352

339353
def toggle_usb(self):
@@ -371,12 +385,7 @@ def press(self, *keycodes):
371385
try:
372386
if self.usb_status == 0x3 and usb_is_connected():
373387
self.usb_hid.press(*keycodes)
374-
return
375-
except Exception as e:
376-
print(e)
377-
378-
try:
379-
if self.ble.connected:
388+
elif self.ble.connected:
380389
self.ble_hid.press(*keycodes)
381390
elif not self.ble._adapter.advertising:
382391
self.start_advertising()
@@ -387,12 +396,7 @@ def release(self, *keycodes):
387396
try:
388397
if self.usb_status == 0x3 and usb_is_connected():
389398
self.usb_hid.release(*keycodes)
390-
return
391-
except Exception as e:
392-
print(e)
393-
394-
try:
395-
if self.ble.connected:
399+
elif self.ble.connected:
396400
self.ble_hid.release(*keycodes)
397401
except Exception as e:
398402
print(e)
@@ -401,12 +405,7 @@ def send_consumer(self, keycode):
401405
try:
402406
if self.usb_status == 0x3 and usb_is_connected():
403407
self.usb_hid.send_consumer(keycode)
404-
return
405-
except Exception as e:
406-
print(e)
407-
408-
try:
409-
if self.ble.connected:
408+
elif self.ble.connected:
410409
self.ble_hid.send_consumer(keycode)
411410
except Exception as e:
412411
print(e)

keyboard/hid.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,4 @@ def release_all(self):
8585
def leds(self):
8686
if self._leds:
8787
return self._leds.report[0]
88-
return None
88+
return 0

0 commit comments

Comments
 (0)