@@ -64,11 +64,11 @@ def send_text(self, text):
64
64
65
65
66
66
class Keyboard :
67
- def __init__ (self , keymap = (), pairs = (), verbose = True ):
67
+ def __init__ (self , keymap = (), verbose = True ):
68
68
self .keymap = keymap
69
- self .profiles = {}
70
- self .pairs = pairs
71
69
self .verbose = verbose
70
+ self .profiles = {}
71
+ self .pairs = ()
72
72
self .pairs_handler = do_nothing
73
73
self .pair_keys = set ()
74
74
self .macro_handler = do_nothing
@@ -77,12 +77,9 @@ def __init__(self, keymap=(), pairs=(), verbose=True):
77
77
self .backlight = Backlight ()
78
78
self .uid = microcontroller .cpu .uid * 2
79
79
self .usb_status = 0
80
- self .leds = None
81
80
self .tap_delay = 500
82
81
self .fast_type_thresh = 200
83
82
self .pair_delay = 10
84
-
85
- self ._connection = ""
86
83
self .adv_timeout = None
87
84
88
85
size = 4 + self .matrix .keys
@@ -106,47 +103,34 @@ def __init__(self, keymap=(), pairs=(), verbose=True):
106
103
self .ble_hid = HID (ble_hid .devices )
107
104
self .usb_hid = HID (usb_hid .devices )
108
105
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 ]
112
110
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
121
112
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
124
115
125
116
def check (self ):
126
117
if self .adv_timeout :
127
118
if self .ble .connected :
128
119
self .adv_timeout = 0
129
120
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))
138
121
elif time .time () > self .adv_timeout :
139
122
self .stop_advertising ()
140
123
141
124
if usb_is_connected ():
142
125
if self .usb_status == 0 :
143
126
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 ()
146
133
self .usb_status = 0
147
- self .update_connection ()
148
- if not self .ble .connected and not self .ble ._adapter .advertising :
149
- self .start_advertising ()
150
134
151
135
if self .usb_status == 3 :
152
136
self .backlight .set_hid_leds (self .usb_hid .leds )
@@ -172,9 +156,6 @@ def setup(self):
172
156
for key in pair :
173
157
self .pair_keys .add (key )
174
158
175
- if not usb_is_connected ():
176
- self .change_bt (self .ble_id )
177
-
178
159
def start_advertising (self ):
179
160
self .ble .start_advertising (self .advertisement )
180
161
self .backlight .set_bt_led (self .ble_id )
@@ -275,10 +256,7 @@ def set_bt_id(self, n):
275
256
n = 0
276
257
277
258
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 ()
282
260
for c in self .ble .connections :
283
261
c .disconnect ()
284
262
if self .ble ._adapter .advertising :
@@ -301,22 +279,24 @@ def set_bt_id(self, n):
301
279
self .log (self .ble ._adapter .address )
302
280
303
281
def change_bt (self , n ):
282
+ changed = False
304
283
if self .usb_status == 3 :
305
284
self .usb_status = 1
285
+ changed = True
306
286
if n != self .ble_id :
287
+ changed = True
307
288
self .set_bt_id (n )
308
289
self .start_advertising ()
309
290
elif not self .ble .connected and not self .ble ._adapter .advertising :
310
291
self .start_advertising ()
311
- self .update_connection ()
292
+
293
+ if changed :
294
+ self .on_device_changed ("BT{}" .format (n ))
312
295
313
296
def toggle_bt (self ):
314
297
bt_is_off = True
315
298
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 ()
320
300
for c in self .ble .connections :
321
301
c .disconnect ()
322
302
elif self .ble ._adapter .advertising :
@@ -325,24 +305,24 @@ def toggle_bt(self):
325
305
self .start_advertising ()
326
306
bt_is_off = False
327
307
if bt_is_off :
328
- if self .usb_status == 1 :
308
+ if usb_is_connected () and self .usb_status != 3 :
329
309
self .usb_status = 3
310
+ self .on_device_changed ("USB" )
330
311
else :
331
312
if self .usb_status == 3 :
332
313
self .usb_status = 1
333
- self .update_connection ( )
314
+ self .on_device_changed ( "BT{}" . format ( self . ble_id ) )
334
315
335
316
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" )
346
326
347
327
def action_code (self , position ):
348
328
position = COORDS [position ]
@@ -530,7 +510,7 @@ def run(self):
530
510
else :
531
511
self .layer_mask |= mask
532
512
533
- log ("layers {}" .format (self .layer_mask ))
513
+ log ("layer_mask = {}" .format (self .layer_mask ))
534
514
elif kind == ACT_MACRO :
535
515
if callable (self .macro_handler ):
536
516
i = action_code & 0xFFF
@@ -622,7 +602,7 @@ def run(self):
622
602
keycodes = mods_to_keycodes (mods )
623
603
self .release (* keycodes )
624
604
self .layer_mask &= ~ (1 << layer )
625
- log ("layers {}" .format (self .layer_mask ))
605
+ log ("layer_mask = {}" .format (self .layer_mask ))
626
606
elif kind == ACT_MACRO :
627
607
i = action_code & 0xFFF
628
608
try :
0 commit comments