64
64
___ , ___ , ___ , ___ , ___ , ___ , ___ , ___
65
65
),
66
66
)
67
- # fmt: on
68
67
69
68
KEY_NAME = (
70
- 'ESC' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '0' , '-' , '=' , 'BACKSPACE' ,
71
- 'TAB ' , 'Q ' , 'W ' , 'E ' , 'R ' , 'T ' , 'Y' , 'U ' , 'I ' , 'O ' , 'P ' , '[ ' , '] ' , '| ' ,
72
- 'CAPS' , ' A' , 'S' , 'D' , 'F' , 'G' , 'H' , 'J' , 'K' , 'L' , ';' , '"' , 'ENTER' ,
73
- 'LSHIFT' , 'Z ' , 'X ' , 'C ' , 'V ' , 'B ' , 'N ' , 'M ' , ', ' , '. ' , '/ ' , 'RSHIFT ' ,
74
- 'LCTRL' , 'LGUI' , 'LALT' , 'SPACE' , 'RALT' , 'MENU' , 'FN' , 'RCTRL'
69
+ 'ESC' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '0' , '-' , '=' , 'BACKSPACE' ,
70
+ '| ' , ']' , '[ ' , 'P ' , 'O ' , 'I ' , 'U ' , 'Y' , 'T ' , 'R ' , 'E ' , 'W ' , 'Q ' , 'TAB ' , 'CAPS ' ,
71
+ 'A' , 'S' , 'D' , 'F' , 'G' , 'H' , 'J' , 'K' , 'L' , ';' , '"' , 'ENTER' ,
72
+ 'RSHIFT' , '/ ' , '. ' , ', ' , 'M ' , 'N ' , 'B ' , 'V ' , 'C ' , 'X ' , 'Z ' , 'LSHIFT ' ,
73
+ 'LCTRL' , 'LGUI' , 'LALT' , 'SPACE' , 'RALT' , 'MENU' , 'FN' , 'RCTRL'
75
74
)
75
+ # fmt: on
76
76
77
- def get_name (key ):
78
- key = COORDS [key ]
79
- return KEY_NAME [key ]
80
77
81
78
@micropython .asm_thumb
82
79
def mem (r0 ):
@@ -258,6 +255,36 @@ def stop_advertising(self):
258
255
except Exception as e :
259
256
print (e )
260
257
258
+ def get_key_sequence_info (self , start , end ):
259
+ """Get the info from a sequence of key events"""
260
+ matrix = self .matrix
261
+ event = matrix .view (start - 1 )
262
+ key = event & 0x7F
263
+ desc = KEY_NAME [key ]
264
+ if event < 0x80 :
265
+ desc += ' \\ '
266
+ t0 = matrix .get_keydown_time (key )
267
+ else :
268
+ desc += ' / '
269
+ t0 = matrix .get_keyup_time (key )
270
+
271
+ t = []
272
+ for i in range (start , end ):
273
+ event = matrix .view (i )
274
+ key = event & 0x7F
275
+ desc += KEY_NAME [key ]
276
+ if event < 0x80 :
277
+ desc += ' \\ '
278
+ t1 = matrix .get_keydown_time (key )
279
+ else :
280
+ desc += ' / '
281
+ t1 = matrix .get_keyup_time (key )
282
+ dt = matrix .ms (t1 - t0 )
283
+ t0 = t1
284
+ t .append (dt )
285
+
286
+ return desc , t
287
+
261
288
def is_tapping_key (self , key ):
262
289
"""Check if the key is tapped (press & release quickly)"""
263
290
matrix = self .matrix
@@ -277,44 +304,36 @@ def is_tapping_key(self, key):
277
304
# --+-------+-------+-------+------> t
278
305
# | dt1 |
279
306
# dt1 < tap_delay
280
- new_key &= 0x7F
281
- new_key_name = get_name (new_key )
282
- key_name = get_name (key )
283
- print ('Tap - {} \\ {} \\ {} /' .format (new_key_name , key_name , new_key_name ))
284
- dt0 = matrix .get_keydown_time (key ) - matrix .get_keydown_time (new_key )
285
- dt1 = matrix .get_keyup_time (new_key ) - matrix .get_keydown_time (key )
286
- print (' dt0 = {}, dt1 = {}' .format (dt0 , dt1 ))
307
+ if self .verbose :
308
+ desc , t = self .get_key_sequence_info (- 1 , n )
309
+ print (desc )
310
+ print (t )
287
311
return True
288
312
289
313
if n == 1 :
290
314
n = matrix .wait (
291
315
self .fast_type_thresh
292
316
- matrix .ms (matrix .time () - matrix .get_keydown_time (new_key ))
293
317
)
294
- if n >= 2 :
295
- if target == matrix .view (1 ):
296
- # Fast Typing - B is a tap-key
297
- # B↓ C↓ B↑ C↑
298
- # --+-------+-------+-------+------> t
299
- # | dt1 | dt2 |
300
- # dt1 < tap_delay && dt2 < fast_type_thresh
301
- new_key = matrix .view (0 ) & 0x7F
302
- new_key_name = get_name (new_key )
303
- key_name = get_name (key )
304
- self .log ('Tap - {} \\ {} \\ {} /' .format (key_name , new_key_name , key_name ))
305
- dt1 = matrix .get_keydown_time (new_key ) - matrix .get_keydown_time (key )
306
- dt2 = matrix .get_keyup_time (key ) - matrix .get_keydown_time (new_key )
307
- self .log (' dt1 = {}, dt2 = {}' .format (dt1 , dt2 ))
308
- return True
318
+ if n < 2 :
319
+ return False
320
+
321
+ if target == matrix .view (1 ):
322
+ # Fast Typing - B is a tap-key
323
+ # B↓ C↓ B↑ C↑
324
+ # --+-------+-------+-------+------> t
325
+ # | dt1 | dt2 |
326
+ # dt1 < tap_delay && dt2 < fast_type_thresh
327
+ if self .verbose :
328
+ desc , t = self .get_key_sequence_info (- 1 , n )
329
+ print (desc )
330
+ print (t )
331
+ return True
309
332
310
- new_key = matrix .view (0 ) & 0x7F
311
- if new_key == (matrix .view (1 ) & 0x7F ):
312
- new_key_name = get_name (new_key )
313
- key_name = get_name (key )
314
- self .log ('Hold - {} \\ {} \\ {} /' .format (key_name , new_key_name , new_key_name ))
315
- dt1 = matrix .get_keydown_time (new_key ) - matrix .get_keydown_time (key )
316
- dt2 = matrix .get_keyup_time (new_key ) - matrix .get_keydown_time (new_key )
317
- self .log (' dt1 = {}, dt2 = {}' .format (dt1 , dt2 ))
333
+ if self .verbose :
334
+ desc , t = self .get_key_sequence_info (- 1 , n )
335
+ print (desc )
336
+ print (t )
318
337
319
338
return False
320
339
@@ -439,6 +458,7 @@ def run(self):
439
458
dev = Device (self )
440
459
keys = [0 ] * matrix .keys
441
460
ms = matrix .ms
461
+ last_time = 0
442
462
while True :
443
463
n = matrix .wait ()
444
464
self .check ()
@@ -481,8 +501,11 @@ def run(self):
481
501
if action_code < 0xFF :
482
502
self .press (action_code )
483
503
if self .verbose :
484
- dt = ms (matrix .time () - matrix .get_keydown_time (key ))
485
- log ("{} {} \\ {} latency {}" .format (key , get_name (key ), hex (action_code ), dt ))
504
+ keydown_time = matrix .get_keydown_time (key )
505
+ dt = ms (matrix .time () - keydown_time )
506
+ dt2 = ms (keydown_time - last_time )
507
+ last_time = keydown_time
508
+ print ("{} {} \\ {} latency {} | {}" .format (key , KEY_NAME [key ], hex (action_code ), dt , dt2 ))
486
509
else :
487
510
kind = action_code >> 12
488
511
if kind < ACT_MODS_TAP :
@@ -562,8 +585,12 @@ def run(self):
562
585
log ("switch to bt {}" .format (i ))
563
586
self .change_bt (i )
564
587
565
- dt = ms (matrix .time () - matrix .get_keydown_time (key ))
566
- log ("{} \\ {} latency {}" .format (key , hex (keys [key ]), dt ))
588
+ if self .verbose :
589
+ keydown_time = matrix .get_keydown_time (key )
590
+ dt = ms (matrix .time () - keydown_time )
591
+ dt2 = ms (keydown_time - last_time )
592
+ last_time = keydown_time
593
+ print ("{} {} \\ {} latency {} | {}" .format (key , KEY_NAME [key ], hex (action_code ), dt , dt2 ))
567
594
else :
568
595
action_code = keys [key ]
569
596
if action_code < 0xFF :
@@ -605,5 +632,8 @@ def run(self):
605
632
print (e )
606
633
607
634
if self .verbose :
608
- dt = ms (matrix .time () - matrix .get_keyup_time (key ))
609
- log ("{} {} / {} latency {}" .format (key , get_name (key ), hex (action_code ), dt ))
635
+ keyup_time = matrix .get_keyup_time (key )
636
+ dt = ms (matrix .time () - keyup_time )
637
+ dt2 = ms (keyup_time - last_time )
638
+ last_time = keyup_time
639
+ print ("{} {} / {} latency {} | {}" .format (key , KEY_NAME [key ], hex (action_code ), dt , dt2 ))
0 commit comments