@@ -64,11 +64,11 @@ def send_text(self, text):
6464
6565
6666class 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