diff mbox

ABNT2 keys again

Message ID 5c07634a39eecae39a9f0ba7a8cc58d5.squirrel@nonada.if.usp.br
State New
Headers show

Commit Message

Joao Luis Meloni Assirati May 22, 2015, 4:10 p.m. UTC
>> > Anyone having such a keyboard and willing to run some tests?

[...]

> (c) Then use 'input-events <device-number>' to get a input event log
>     printed to the terminal.  Type each missing key once.
>
> (d) Send me the log (with annotation which key is which).

There are two missing keys: / (which is also ? with shift) in the normal
keyboard and . in the numpad.

Here are the logs for two ABNT2 keyboards:

First keyboard:

/dev/input/event0
   bustype : BUS_USB
   vendor  : 0x45e
   product : 0x750
   version : 273
   name    : "Microsoft Wired Keyboard 600"
   phys    : "usb-0000:00:1d.1-1/input0"
   uniq    : ""
   bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP

waiting for events
12:44:00.341645: EV_MSC MSC_SCAN 458792 <== RETURN released when
input-events was run
12:44:00.341645: EV_KEY KEY_ENTER (0x1c) released
12:44:00.341645: EV_SYN code=0 value=0
12:44:02.389552: EV_MSC MSC_SCAN 458887 <== Here, / was pressed
12:44:02.389552: EV_KEY KEY_RO (0x59) pressed
12:44:02.389552: EV_SYN code=0 value=0
/12:44:02.517537: EV_MSC MSC_SCAN 458887 <== Here, / was released
12:44:02.517537: EV_KEY KEY_RO (0x59) released
12:44:02.517537: EV_SYN code=0 value=0
12:44:04.253486: EV_MSC MSC_SCAN 458885 <== Here, . in the numpad was pressed
12:44:04.253486: EV_KEY KEY_KPCOMMA (0x79) pressed
12:44:04.253486: EV_SYN code=0 value=0
.12:44:04.381484: EV_MSC MSC_SCAN 458885 <== Here, . in the numpad was
released
12:44:04.381484: EV_KEY KEY_KPCOMMA (0x79) released
12:44:04.381484: EV_SYN code=0 value=0

Second keyboard:

/dev/input/event15
   bustype : BUS_USB
   vendor  : 0x4f3
   product : 0x103
   version : 272
   name    : "HID 04f3:0103"
   phys    : "usb-0000:00:1d.3-2/input0"
   uniq    : ""
   bits ev : EV_SYN EV_KEY EV_MSC EV_LED EV_REP

waiting for events
13:00:00.686312: EV_MSC MSC_SCAN 458792 <== RETURN released when
input-events was run
13:00:00.686312: EV_KEY KEY_ENTER (0x1c) released
13:00:00.686312: EV_SYN code=0 value=0
13:00:03.182228: EV_MSC MSC_SCAN 458887 <== Here, / was pressed
13:00:03.182228: EV_KEY KEY_RO (0x59) pressed
13:00:03.182228: EV_SYN code=0 value=0
/13:00:03.254226: EV_MSC MSC_SCAN 458887 <== Here, / was released
13:00:03.254226: EV_KEY KEY_RO (0x59) released
13:00:03.254226: EV_SYN code=0 value=0
13:00:04.942163: EV_MSC MSC_SCAN 458885 <== Here, . in the numpad was pressed
13:00:04.942163: EV_KEY KEY_KPCOMMA (0x79) pressed
13:00:04.942163: EV_SYN code=0 value=0
.13:00:05.030163: EV_MSC MSC_SCAN 458885 <== Here, . in the numpad was
released
13:00:05.030163: EV_KEY KEY_KPCOMMA (0x79) released
13:00:05.030163: EV_SYN code=0 value=0

Both keys are fixed with the following patch that I sent previously:




Thank you,
Joao Luis.

Comments

Gerd Hoffmann May 26, 2015, 7:58 a.m. UTC | #1
Hi,

> 12:44:02.389552: EV_MSC MSC_SCAN 458887 <== Here, / was pressed
> 12:44:02.389552: EV_KEY KEY_RO (0x59) pressed

'RO'.  Hmm, not very descriptive.  Any idea what this could stand for?

> 12:44:04.253486: EV_MSC MSC_SCAN 458885 <== Here, . in the numpad was pressed
> 12:44:04.253486: EV_KEY KEY_KPCOMMA (0x79) pressed

