Skip to content

Commit 56c8d03

Browse files
authored
Merge pull request #53 from sago35/keycodes
Remove the dependency on the keycodes/jp package from sago35/tinygo-keyboard Fix the issue where Macros do not work correctly when using layouts other than US
2 parents 4a626c4 + 11db3bc commit 56c8d03

File tree

3 files changed

+247
-50
lines changed

3 files changed

+247
-50
lines changed

keyboard.go

Lines changed: 40 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import (
1212
"time"
1313

1414
"github.com/sago35/tinygo-keyboard/keycodes"
15-
"github.com/sago35/tinygo-keyboard/keycodes/jp"
1615
"golang.org/x/exp/slices"
1716
)
1817

@@ -491,7 +490,24 @@ func (d *Device) RunMacro(no uint8) error {
491490
} else {
492491
idx = i + idx
493492
}
494-
k.Keyboard.Write(macro[i:idx])
493+
if keycodes.CharToKeyCodeMap != nil {
494+
for _, b := range macro[i:idx] {
495+
kc := keycodes.CharToKeyCodeMap[b]
496+
switch kc & keycodes.ModKeyMask {
497+
case keycodes.TypeNormal:
498+
k.Keyboard.Press(kc)
499+
case keycodes.TypeNormal | keycodes.ShiftMask:
500+
k.Keyboard.Down(keycodes.KeyLeftShift)
501+
k.Keyboard.Press(kc ^ keycodes.ShiftMask)
502+
k.Keyboard.Up(keycodes.KeyLeftShift)
503+
default:
504+
//skip
505+
}
506+
time.Sleep(10 * time.Millisecond)
507+
}
508+
} else {
509+
k.Keyboard.Write(macro[i:idx])
510+
}
495511
i = idx
496512
}
497513
}
@@ -549,27 +565,27 @@ func (d *Device) KeyVia(layer, kbIndex, index int) Keycode {
549565
}
550566
kc := d.kb[kbIndex].Key(layer, index)
551567
switch kc {
552-
case jp.MouseLeft:
568+
case keycodes.MouseLeft:
553569
kc = 0x00D1
554-
case jp.MouseRight:
570+
case keycodes.MouseRight:
555571
kc = 0x00D2
556-
case jp.MouseMiddle:
572+
case keycodes.MouseMiddle:
557573
kc = 0x00D3
558-
case jp.MouseBack:
574+
case keycodes.MouseBack:
559575
kc = 0x00D4
560-
case jp.MouseForward:
576+
case keycodes.MouseForward:
561577
kc = 0x00D5
562-
case jp.WheelUp:
578+
case keycodes.WheelUp:
563579
kc = 0x00D9
564-
case jp.WheelDown:
580+
case keycodes.WheelDown:
565581
kc = 0x00DA
566-
case jp.KeyMediaBrightnessDown:
582+
case keycodes.KeyMediaBrightnessDown:
567583
kc = 0x00BE
568-
case jp.KeyMediaBrightnessUp:
584+
case keycodes.KeyMediaBrightnessUp:
569585
kc = 0x00BD
570-
case jp.KeyMediaVolumeInc:
586+
case keycodes.KeyMediaVolumeInc:
571587
kc = 0x00A9
572-
case jp.KeyMediaVolumeDec:
588+
case keycodes.KeyMediaVolumeDec:
573589
kc = 0x00AA
574590
case 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15:
575591
// TO(x)
@@ -612,27 +628,27 @@ func keycodeViaToTGK(key Keycode) Keycode {
612628

613629
switch key {
614630
case 0x00D1:
615-
kc = jp.MouseLeft
631+
kc = keycodes.MouseLeft
616632
case 0x00D2:
617-
kc = jp.MouseRight
633+
kc = keycodes.MouseRight
618634
case 0x00D3:
619-
kc = jp.MouseMiddle
635+
kc = keycodes.MouseMiddle
620636
case 0x00D4:
621-
kc = jp.MouseBack
637+
kc = keycodes.MouseBack
622638
case 0x00D5:
623-
kc = jp.MouseForward
639+
kc = keycodes.MouseForward
624640
case 0x00D9:
625-
kc = jp.WheelUp
641+
kc = keycodes.WheelUp
626642
case 0x00DA:
627-
kc = jp.WheelDown
643+
kc = keycodes.WheelDown
628644
case 0x00BD:
629-
kc = jp.KeyMediaBrightnessUp
645+
kc = keycodes.KeyMediaBrightnessUp
630646
case 0x00BE:
631-
kc = jp.KeyMediaBrightnessDown
647+
kc = keycodes.KeyMediaBrightnessDown
632648
case 0x00A9:
633-
kc = jp.KeyMediaVolumeInc
649+
kc = keycodes.KeyMediaVolumeInc
634650
case 0x00AA:
635-
kc = jp.KeyMediaVolumeDec
651+
kc = keycodes.KeyMediaVolumeDec
636652
case 0x5200, 0x5201, 0x5202, 0x5203, 0x5204, 0x5205:
637653
// TO(x)
638654
kc = 0xFF10 | (kc & 0x000F)

keycodes/jp/keycodes.go

Lines changed: 164 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
package jp
22

33
import (
4+
"machine/usb/hid/keyboard"
5+
46
"github.com/sago35/tinygo-keyboard/keycodes"
57
)
68

9+
func init() {
10+
keycodes.CharToKeyCodeMap = &CharToKeyCodeMap
11+
}
12+
713
// for Japanese Keyboard
814
// based on machine/usb/hid/keyboard/keycode.go
915
const (
@@ -116,9 +122,9 @@ const (
116122
KeyF22 = keycodes.TypeNormal | 0x71
117123
KeyF23 = keycodes.TypeNormal | 0x72
118124
KeyF24 = keycodes.TypeNormal | 0x73
119-
KeyBackslash = keycodes.TypeNormal | 0x87 // \ |
125+
KeyBackslash = keycodes.TypeNormal | 0x87 // \ _
120126
KeyHiragana = keycodes.TypeNormal | 0x88
121-
KeyBackslash2 = keycodes.TypeNormal | 0x89 // \ _
127+
KeyBackslash2 = keycodes.TypeNormal | 0x89 // \ |
122128
KeyHenkan = keycodes.TypeNormal | 0x8A
123129
KeyMuhenkan = keycodes.TypeNormal | 0x8B
124130
KeyKana = keycodes.TypeNormal | 0x90
@@ -132,33 +138,33 @@ const (
132138
)
133139

134140
const (
135-
KeyMediaBrightnessUp = keycodes.TypeMediaKey | 0x6F
136-
KeyMediaBrightnessDown = keycodes.TypeMediaKey | 0x70
137-
KeyMediaPlay = keycodes.TypeMediaKey | 0xB0
138-
KeyMediaPause = keycodes.TypeMediaKey | 0xB1
139-
KeyMediaRecord = keycodes.TypeMediaKey | 0xB2
140-
KeyMediaFastForward = keycodes.TypeMediaKey | 0xB3
141-
KeyMediaRewind = keycodes.TypeMediaKey | 0xB4
142-
KeyMediaNextTrack = keycodes.TypeMediaKey | 0xB5
143-
KeyMediaPrevTrack = keycodes.TypeMediaKey | 0xB6
144-
KeyMediaStop = keycodes.TypeMediaKey | 0xB7
145-
KeyMediaEject = keycodes.TypeMediaKey | 0xB8
146-
KeyMediaRandomPlay = keycodes.TypeMediaKey | 0xB9
147-
KeyMediaPlayPause = keycodes.TypeMediaKey | 0xCD
148-
KeyMediaPlaySkip = keycodes.TypeMediaKey | 0xCE
149-
KeyMediaMute = keycodes.TypeMediaKey | 0xE2
150-
KeyMediaVolumeInc = keycodes.TypeMediaKey | 0xE9
151-
KeyMediaVolumeDec = keycodes.TypeMediaKey | 0xEA
141+
KeyMediaBrightnessUp = keycodes.KeyMediaBrightnessUp
142+
KeyMediaBrightnessDown = keycodes.KeyMediaBrightnessDown
143+
KeyMediaPlay = keycodes.KeyMediaPlay
144+
KeyMediaPause = keycodes.KeyMediaPause
145+
KeyMediaRecord = keycodes.KeyMediaRecord
146+
KeyMediaFastForward = keycodes.KeyMediaFastForward
147+
KeyMediaRewind = keycodes.KeyMediaRewind
148+
KeyMediaNextTrack = keycodes.KeyMediaNextTrack
149+
KeyMediaPrevTrack = keycodes.KeyMediaPrevTrack
150+
KeyMediaStop = keycodes.KeyMediaStop
151+
KeyMediaEject = keycodes.KeyMediaEject
152+
KeyMediaRandomPlay = keycodes.KeyMediaRandomPlay
153+
KeyMediaPlayPause = keycodes.KeyMediaPlayPause
154+
KeyMediaPlaySkip = keycodes.KeyMediaPlaySkip
155+
KeyMediaMute = keycodes.KeyMediaMute
156+
KeyMediaVolumeInc = keycodes.KeyMediaVolumeInc
157+
KeyMediaVolumeDec = keycodes.KeyMediaVolumeDec
152158
)
153159

154160
const (
155-
MouseLeft = keycodes.TypeMouse | 0x01 // mouse.Left
156-
MouseRight = keycodes.TypeMouse | 0x02 // mouse.Right
157-
MouseMiddle = keycodes.TypeMouse | 0x04 // mouse.Middle
158-
MouseBack = keycodes.TypeMouse | 0x08 // mouse.Back
159-
MouseForward = keycodes.TypeMouse | 0x10 // mouse.Forward
160-
WheelDown = keycodes.TypeMouse | 0x20
161-
WheelUp = keycodes.TypeMouse | 0x40
161+
MouseLeft = keycodes.MouseLeft
162+
MouseRight = keycodes.MouseRight
163+
MouseMiddle = keycodes.MouseMiddle
164+
MouseBack = keycodes.MouseBack
165+
MouseForward = keycodes.MouseForward
166+
WheelDown = keycodes.WheelDown
167+
WheelUp = keycodes.WheelUp
162168
)
163169

164170
const (
@@ -176,3 +182,135 @@ const (
176182
KeyTo4 = keycodes.KeyTo4
177183
KeyTo5 = keycodes.KeyTo5
178184
)
185+
186+
var CharToKeyCodeMap = [256]keyboard.Keycode{
187+
keyboard.ASCII00,
188+
keyboard.ASCII01,
189+
keyboard.ASCII02,
190+
keyboard.ASCII03,
191+
keyboard.ASCII04,
192+
keyboard.ASCII05,
193+
keyboard.ASCII06,
194+
keyboard.ASCII07,
195+
keyboard.ASCII08,
196+
keyboard.ASCII09,
197+
keyboard.ASCII0A,
198+
keyboard.ASCII0B,
199+
keyboard.ASCII0C,
200+
keyboard.ASCII0D,
201+
keyboard.ASCII0E,
202+
keyboard.ASCII0F,
203+
keyboard.ASCII10,
204+
keyboard.ASCII11,
205+
keyboard.ASCII12,
206+
keyboard.ASCII13,
207+
keyboard.ASCII14,
208+
keyboard.ASCII15,
209+
keyboard.ASCII16,
210+
keyboard.ASCII17,
211+
keyboard.ASCII18,
212+
keyboard.ASCII19,
213+
keyboard.ASCII1A,
214+
keyboard.ASCII1B,
215+
keyboard.ASCII1C,
216+
keyboard.ASCII1D,
217+
keyboard.ASCII1E,
218+
keyboard.ASCII1F,
219+
220+
KeySpace, // 32 SPACE
221+
Key1 | keycodes.ShiftMask, // 33 !
222+
Key2 | keycodes.ShiftMask, // 34 "
223+
Key3 | keycodes.ShiftMask, // 35 #
224+
Key4 | keycodes.ShiftMask, // 36 $
225+
Key5 | keycodes.ShiftMask, // 37 %
226+
Key6 | keycodes.ShiftMask, // 38 &
227+
Key7 | keycodes.ShiftMask, // 39 '
228+
Key8 | keycodes.ShiftMask, // 40 (
229+
Key9 | keycodes.ShiftMask, // 41 )
230+
KeyColon | keycodes.ShiftMask, // 42 *
231+
KeySemicolon | keycodes.ShiftMask, // 43 +
232+
KeyComma, // 44 ,
233+
KeyMinus, // 45 -
234+
KeyPeriod, // 46 .
235+
KeySlash, // 47 /
236+
Key0, // 48 0
237+
Key1, // 49 1
238+
Key2, // 50 2
239+
Key3, // 51 3
240+
Key4, // 52 4
241+
Key5, // 53 5
242+
Key6, // 54 6
243+
Key7, // 55 7
244+
Key8, // 55 8
245+
Key9, // 57 9
246+
KeyColon, // 58 :
247+
KeySemicolon, // 59 ;
248+
KeyComma | keycodes.ShiftMask, // 60 <
249+
KeyMinus | keycodes.ShiftMask, // 61 =
250+
KeyPeriod | keycodes.ShiftMask, // 62 >
251+
KeySlash | keycodes.ShiftMask, // 63 ?
252+
KeyAt, // 64 @
253+
KeyA | keycodes.ShiftMask, // 65 A
254+
KeyB | keycodes.ShiftMask, // 66 B
255+
KeyC | keycodes.ShiftMask, // 67 C
256+
KeyD | keycodes.ShiftMask, // 68 D
257+
KeyE | keycodes.ShiftMask, // 69 E
258+
KeyF | keycodes.ShiftMask, // 70 F
259+
KeyG | keycodes.ShiftMask, // 71 G
260+
KeyH | keycodes.ShiftMask, // 72 H
261+
KeyI | keycodes.ShiftMask, // 73 I
262+
KeyJ | keycodes.ShiftMask, // 74 J
263+
KeyK | keycodes.ShiftMask, // 75 K
264+
KeyL | keycodes.ShiftMask, // 76 L
265+
KeyM | keycodes.ShiftMask, // 77 M
266+
KeyN | keycodes.ShiftMask, // 78 N
267+
KeyO | keycodes.ShiftMask, // 79 O
268+
KeyP | keycodes.ShiftMask, // 80 P
269+
KeyQ | keycodes.ShiftMask, // 81 Q
270+
KeyR | keycodes.ShiftMask, // 82 R
271+
KeyS | keycodes.ShiftMask, // 83 S
272+
KeyT | keycodes.ShiftMask, // 84 T
273+
KeyU | keycodes.ShiftMask, // 85 U
274+
KeyV | keycodes.ShiftMask, // 86 V
275+
KeyW | keycodes.ShiftMask, // 87 W
276+
KeyX | keycodes.ShiftMask, // 88 X
277+
KeyY | keycodes.ShiftMask, // 89 Y
278+
KeyZ | keycodes.ShiftMask, // 90 Z
279+
KeyLeftBrace, // 91 [
280+
KeyBackslash, // 92 \
281+
KeyRightBrace, // 93 ]
282+
KeyHat, // 94 ^
283+
KeyBackslash | keycodes.ShiftMask, // 95 _
284+
KeyAt | keycodes.ShiftMask, // 96 `
285+
KeyA, // 97 a
286+
KeyB, // 98 b
287+
KeyC, // 99 c
288+
KeyD, // 100 d
289+
KeyE, // 101 e
290+
KeyF, // 102 f
291+
KeyG, // 103 g
292+
KeyH, // 104 h
293+
KeyI, // 105 i
294+
KeyJ, // 106 j
295+
KeyK, // 107 k
296+
KeyL, // 108 l
297+
KeyM, // 109 m
298+
KeyN, // 110 n
299+
KeyO, // 111 o
300+
KeyP, // 112 p
301+
KeyQ, // 113 q
302+
KeyR, // 114 r
303+
KeyS, // 115 s
304+
KeyT, // 116 t
305+
KeyU, // 117 u
306+
KeyV, // 118 v
307+
KeyW, // 119 w
308+
KeyX, // 120 x
309+
KeyY, // 121 y
310+
KeyZ, // 122 z
311+
KeyLeftBrace | keycodes.ShiftMask, // 123 {
312+
KeyBackslash2 | keycodes.ShiftMask, // 124 |
313+
KeyRightBrace | keycodes.ShiftMask, // 125 }
314+
KeyHat | keycodes.ShiftMask, // 126 ~
315+
KeyDelete, // 127 DEL
316+
}

keycodes/keycodes.go

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package keycodes
22

3+
import (
4+
"machine/usb/hid/keyboard"
5+
)
6+
37
const (
48
ModKeyMask = 0xFF00
59
ToKeyMask = 0x0010
@@ -65,3 +69,42 @@ const (
6569
// restore default keymap for QMK
6670
KeyRestoreDefaultKeymap = 0x7C03
6771
)
72+
73+
// from machine/usb/hid/keyboard
74+
const (
75+
ShiftMask = 0x0400
76+
)
77+
78+
const (
79+
KeyMediaBrightnessUp = TypeMediaKey | 0x6F
80+
KeyMediaBrightnessDown = TypeMediaKey | 0x70
81+
KeyMediaPlay = TypeMediaKey | 0xB0
82+
KeyMediaPause = TypeMediaKey | 0xB1
83+
KeyMediaRecord = TypeMediaKey | 0xB2
84+
KeyMediaFastForward = TypeMediaKey | 0xB3
85+
KeyMediaRewind = TypeMediaKey | 0xB4
86+
KeyMediaNextTrack = TypeMediaKey | 0xB5
87+
KeyMediaPrevTrack = TypeMediaKey | 0xB6
88+
KeyMediaStop = TypeMediaKey | 0xB7
89+
KeyMediaEject = TypeMediaKey | 0xB8
90+
KeyMediaRandomPlay = TypeMediaKey | 0xB9
91+
KeyMediaPlayPause = TypeMediaKey | 0xCD
92+
KeyMediaPlaySkip = TypeMediaKey | 0xCE
93+
KeyMediaMute = TypeMediaKey | 0xE2
94+
KeyMediaVolumeInc = TypeMediaKey | 0xE9
95+
KeyMediaVolumeDec = TypeMediaKey | 0xEA
96+
)
97+
98+
const (
99+
MouseLeft = TypeMouse | 0x01 // mouse.Left
100+
MouseRight = TypeMouse | 0x02 // mouse.Right
101+
MouseMiddle = TypeMouse | 0x04 // mouse.Middle
102+
MouseBack = TypeMouse | 0x08 // mouse.Back
103+
MouseForward = TypeMouse | 0x10 // mouse.Forward
104+
WheelDown = TypeMouse | 0x20
105+
WheelUp = TypeMouse | 0x40
106+
)
107+
108+
var (
109+
CharToKeyCodeMap *[256]keyboard.Keycode
110+
)

0 commit comments

Comments
 (0)