Skip to content

Commit 0da605e

Browse files
committed
replace update_connection() with on_device_changed()
1 parent b871d1a commit 0da605e

File tree

1 file changed

+38
-58
lines changed

1 file changed

+38
-58
lines changed

keyboard/__init__.py

Lines changed: 38 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,11 @@ def send_text(self, text):
6464

6565

6666
class Keyboard:
67-
def __init__(self, keymap=(), pairs=(), verbose=True):
67+
def __init__(self, keymap=(), verbose=True):
6868
self.keymap = keymap
69-
self.profiles = {}
70-
self.pairs = pairs
7169
self.verbose = verbose
70+
self.profiles = {}
71+
self.pairs = ()
7272
self.pairs_handler = do_nothing
7373
self.pair_keys = set()
7474
self.macro_handler = do_nothing
@@ -77,12 +77,9 @@ def __init__(self, keymap=(), pairs=(), verbose=True):
7777
self.backlight = Backlight()
7878
self.uid = microcontroller.cpu.uid * 2
7979
self.usb_status = 0
80-
self.leds = None
8180
self.tap_delay = 500
8281
self.fast_type_thresh = 200
8382
self.pair_delay = 10
84-
85-
self._connection = ""
8683
self.adv_timeout = None
8784

8885
size = 4 + self.matrix.keys
@@ -106,47 +103,34 @@ def __init__(self, keymap=(), pairs=(), verbose=True):
106103
self.ble_hid = HID(ble_hid.devices)
107104
self.usb_hid = HID(usb_hid.devices)
108105

109-
def update_connection(self):
110-
if usb_is_connected() and self.usb_status == 3:
111-
conn = "USB"
106+
def on_device_changed(self, name):
107+
print("change to {}".format(name))
108+
if name in self.action_maps:
109+
self.current_keymap = self.action_maps[name]
112110
else:
113-
conn = "BT%d" % self.ble_id
114-
if conn != self._connection:
115-
self._connection = conn
116-
if conn in self.action_maps:
117-
self.current_keymap = self.action_maps[self._connection]
118-
else:
119-
self.current_keymap = self.actonmap
120-
print("Connection changed to %s" % self._connection)
111+
self.current_keymap = self.actonmap
121112

122-
# reset `layer_mask` when keymap is changed
123-
self.layer_mask = 1
113+
# reset `layer_mask` when keymap is changed
114+
self.layer_mask = 1
124115

125116
def check(self):
126117
if self.adv_timeout:
127118
if self.ble.connected:
128119
self.adv_timeout = 0
129120
self.backlight.set_bt_led(None)
130-
for c in self.ble.connections:
131-
try:
132-
# 11.25 ms is the min connection interval for most systems
133-
c.connection_interval = 11.25
134-
except Exception:
135-
print("Failed to set ble connection interval")
136-
# Avoid getting connection_interval, as it may block forever
137-
# self.log('ble connection interval {}'.format(c.connection_interval))
138121
elif time.time() > self.adv_timeout:
139122
self.stop_advertising()
140123

141124
if usb_is_connected():
142125
if self.usb_status == 0:
143126
self.usb_status = 3
144-
self.update_connection()
145-
elif self.usb_status > 0:
127+
self.on_device_changed("USB")
128+
else:
129+
if self.usb_status == 3:
130+
self.on_device_changed("BT{}".format(self.ble_id))
131+
if not self.ble.connected and not self.ble._adapter.advertising:
132+
self.start_advertising()
146133
self.usb_status = 0
147-
self.update_connection()
148-
if not self.ble.connected and not self.ble._adapter.advertising:
149-
self.start_advertising()
150134

151135
if self.usb_status == 3:
152136
self.backlight.set_hid_leds(self.usb_hid.leds)
@@ -172,9 +156,6 @@ def setup(self):
172156
for key in pair:
173157
self.pair_keys.add(key)
174158

175-
if not usb_is_connected():
176-
self.change_bt(self.ble_id)
177-
178159
def start_advertising(self):
179160
self.ble.start_advertising(self.advertisement)
180161
self.backlight.set_bt_led(self.ble_id)
@@ -275,10 +256,7 @@ def set_bt_id(self, n):
275256
n = 0
276257

277258
if self.ble.connected:
278-
try:
279-
self.ble_hid.release_all()
280-
except Exception as e:
281-
print(e)
259+
self.ble_hid.release_all()
282260
for c in self.ble.connections:
283261
c.disconnect()
284262
if self.ble._adapter.advertising:
@@ -301,22 +279,24 @@ def set_bt_id(self, n):
301279
self.log(self.ble._adapter.address)
302280

303281
def change_bt(self, n):
282+
changed = False
304283
if self.usb_status == 3:
305284
self.usb_status = 1
285+
changed = True
306286
if n != self.ble_id:
287+
changed = True
307288
self.set_bt_id(n)
308289
self.start_advertising()
309290
elif not self.ble.connected and not self.ble._adapter.advertising:
310291
self.start_advertising()
311-
self.update_connection()
292+
293+
if changed:
294+
self.on_device_changed("BT{}".format(n))
312295

313296
def toggle_bt(self):
314297
bt_is_off = True
315298
if self.ble.connected:
316-
try:
317-
self.ble_hid.release_all()
318-
except Exception as e:
319-
print(e)
299+
self.ble_hid.release_all()
320300
for c in self.ble.connections:
321301
c.disconnect()
322302
elif self.ble._adapter.advertising:
@@ -325,24 +305,24 @@ def toggle_bt(self):
325305
self.start_advertising()
326306
bt_is_off = False
327307
if bt_is_off:
328-
if self.usb_status == 1:
308+
if usb_is_connected() and self.usb_status != 3:
329309
self.usb_status = 3
310+
self.on_device_changed("USB")
330311
else:
331312
if self.usb_status == 3:
332313
self.usb_status = 1
333-
self.update_connection()
314+
self.on_device_changed("BT{}".format(self.ble_id))
334315

335316
def toggle_usb(self):
336-
if usb_is_connected():
337-
if self.usb_status == 1:
338-
self.usb_status = 3
339-
else:
340-
self.usb_status = 1
341-
try:
342-
self.usb_hid.release_all()
343-
except Exception as e:
344-
print(e)
345-
self.update_connection()
317+
if self.usb_status == 3:
318+
self.usb_status = 1
319+
self.usb_hid.release_all()
320+
if not self.ble.connected and not self.ble._adapter.advertising:
321+
self.start_advertising()
322+
self.on_device_changed("BT{}".format(self.ble_id))
323+
elif usb_is_connected():
324+
self.usb_status = 3
325+
self.on_device_changed("USB")
346326

347327
def action_code(self, position):
348328
position = COORDS[position]
@@ -530,7 +510,7 @@ def run(self):
530510
else:
531511
self.layer_mask |= mask
532512

533-
log("layers {}".format(self.layer_mask))
513+
log("layer_mask = {}".format(self.layer_mask))
534514
elif kind == ACT_MACRO:
535515
if callable(self.macro_handler):
536516
i = action_code & 0xFFF
@@ -622,7 +602,7 @@ def run(self):
622602
keycodes = mods_to_keycodes(mods)
623603
self.release(*keycodes)
624604
self.layer_mask &= ~(1 << layer)
625-
log("layers {}".format(self.layer_mask))
605+
log("layer_mask = {}".format(self.layer_mask))
626606
elif kind == ACT_MACRO:
627607
i = action_code & 0xFFF
628608
try:

0 commit comments

Comments
 (0)