Ok.  Is there a key with ',' too in your numpad?

cheers,
  Gerd
Gerd Hoffmann May 26, 2015, 2:01 p.m. UTC | #2
>  static const uint8_t evdev_keycode_to_pc_keycode[61] = {
> -    0,         /*  97 EVDEV - RO   ("Internet" Keyboards) */
> +    0x73,      /*  97 EVDEV - /?<C2><B0> (ABNT2 Keyboards) */

That one looks good.

> -    0,         /* 129 EVDEV - I129 ("Internet" Keyboards) */
> +    0x34,      /* 129 abnt2 KP-period */

That is the *other* dot key, outside keypad.

Patches just sent via git-send-email, test results are welcome.

thanks,
  Gerd
rslemos May 26, 2015, 3:52 p.m. UTC | #3
I've tested an unpatched QEMU 2.3.0 (x86_64) with "-k pt_br" option and the
"/?°" key works perfectly.

I have not tested the numpad ".", but I can inform that ABNT2 keyboard does
have "." (dot) and "," (comma) as separate keys: comma (numlock on)
combined with delete (numlock off).

But I found another key that is not working: the "<," ("less than"
"comma"). Right now I cannot give details about its scancode, nor make any
further test.


Em ter, 26 de mai de 2015 às 11:01, Gerd Hoffmann <kraxel@redhat.com>
escreveu:

> >  static const uint8_t evdev_keycode_to_pc_keycode[61] = {
> > -    0,         /*  97 EVDEV - RO   ("Internet" Keyboards) */
> > +    0x73,      /*  97 EVDEV - /?<C2><B0> (ABNT2 Keyboards) */
>
> That one looks good.
>
> > -    0,         /* 129 EVDEV - I129 ("Internet" Keyboards) */
> > +    0x34,      /* 129 abnt2 KP-period */
>
> That is the *other* dot key, outside keypad.
>
> Patches just sent via git-send-email, test results are welcome.
>
> thanks,
>   Gerd
>
>
>
Joao Luis Meloni Assirati May 26, 2015, 8:51 p.m. UTC | #4
Hello,

>> 12:44:02.389552: EV_MSC MSC_SCAN 458887 <== Here, / was pressed
>> 12:44:02.389552: EV_KEY KEY_RO (0x59) pressed
>
> 'RO'.  Hmm, not very descriptive.  Any idea what this could stand for?

RO stands for Romaji, which is japanese with roman letters (transliteration).

>
>> 12:44:04.253486: EV_MSC MSC_SCAN 458885 <== Here, . in the numpad was
>> pressed
>> 12:44:04.253486: EV_KEY KEY_KPCOMMA (0x79) pressed
>
> Ok.  Is there a key with ',' too in your numpad?

Yes, there is a separated ',' in the numpad, and when I press it I get

17:48:47.878881: EV_MSC MSC_SCAN 458851
17:48:47.878881: EV_KEY KEY_KPDOT (0x53) pressed
17:48:47.878881: EV_SYN code=0 value=0
^[[3~17:48:47.966876: EV_MSC MSC_SCAN 458851
17:48:47.966876: EV_KEY KEY_KPDOT (0x53) released
17:48:47.966876: EV_SYN code=0 value=0

Apparently the codes are exchanged in ABNT2 numpad.

Thanks,
Joao Luis.
Joao Luis Meloni Assirati May 26, 2015, 9:24 p.m. UTC | #5
Hello,

> I've tested an unpatched QEMU 2.3.0 (x86_64) with "-k pt_br" option and
> the
> "/?°" key works perfectly.

From the manpage of qemu:

-k language
   Use keyboard layout language (for example "fr" for French). This option
is only needed where it is not easy to get raw PC keycodes (e.g. on
Macs, with some X11 servers or with a VNC display). You don't normally
need to use it on PC/Linux or PC/Windows hosts.

Do you think that using the -k option is the right solution to this problem?

>
> I have not tested the numpad ".", but I can inform that ABNT2 keyboard
> does
> have "." (dot) and "," (comma) as separate keys: comma (numlock on)
> combined with delete (numlock off).
>
> But I found another key that is not working: the "<," ("less than"
> "comma"). Right now I cannot give details about its scancode, nor make any
> further test.
>
>
> Em ter, 26 de mai de 2015 às 11:01, Gerd Hoffmann <kraxel@redhat.com>
> escreveu:
>
>> >  static const uint8_t evdev_keycode_to_pc_keycode[61] = {
>> > -    0,         /*  97 EVDEV - RO   ("Internet" Keyboards) */
>> > +    0x73,      /*  97 EVDEV - /?<C2><B0> (ABNT2 Keyboards) */
>>
>> That one looks good.
>>
>> > -    0,         /* 129 EVDEV - I129 ("Internet" Keyboards) */
>> > +    0x34,      /* 129 abnt2 KP-period */
>>
>> That is the *other* dot key, outside keypad.
>>
>> Patches just sent via git-send-email, test results are welcome.
>>
>> thanks,
>>   Gerd
>>
>>
>>
>
Gerd Hoffmann May 27, 2015, 2:11 p.m. UTC | #6
Hi,

> >> 12:44:04.253486: EV_MSC MSC_SCAN 458885 <== Here, . in the numpad was
> >> pressed
> >> 12:44:04.253486: EV_KEY KEY_KPCOMMA (0x79) pressed
> >
> > Ok.  Is there a key with ',' too in your numpad?
> 
> Yes, there is a separated ',' in the numpad, and when I press it I get
> 
> 17:48:47.878881: EV_MSC MSC_SCAN 458851
> 17:48:47.878881: EV_KEY KEY_KPDOT (0x53) pressed
> 17:48:47.878881: EV_SYN code=0 value=0
> ^[[3~17:48:47.966876: EV_MSC MSC_SCAN 458851
> 17:48:47.966876: EV_KEY KEY_KPDOT (0x53) released
> 17:48:47.966876: EV_SYN code=0 value=0
> 
> Apparently the codes are exchanged in ABNT2 numpad.

No, abnt2 has an additional numpad key.  Most keyboards have only one,
which is KPDOT.  In US kbd layout this actually maps to a dot.  On other
layouts (german for example) it maps to comma.  Probably because
different countries use different chars as decimal separator.  abnt2 is
unique here, it has both comma and dot.

cheers,
  Gerd
Gerd Hoffmann May 27, 2015, 2:18 p.m. UTC | #7
On Di, 2015-05-26 at 18:24 -0300, Joao Luis Meloni Assirati wrote:
> Hello,
> 
> > I've tested an unpatched QEMU 2.3.0 (x86_64) with "-k pt_br" option and
> > the
> > "/?°" key works perfectly.
> 
> From the manpage of qemu:
> 
> -k language
>    Use keyboard layout language (for example "fr" for French). This option
> is only needed where it is not easy to get raw PC keycodes (e.g. on
> Macs, with some X11 servers or with a VNC display). You don't normally
> need to use it on PC/Linux or PC/Windows hosts.
> 
> Do you think that using the -k option is the right solution to this problem?

General rule for -k:  If your keyboard layout is messed up try using -k,
otherwise don't bother.

When you use vnc -k might be needed, but whenever that is actually the
case depends on the vnc client.  There is a vnc extension to send raw
keycodes, if the vnc client supports that this gives best results, if it
doesn't you probably need -k for any non-us keyboard layout.

The usual virt-related clients (virt-manager, virt-viewer,
remote-viewer) support that vnc extension.

cheers,
  Gerd
diff mbox

Patch

--- ui/x_keymap.c~
+++ ui/x_keymap.c
@@ -94,7 +94,7 @@ 
  */

 static const uint8_t evdev_keycode_to_pc_keycode[61] = {
-    0,         /*  97 EVDEV - RO   ("Internet" Keyboards) */
+    0x73,      /*  97 EVDEV - /?<C2><B0> (ABNT2 Keyboards) */
     0,         /*  98 EVDEV - KATA (Katakana) */
     0,         /*  99 EVDEV - HIRA (Hiragana) */
     0x79,      /* 100 EVDEV - HENK (Henkan) */
@@ -126,7 +126,7 @@ 
     0,         /* 126 EVDEV - I126 ("Internet" Keyboards) */
     0,         /* 127 EVDEV - PAUS */
     0,         /* 128 EVDEV - ???? */
-    0,         /* 129 EVDEV - I129 ("Internet" Keyboards) */
+    0x34,      /* 129 abnt2 KP-period */
     0xf1,      /* 130 EVDEV - HNGL (Korean Hangul Latin toggle) */
     0xf2,      /* 131 EVDEV - HJCV (Korean Hangul Hanja toggle) */
     0x7d,      /* 132 AE13 (Yen)*/