diff mbox

Fix function keys sequence on USB

Message ID 1432906201-25009-1-git-send-email-k0da@opensuse.org (mailing list archive)
State Not Applicable
Headers show

Commit Message

Dinar Valeev May 29, 2015, 1:30 p.m. UTC
From: Dinar Valeev <dvaleev@suse.com>

Original issue is home and end keys are not functional in grub2.
Later I've found other inconsistencies in f1-f12 keys.

"Correct sequence" was crabbed by pressing key on cat running in
xterm.

Tested with Home, End, F2, Del and F10 keys in grub2

Signed-off-by: Dinar Valeev <dvaleev@suse.com>
---
 lib/libusb/usb-hid.c | 40 +++++++++++++++++-----------------------
 1 file changed, 17 insertions(+), 23 deletions(-)

Comments

Alexey Kardashevskiy May 30, 2015, 9:59 a.m. UTC | #1
On 05/29/2015 11:30 PM, Dinar valeev wrote:
> From: Dinar Valeev <dvaleev@suse.com>
>
> Original issue is home and end keys are not functional in grub2.

"home" works for in grub/ubuntu14 and grub2/fedora21. "end" does not but I 
am not sure that your patch will fix it,

> Later I've found other inconsistencies in f1-f12 keys.

The keys did not work in VGA or in stdio too?

By "stdio" I mean running QEMU like this:
-nographic -vga none -nodefaults \
-chardev stdio,id=id0,signal=off,mux=on \
-device spapr-vty,id=id1,chardev=id0,reg=0x71000100 \
-mon id=id2,chardev=id0,mode=readline

This is how I tried grub and keys, terminal type is "xterm". What do I miss?

> "Correct sequence" was crabbed by pressing key on cat running in
> xterm.

And the existing codes are for what type of term


> Tested with Home, End, F2, Del and F10 keys in grub2

Please add "slof" in the subject so everybody could know what this is 
about; and module/file name to tell what part it is touching. I did not 
notice the patch till I saw it on google+ ;) Like:

[PATCH slof] usb-hid: Fix function keys sequence on USB

Or/and put me or Nikunj in cc:


> Signed-off-by: Dinar Valeev <dvaleev@suse.com>
> ---
>   lib/libusb/usb-hid.c | 40 +++++++++++++++++-----------------------
>   1 file changed, 17 insertions(+), 23 deletions(-)
>
> diff --git a/lib/libusb/usb-hid.c b/lib/libusb/usb-hid.c
> index f0cab8a..ccd5ba9 100644
> --- a/lib/libusb/usb-hid.c
> +++ b/lib/libusb/usb-hid.c
> @@ -190,33 +190,29 @@ static void check_key_code(uint8_t *buf)
>   				case 0x3a:	                        /* F1 */
>   					write_key(0x1b);
>   					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x31);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x50);
>   					break;
>
>   				case 0x3b:		                /* F2 */
>   					write_key(0x1b);
>   					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x32);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x51);
>   					break;
>
>   				case 0x3c:
>   					write_key(0x1b);               /* F3 */
>   					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x33);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x52);
>   					break;
>
>   				case 0x3d:
>   					write_key(0x1b);		/* F4 */
>   					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x34);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x53);
>   					break;
>
>   				case 0x3e:
> @@ -254,7 +250,7 @@ static void check_key_code(uint8_t *buf)
>   				case 0x42:
>   					write_key(0x1b);		/* F9 */
>   					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>   					write_key(0x30);
>   					write_key(0x7e);
>   					break;
> @@ -262,7 +258,7 @@ static void check_key_code(uint8_t *buf)
>   				case 0x43:
>   					write_key(0x1b);	       /* F10 */
>   					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>   					write_key(0x31);
>   					write_key(0x7e);
>   					break;
> @@ -270,7 +266,7 @@ static void check_key_code(uint8_t *buf)
>   				case 0x44:
>   					write_key(0x1b);	       /* F11 */
>   					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>   					write_key(0x33);
>   					write_key(0x7e);
>   					break;
> @@ -278,7 +274,7 @@ static void check_key_code(uint8_t *buf)
>   				case 0x45:
>   					write_key(0x1b);	       /* F12 */
>   					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>   					write_key(0x34);
>   					write_key(0x7e);
>   					break;
> @@ -290,36 +286,34 @@ static void check_key_code(uint8_t *buf)
>   				case 0x49:
>   					write_key(0x1b);	       /* INS */
>   					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>   					write_key(0x7e);
>   					break;
>
>   				case 0x4a:
>   					write_key(0x1b);	      /* HOME */
>   					write_key(0x5b);
> -					write_key(0x32);
> -					write_key(0x7e);
> +					write_key(0x48);
>   					break;
>
>   				case 0x4b:
>   					write_key(0x1b);	      /* PgUp */
>   					write_key(0x5b);
> -					write_key(0x33);
> +					write_key(0x35);
>   					write_key(0x7e);
>   					break;
>
>   				case 0x4c:
>   					write_key(0x1b);	       /* DEL */
>   					write_key(0x5b);
> -					write_key(0x34);
> +					write_key(0x33);
>   					write_key(0x7e);
>   					break;
>
>   				case 0x4d:
>   					write_key(0x1b);	       /* END */
>   					write_key(0x5b);
> -					write_key(0x35);
> -					write_key(0x7e);
> +					write_key(0x46);
>   					break;
>
>   				case 0x4e:
>
Dinar Valeev May 30, 2015, 7:21 p.m. UTC | #2
On 05/30/2015 11:59 AM, Alexey Kardashevskiy wrote:
> On 05/29/2015 11:30 PM, Dinar valeev wrote:
>> From: Dinar Valeev <dvaleev@suse.com>
>>
>> Original issue is home and end keys are not functional in grub2.
> 
> "home" works for in grub/ubuntu14 and grub2/fedora21. "end" does not but I am not sure that your patch will fix it,
It is easy to test :)

Not sure about 'home'. It's behaviour was acting as ESC in grub menu edit. My intention was to fix 'end' sequence, so the rest 
was just adjusted.
> 
>> Later I've found other inconsistencies in f1-f12 keys.
> 
> The keys did not work in VGA or in stdio too?
In my understanding this happens only on VGA.
> 
> By "stdio" I mean running QEMU like this:
> -nographic -vga none -nodefaults \
> -chardev stdio,id=id0,signal=off,mux=on \
> -device spapr-vty,id=id1,chardev=id0,reg=0x71000100 \
> -mon id=id2,chardev=id0,mode=readline
> 
> This is how I tried grub and keys, terminal type is "xterm". What do I miss?
-vga std -vnc :1
> 
>> "Correct sequence" was crabbed by pressing key on cat running in
>> xterm.
> 
> And the existing codes are for what type of term
I have no idea what previous sequence was based on.
> 
> 
>> Tested with Home, End, F2, Del and F10 keys in grub2
> 
> Please add "slof" in the subject so everybody could know what this is about; and module/file name to tell what part it is touching. I did not notice the patch till I saw it on google+ ;) Like:
Next time I will, thanks for information.

It would be cool to have an information for contributors, describing a procedure.
> 
> [PATCH slof] usb-hid: Fix function keys sequence on USB
> 
> Or/and put me or Nikunj in cc:
> 
> 
>> Signed-off-by: Dinar Valeev <dvaleev@suse.com>
>> ---
>>   lib/libusb/usb-hid.c | 40 +++++++++++++++++-----------------------
>>   1 file changed, 17 insertions(+), 23 deletions(-)
>>
>> diff --git a/lib/libusb/usb-hid.c b/lib/libusb/usb-hid.c
>> index f0cab8a..ccd5ba9 100644
>> --- a/lib/libusb/usb-hid.c
>> +++ b/lib/libusb/usb-hid.c
>> @@ -190,33 +190,29 @@ static void check_key_code(uint8_t *buf)
>>                   case 0x3a:                            /* F1 */
>>                       write_key(0x1b);
>>                       write_key(0x5b);
>> -                    write_key(0x31);
>> -                    write_key(0x31);
>> -                    write_key(0x7e);
>> +                    write_key(0x4f);
>> +                    write_key(0x50);
>>                       break;
>>
>>                   case 0x3b:                        /* F2 */
>>                       write_key(0x1b);
>>                       write_key(0x5b);
>> -                    write_key(0x31);
>> -                    write_key(0x32);
>> -                    write_key(0x7e);
>> +                    write_key(0x4f);
>> +                    write_key(0x51);
>>                       break;
>>
>>                   case 0x3c:
>>                       write_key(0x1b);               /* F3 */
>>                       write_key(0x5b);
>> -                    write_key(0x31);
>> -                    write_key(0x33);
>> -                    write_key(0x7e);
>> +                    write_key(0x4f);
>> +                    write_key(0x52);
>>                       break;
>>
>>                   case 0x3d:
>>                       write_key(0x1b);        /* F4 */
>>                       write_key(0x5b);
>> -                    write_key(0x31);
>> -                    write_key(0x34);
>> -                    write_key(0x7e);
>> +                    write_key(0x4f);
>> +                    write_key(0x53);
>>                       break;
>>
>>                   case 0x3e:
>> @@ -254,7 +250,7 @@ static void check_key_code(uint8_t *buf)
>>                   case 0x42:
>>                       write_key(0x1b);        /* F9 */
>>                       write_key(0x5b);
>> -                    write_key(0x31);
>> +                    write_key(0x32);
>>                       write_key(0x30);
>>                       write_key(0x7e);
>>                       break;
>> @@ -262,7 +258,7 @@ static void check_key_code(uint8_t *buf)
>>                   case 0x43:
>>                       write_key(0x1b);           /* F10 */
>>                       write_key(0x5b);
>> -                    write_key(0x31);
>> +                    write_key(0x32);
>>                       write_key(0x31);
>>                       write_key(0x7e);
>>                       break;
>> @@ -270,7 +266,7 @@ static void check_key_code(uint8_t *buf)
>>                   case 0x44:
>>                       write_key(0x1b);           /* F11 */
>>                       write_key(0x5b);
>> -                    write_key(0x31);
>> +                    write_key(0x32);
>>                       write_key(0x33);
>>                       write_key(0x7e);
>>                       break;
>> @@ -278,7 +274,7 @@ static void check_key_code(uint8_t *buf)
>>                   case 0x45:
>>                       write_key(0x1b);           /* F12 */
>>                       write_key(0x5b);
>> -                    write_key(0x31);
>> +                    write_key(0x32);
>>                       write_key(0x34);
>>                       write_key(0x7e);
>>                       break;
>> @@ -290,36 +286,34 @@ static void check_key_code(uint8_t *buf)
>>                   case 0x49:
>>                       write_key(0x1b);           /* INS */
>>                       write_key(0x5b);
>> -                    write_key(0x31);
>> +                    write_key(0x32);
>>                       write_key(0x7e);
>>                       break;
>>
>>                   case 0x4a:
>>                       write_key(0x1b);          /* HOME */
>>                       write_key(0x5b);
>> -                    write_key(0x32);
>> -                    write_key(0x7e);
>> +                    write_key(0x48);
>>                       break;
>>
>>                   case 0x4b:
>>                       write_key(0x1b);          /* PgUp */
>>                       write_key(0x5b);
>> -                    write_key(0x33);
>> +                    write_key(0x35);
>>                       write_key(0x7e);
>>                       break;
>>
>>                   case 0x4c:
>>                       write_key(0x1b);           /* DEL */
>>                       write_key(0x5b);
>> -                    write_key(0x34);
>> +                    write_key(0x33);
>>                       write_key(0x7e);
>>                       break;
>>
>>                   case 0x4d:
>>                       write_key(0x1b);           /* END */
>>                       write_key(0x5b);
>> -                    write_key(0x35);
>> -                    write_key(0x7e);
>> +                    write_key(0x46);
>>                       break;
>>
>>                   case 0x4e:
>>
> 
>
Nikunj A Dadhania June 2, 2015, 9:47 a.m. UTC | #3
Dinar valeev <k0da@opensuse.org> writes:

> From: Dinar Valeev <dvaleev@suse.com>
>
> Original issue is home and end keys are not functional in grub2.
> Later I've found other inconsistencies in f1-f12 keys.
>
> "Correct sequence" was crabbed by pressing key on cat running in
> xterm.
>
> Tested with Home, End, F2, Del and F10 keys in grub2
>
> Signed-off-by: Dinar Valeev <dvaleev@suse.com>
> ---
>  lib/libusb/usb-hid.c | 40 +++++++++++++++++-----------------------
>  1 file changed, 17 insertions(+), 23 deletions(-)
>
> diff --git a/lib/libusb/usb-hid.c b/lib/libusb/usb-hid.c
> index f0cab8a..ccd5ba9 100644
> --- a/lib/libusb/usb-hid.c
> +++ b/lib/libusb/usb-hid.c
> @@ -190,33 +190,29 @@ static void check_key_code(uint8_t *buf)
>  				case 0x3a:	                        /* F1 */
>  					write_key(0x1b);
>  					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x31);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x50);
>  					break;
>  
>  				case 0x3b:		                /* F2 */
>  					write_key(0x1b);
>  					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x32);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x51);
>  					break;

Tested fine.

>  
>  				case 0x3c:
>  					write_key(0x1b);               /* F3 */
>  					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x33);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x52);
>  					break;
>  
>  				case 0x3d:
>  					write_key(0x1b);		/* F4 */
>  					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x34);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x53);
>  					break;
>  
>  				case 0x3e:
> @@ -254,7 +250,7 @@ static void check_key_code(uint8_t *buf)
>  				case 0x42:
>  					write_key(0x1b);		/* F9 */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x30);
>  					write_key(0x7e);
>  					break;
> @@ -262,7 +258,7 @@ static void check_key_code(uint8_t *buf)
>  				case 0x43:
>  					write_key(0x1b);	       /* F10 */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x31);
>  					write_key(0x7e);
>  					break;

Does F10 work for you? doesn't work for me ?

> @@ -270,7 +266,7 @@ static void check_key_code(uint8_t *buf)
>  				case 0x44:
>  					write_key(0x1b);	       /* F11 */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x33);
>  					write_key(0x7e);
>  					break;
> @@ -278,7 +274,7 @@ static void check_key_code(uint8_t *buf)
>  				case 0x45:
>  					write_key(0x1b);	       /* F12 */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x34);
>  					write_key(0x7e);
>  					break;
> @@ -290,36 +286,34 @@ static void check_key_code(uint8_t *buf)
>  				case 0x49:
>  					write_key(0x1b);	       /* INS */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x7e);
>  					break;
>  
>  				case 0x4a:
>  					write_key(0x1b);	      /* HOME */
>  					write_key(0x5b);
> -					write_key(0x32);
> -					write_key(0x7e);
> +					write_key(0x48);

Looking at accept.fs - handle-ESC-5b ...

: handle-ESC-5b
   key
   dup 31 = IF \ HOME
      key drop ( drops closing 7e ) handle-^A
   ELSE
      dup 33 = IF \ DEL
         key drop handle-^D
      ELSE
         dup 34 = IF \ END
            key drop handle-^E
         ELSE
            dup 1f and handle-CSI
         THEN
      THEN
   THEN drop
;


... following change is sufficient:
-					write_key(0x32);
+					write_key(0x31);


>  					break;
>  
>  				case 0x4b:
>  					write_key(0x1b);	      /* PgUp */
>  					write_key(0x5b);
> -					write_key(0x33);
> +					write_key(0x35);
>  					write_key(0x7e);
>  					break;
>  
>  				case 0x4c:
>  					write_key(0x1b);	       /* DEL */
>  					write_key(0x5b);
> -					write_key(0x34);
> +					write_key(0x33);

Right.

>  					write_key(0x7e);
>  					break;
>  
>  				case 0x4d:
>  					write_key(0x1b);	       /* END */
>  					write_key(0x5b);
> -					write_key(0x35);
> -					write_key(0x7e);
> +					write_key(0x46);

I tried using: 0x34, but somehow it does not work.

Regards
Nikunj
Dinar Valeev June 2, 2015, 10:05 a.m. UTC | #4
On Tue, Jun 2, 2015 at 11:47 AM, Nikunj A Dadhania
<nikunj@linux.vnet.ibm.com> wrote:
> Dinar valeev <k0da@opensuse.org> writes:
>
>> From: Dinar Valeev <dvaleev@suse.com>
>>
>> Original issue is home and end keys are not functional in grub2.
>> Later I've found other inconsistencies in f1-f12 keys.
>>
>> "Correct sequence" was crabbed by pressing key on cat running in
>> xterm.
>>
>> Tested with Home, End, F2, Del and F10 keys in grub2
>>
>> Signed-off-by: Dinar Valeev <dvaleev@suse.com>
>> ---
>>  lib/libusb/usb-hid.c | 40 +++++++++++++++++-----------------------
>>  1 file changed, 17 insertions(+), 23 deletions(-)
>>
>> diff --git a/lib/libusb/usb-hid.c b/lib/libusb/usb-hid.c
>> index f0cab8a..ccd5ba9 100644
>> --- a/lib/libusb/usb-hid.c
>> +++ b/lib/libusb/usb-hid.c
>> @@ -190,33 +190,29 @@ static void check_key_code(uint8_t *buf)
>>                               case 0x3a:                              /* F1 */
>>                                       write_key(0x1b);
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> -                                     write_key(0x31);
>> -                                     write_key(0x7e);
>> +                                     write_key(0x4f);
>> +                                     write_key(0x50);
>>                                       break;
>>
>>                               case 0x3b:                              /* F2 */
>>                                       write_key(0x1b);
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> -                                     write_key(0x32);
>> -                                     write_key(0x7e);
>> +                                     write_key(0x4f);
>> +                                     write_key(0x51);
>>                                       break;
>
> Tested fine.
>
>>
>>                               case 0x3c:
>>                                       write_key(0x1b);               /* F3 */
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> -                                     write_key(0x33);
>> -                                     write_key(0x7e);
>> +                                     write_key(0x4f);
>> +                                     write_key(0x52);
>>                                       break;
>>
>>                               case 0x3d:
>>                                       write_key(0x1b);                /* F4 */
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> -                                     write_key(0x34);
>> -                                     write_key(0x7e);
>> +                                     write_key(0x4f);
>> +                                     write_key(0x53);
>>                                       break;
>>
>>                               case 0x3e:
>> @@ -254,7 +250,7 @@ static void check_key_code(uint8_t *buf)
>>                               case 0x42:
>>                                       write_key(0x1b);                /* F9 */
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> +                                     write_key(0x32);
>>                                       write_key(0x30);
>>                                       write_key(0x7e);
>>                                       break;
>> @@ -262,7 +258,7 @@ static void check_key_code(uint8_t *buf)
>>                               case 0x43:
>>                                       write_key(0x1b);               /* F10 */
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> +                                     write_key(0x32);
>>                                       write_key(0x31);
>>                                       write_key(0x7e);
>>                                       break;
>
> Does F10 work for you? doesn't work for me ?
It does. But then menu entry is expanded to openSUSE, with Linux 4.0.1-1-default
entering edit mode and pressing f10 finally boots it.

xterm sequence is ^[[21~


>
>> @@ -270,7 +266,7 @@ static void check_key_code(uint8_t *buf)
>>                               case 0x44:
>>                                       write_key(0x1b);               /* F11 */
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> +                                     write_key(0x32);
>>                                       write_key(0x33);
>>                                       write_key(0x7e);
>>                                       break;
>> @@ -278,7 +274,7 @@ static void check_key_code(uint8_t *buf)
>>                               case 0x45:
>>                                       write_key(0x1b);               /* F12 */
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> +                                     write_key(0x32);
>>                                       write_key(0x34);
>>                                       write_key(0x7e);
>>                                       break;
>> @@ -290,36 +286,34 @@ static void check_key_code(uint8_t *buf)
>>                               case 0x49:
>>                                       write_key(0x1b);               /* INS */
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> +                                     write_key(0x32);
>>                                       write_key(0x7e);
>>                                       break;
>>
>>                               case 0x4a:
>>                                       write_key(0x1b);              /* HOME */
>>                                       write_key(0x5b);
>> -                                     write_key(0x32);
>> -                                     write_key(0x7e);
>> +                                     write_key(0x48);
>
> Looking at accept.fs - handle-ESC-5b ...
>
> : handle-ESC-5b
>    key
>    dup 31 = IF \ HOME
>       key drop ( drops closing 7e ) handle-^A
>    ELSE
>       dup 33 = IF \ DEL
>          key drop handle-^D
>       ELSE
>          dup 34 = IF \ END
>             key drop handle-^E
>          ELSE
>             dup 1f and handle-CSI
>          THEN
>       THEN
>    THEN drop
> ;
>
>
> ... following change is sufficient:
> -                                       write_key(0x32);
> +                                       write_key(0x31);
>
Home sequence for me is: ^[[H
>
>>                                       break;
>>
>>                               case 0x4b:
>>                                       write_key(0x1b);              /* PgUp */
>>                                       write_key(0x5b);
>> -                                     write_key(0x33);
>> +                                     write_key(0x35);
>>                                       write_key(0x7e);
>>                                       break;
>>
>>                               case 0x4c:
>>                                       write_key(0x1b);               /* DEL */
>>                                       write_key(0x5b);
>> -                                     write_key(0x34);
>> +                                     write_key(0x33);
>
> Right.
>
>>                                       write_key(0x7e);
>>                                       break;
>>
>>                               case 0x4d:
>>                                       write_key(0x1b);               /* END */
>>                                       write_key(0x5b);
>> -                                     write_key(0x35);
>> -                                     write_key(0x7e);
>> +                                     write_key(0x46);
>
> I tried using: 0x34, but somehow it does not work.
^[[F works for me.

All changes are tested in openSUSE's grub2 with -vga std. Note we
don't have any special patches here..

Tested with -vga none -nographic. Home, End works with patched SLOF
>
> Regards
> Nikunj
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
Nikunj A Dadhania June 2, 2015, 10:29 a.m. UTC | #5
Dinar Valeev <k0da@opensuse.org> writes:

> On Tue, Jun 2, 2015 at 11:47 AM, Nikunj A Dadhania
> <nikunj@linux.vnet.ibm.com> wrote:
>> Dinar valeev <k0da@opensuse.org> writes:
>>> @@ -262,7 +258,7 @@ static void check_key_code(uint8_t *buf)
>>>                               case 0x43:
>>>                                       write_key(0x1b);               /* F10 */
>>>                                       write_key(0x5b);
>>> -                                     write_key(0x31);
>>> +                                     write_key(0x32);
>>>                                       write_key(0x31);
>>>                                       write_key(0x7e);
>>>                                       break;
>>
>> Does F10 work for you? doesn't work for me ?
> It does. But then menu entry is expanded to openSUSE, with Linux 4.0.1-1-default
> entering edit mode and pressing f10 finally boots it.
>
> xterm sequence is ^[[21~

I had used following in TCG:

qemu-system-ppc64 -machine pseries -m 2G -serial stdio -cdrom distro.iso \
-vnc :1

>
>
>>
>>> @@ -270,7 +266,7 @@ static void check_key_code(uint8_t *buf)
>>>                               case 0x44:
>>>                                       write_key(0x1b);               /* F11 */
>>>                                       write_key(0x5b);
>>> -                                     write_key(0x31);
>>> +                                     write_key(0x32);
>>>                                       write_key(0x33);
>>>                                       write_key(0x7e);
>>>                                       break;
>>> @@ -278,7 +274,7 @@ static void check_key_code(uint8_t *buf)
>>>                               case 0x45:
>>>                                       write_key(0x1b);               /* F12 */
>>>                                       write_key(0x5b);
>>> -                                     write_key(0x31);
>>> +                                     write_key(0x32);
>>>                                       write_key(0x34);
>>>                                       write_key(0x7e);
>>>                                       break;
>>> @@ -290,36 +286,34 @@ static void check_key_code(uint8_t *buf)
>>>                               case 0x49:
>>>                                       write_key(0x1b);               /* INS */
>>>                                       write_key(0x5b);
>>> -                                     write_key(0x31);
>>> +                                     write_key(0x32);
>>>                                       write_key(0x7e);
>>>                                       break;
>>>
>>>                               case 0x4a:
>>>                                       write_key(0x1b);              /* HOME */
>>>                                       write_key(0x5b);
>>> -                                     write_key(0x32);
>>> -                                     write_key(0x7e);
>>> +                                     write_key(0x48);
>>
>> Looking at accept.fs - handle-ESC-5b ...
>>
>> : handle-ESC-5b
>>    key
>>    dup 31 = IF \ HOME
>>       key drop ( drops closing 7e ) handle-^A
>>    ELSE
>>       dup 33 = IF \ DEL
>>          key drop handle-^D
>>       ELSE
>>          dup 34 = IF \ END
>>             key drop handle-^E
>>          ELSE
>>             dup 1f and handle-CSI
>>          THEN
>>       THEN
>>    THEN drop
>> ;
>>
>>
>> ... following change is sufficient:
>> -                                       write_key(0x32);
>> +                                       write_key(0x31);
>>
> Home sequence for me is: ^[[H

Can you check the above change in your setup ?

>>
>>>                                       break;
>>>
>>>                               case 0x4b:
>>>                                       write_key(0x1b);              /* PgUp */
>>>                                       write_key(0x5b);
>>> -                                     write_key(0x33);
>>> +                                     write_key(0x35);
>>>                                       write_key(0x7e);
>>>                                       break;
>>>
>>>                               case 0x4c:
>>>                                       write_key(0x1b);               /* DEL */
>>>                                       write_key(0x5b);
>>> -                                     write_key(0x34);
>>> +                                     write_key(0x33);
>>
>> Right.
>>
>>>                                       write_key(0x7e);
>>>                                       break;
>>>
>>>                               case 0x4d:
>>>                                       write_key(0x1b);               /* END */
>>>                                       write_key(0x5b);
>>> -                                     write_key(0x35);
>>> -                                     write_key(0x7e);
>>> +                                     write_key(0x46);
>>
>> I tried using: 0x34, but somehow it does not work.
> ^[[F works for me.
>
> All changes are tested in openSUSE's grub2 with -vga std. Note we
> don't have any special patches here..
>
> Tested with -vga none -nographic. Home, End works with patched SLOF

Ok.

Regards
Nikunj
Dinar Valeev June 2, 2015, 10:43 a.m. UTC | #6
On Tue, Jun 2, 2015 at 12:29 PM, Nikunj A Dadhania
<nikunj@linux.vnet.ibm.com> wrote:
> Dinar Valeev <k0da@opensuse.org> writes:
>
>> On Tue, Jun 2, 2015 at 11:47 AM, Nikunj A Dadhania
>> <nikunj@linux.vnet.ibm.com> wrote:
>>> Dinar valeev <k0da@opensuse.org> writes:
>>>> @@ -262,7 +258,7 @@ static void check_key_code(uint8_t *buf)
>>>>                               case 0x43:
>>>>                                       write_key(0x1b);               /* F10 */
>>>>                                       write_key(0x5b);
>>>> -                                     write_key(0x31);
>>>> +                                     write_key(0x32);
>>>>                                       write_key(0x31);
>>>>                                       write_key(0x7e);
>>>>                                       break;
>>>
>>> Does F10 work for you? doesn't work for me ?
>> It does. But then menu entry is expanded to openSUSE, with Linux 4.0.1-1-default
>> entering edit mode and pressing f10 finally boots it.
>>
>> xterm sequence is ^[[21~
>
> I had used following in TCG:
>
> qemu-system-ppc64 -machine pseries -m 2G -serial stdio -cdrom distro.iso \
> -vnc :1
>
>>
>>
>>>
>>>> @@ -270,7 +266,7 @@ static void check_key_code(uint8_t *buf)
>>>>                               case 0x44:
>>>>                                       write_key(0x1b);               /* F11 */
>>>>                                       write_key(0x5b);
>>>> -                                     write_key(0x31);
>>>> +                                     write_key(0x32);
>>>>                                       write_key(0x33);
>>>>                                       write_key(0x7e);
>>>>                                       break;
>>>> @@ -278,7 +274,7 @@ static void check_key_code(uint8_t *buf)
>>>>                               case 0x45:
>>>>                                       write_key(0x1b);               /* F12 */
>>>>                                       write_key(0x5b);
>>>> -                                     write_key(0x31);
>>>> +                                     write_key(0x32);
>>>>                                       write_key(0x34);
>>>>                                       write_key(0x7e);
>>>>                                       break;
>>>> @@ -290,36 +286,34 @@ static void check_key_code(uint8_t *buf)
>>>>                               case 0x49:
>>>>                                       write_key(0x1b);               /* INS */
>>>>                                       write_key(0x5b);
>>>> -                                     write_key(0x31);
>>>> +                                     write_key(0x32);
>>>>                                       write_key(0x7e);
>>>>                                       break;
>>>>
>>>>                               case 0x4a:
>>>>                                       write_key(0x1b);              /* HOME */
>>>>                                       write_key(0x5b);
>>>> -                                     write_key(0x32);
>>>> -                                     write_key(0x7e);
>>>> +                                     write_key(0x48);
>>>
>>> Looking at accept.fs - handle-ESC-5b ...
>>>
>>> : handle-ESC-5b
>>>    key
>>>    dup 31 = IF \ HOME
>>>       key drop ( drops closing 7e ) handle-^A
>>>    ELSE
>>>       dup 33 = IF \ DEL
>>>          key drop handle-^D
>>>       ELSE
>>>          dup 34 = IF \ END
>>>             key drop handle-^E
>>>          ELSE
>>>             dup 1f and handle-CSI
>>>          THEN
>>>       THEN
>>>    THEN drop
>>> ;
>>>
>>>
>>> ... following change is sufficient:
>>> -                                       write_key(0x32);
>>> +                                       write_key(0x31);
>>>
>> Home sequence for me is: ^[[H
>
> Can you check the above change in your setup ?
That works as well.
>
>>>
>>>>                                       break;
>>>>
>>>>                               case 0x4b:
>>>>                                       write_key(0x1b);              /* PgUp */
>>>>                                       write_key(0x5b);
>>>> -                                     write_key(0x33);
>>>> +                                     write_key(0x35);
>>>>                                       write_key(0x7e);
>>>>                                       break;
>>>>
>>>>                               case 0x4c:
>>>>                                       write_key(0x1b);               /* DEL */
>>>>                                       write_key(0x5b);
>>>> -                                     write_key(0x34);
>>>> +                                     write_key(0x33);
>>>
>>> Right.
>>>
>>>>                                       write_key(0x7e);
>>>>                                       break;
>>>>
>>>>                               case 0x4d:
>>>>                                       write_key(0x1b);               /* END */
>>>>                                       write_key(0x5b);
>>>> -                                     write_key(0x35);
>>>> -                                     write_key(0x7e);
>>>> +                                     write_key(0x46);
>>>
>>> I tried using: 0x34, but somehow it does not work.
>> ^[[F works for me.
>>
>> All changes are tested in openSUSE's grub2 with -vga std. Note we
>> don't have any special patches here..
>>
>> Tested with -vga none -nographic. Home, End works with patched SLOF
>
> Ok.
>
> Regards
> Nikunj
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
Thomas Huth June 2, 2015, 11:12 a.m. UTC | #7
On Tue, 2 Jun 2015 12:43:16 +0200
Dinar Valeev <k0da@opensuse.org> wrote:

> On Tue, Jun 2, 2015 at 12:29 PM, Nikunj A Dadhania
> <nikunj@linux.vnet.ibm.com> wrote:
> > Dinar Valeev <k0da@opensuse.org> writes:
> >
> >> On Tue, Jun 2, 2015 at 11:47 AM, Nikunj A Dadhania
> >> <nikunj@linux.vnet.ibm.com> wrote:
> >>> Dinar valeev <k0da@opensuse.org> writes:
...
> >>>> @@ -290,36 +286,34 @@ static void check_key_code(uint8_t *buf)
> >>>>                               case 0x49:
> >>>>                                       write_key(0x1b);               /* INS */
> >>>>                                       write_key(0x5b);
> >>>> -                                     write_key(0x31);
> >>>> +                                     write_key(0x32);
> >>>>                                       write_key(0x7e);
> >>>>                                       break;
> >>>>
> >>>>                               case 0x4a:
> >>>>                                       write_key(0x1b);              /* HOME */
> >>>>                                       write_key(0x5b);
> >>>> -                                     write_key(0x32);
> >>>> -                                     write_key(0x7e);
> >>>> +                                     write_key(0x48);
> >>>
> >>> Looking at accept.fs - handle-ESC-5b ...
> >>>
> >>> : handle-ESC-5b
> >>>    key
> >>>    dup 31 = IF \ HOME
> >>>       key drop ( drops closing 7e ) handle-^A
> >>>    ELSE
> >>>       dup 33 = IF \ DEL
> >>>          key drop handle-^D
> >>>       ELSE
> >>>          dup 34 = IF \ END
> >>>             key drop handle-^E
> >>>          ELSE
> >>>             dup 1f and handle-CSI
> >>>          THEN
> >>>       THEN
> >>>    THEN drop
> >>> ;
> >>>
> >>>
> >>> ... following change is sufficient:
> >>> -                                       write_key(0x32);
> >>> +                                       write_key(0x31);
> >>>
> >> Home sequence for me is: ^[[H
> >
> > Can you check the above change in your setup ?
> That works as well.

Not sure, but IIRC some of these key codes depend on the keyboard
layout that you are using. What keyboard layout (i.e. language) do
you use?

 Thomas
Dinar Valeev June 2, 2015, 11:17 a.m. UTC | #8
On Tue, Jun 2, 2015 at 1:12 PM, Thomas Huth <thuth@redhat.com> wrote:
> On Tue, 2 Jun 2015 12:43:16 +0200
> Dinar Valeev <k0da@opensuse.org> wrote:
>
>> On Tue, Jun 2, 2015 at 12:29 PM, Nikunj A Dadhania
>> <nikunj@linux.vnet.ibm.com> wrote:
>> > Dinar Valeev <k0da@opensuse.org> writes:
>> >
>> >> On Tue, Jun 2, 2015 at 11:47 AM, Nikunj A Dadhania
>> >> <nikunj@linux.vnet.ibm.com> wrote:
>> >>> Dinar valeev <k0da@opensuse.org> writes:
> ...
>> >>>> @@ -290,36 +286,34 @@ static void check_key_code(uint8_t *buf)
>> >>>>                               case 0x49:
>> >>>>                                       write_key(0x1b);               /* INS */
>> >>>>                                       write_key(0x5b);
>> >>>> -                                     write_key(0x31);
>> >>>> +                                     write_key(0x32);
>> >>>>                                       write_key(0x7e);
>> >>>>                                       break;
>> >>>>
>> >>>>                               case 0x4a:
>> >>>>                                       write_key(0x1b);              /* HOME */
>> >>>>                                       write_key(0x5b);
>> >>>> -                                     write_key(0x32);
>> >>>> -                                     write_key(0x7e);
>> >>>> +                                     write_key(0x48);
>> >>>
>> >>> Looking at accept.fs - handle-ESC-5b ...
>> >>>
>> >>> : handle-ESC-5b
>> >>>    key
>> >>>    dup 31 = IF \ HOME
>> >>>       key drop ( drops closing 7e ) handle-^A
>> >>>    ELSE
>> >>>       dup 33 = IF \ DEL
>> >>>          key drop handle-^D
>> >>>       ELSE
>> >>>          dup 34 = IF \ END
>> >>>             key drop handle-^E
>> >>>          ELSE
>> >>>             dup 1f and handle-CSI
>> >>>          THEN
>> >>>       THEN
>> >>>    THEN drop
>> >>> ;
>> >>>
>> >>>
>> >>> ... following change is sufficient:
>> >>> -                                       write_key(0x32);
>> >>> +                                       write_key(0x31);
>> >>>
>> >> Home sequence for me is: ^[[H
>> >
>> > Can you check the above change in your setup ?
>> That works as well.
>
> Not sure, but IIRC some of these key codes depend on the keyboard
> layout that you are using. What keyboard layout (i.e. language) do
> you use?
en_us, but note that "End" issue was found by running qemu as part of
openQA (plain qemu). This is how we test distribution.
We're sending keyboard,mouse commands over ui/vnc.
>
>  Thomas
Nikunj A Dadhania July 6, 2015, 7:58 a.m. UTC | #9
Dinar valeev <k0da@opensuse.org> writes:

> From: Dinar Valeev <dvaleev@suse.com>
>
> Original issue is home and end keys are not functional in grub2.
> Later I've found other inconsistencies in f1-f12 keys.
>
> "Correct sequence" was crabbed by pressing key on cat running in
> xterm.
>
> Tested with Home, End, F2, Del and F10 keys in grub2

Few observations with more testing:

* In console mode F2 and F10 both are interpreted as ESC.
* In VNC F2 works fine F10 does not.

I would suggest to drop the "Fn" related changes and resend this patch
with END/HOME. As Ctrl-c and Ctrl-x both works as expected in the grub
edit mode.

>
> Signed-off-by: Dinar Valeev <dvaleev@suse.com>
> ---
>  lib/libusb/usb-hid.c | 40 +++++++++++++++++-----------------------
>  1 file changed, 17 insertions(+), 23 deletions(-)
>
> diff --git a/lib/libusb/usb-hid.c b/lib/libusb/usb-hid.c
> index f0cab8a..ccd5ba9 100644
> --- a/lib/libusb/usb-hid.c
> +++ b/lib/libusb/usb-hid.c
> @@ -190,33 +190,29 @@ static void check_key_code(uint8_t *buf)
>  				case 0x3a:	                        /* F1 */
>  					write_key(0x1b);
>  					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x31);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x50);
>  					break;
>  
>  				case 0x3b:		                /* F2 */
>  					write_key(0x1b);
>  					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x32);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x51);
>  					break;
>  
>  				case 0x3c:
>  					write_key(0x1b);               /* F3 */
>  					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x33);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x52);
>  					break;
>  
>  				case 0x3d:
>  					write_key(0x1b);		/* F4 */
>  					write_key(0x5b);
> -					write_key(0x31);
> -					write_key(0x34);
> -					write_key(0x7e);
> +					write_key(0x4f);
> +					write_key(0x53);
>  					break;
>  
>  				case 0x3e:
> @@ -254,7 +250,7 @@ static void check_key_code(uint8_t *buf)
>  				case 0x42:
>  					write_key(0x1b);		/* F9 */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x30);
>  					write_key(0x7e);
>  					break;
> @@ -262,7 +258,7 @@ static void check_key_code(uint8_t *buf)
>  				case 0x43:
>  					write_key(0x1b);	       /* F10 */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x31);
>  					write_key(0x7e);
>  					break;
> @@ -270,7 +266,7 @@ static void check_key_code(uint8_t *buf)
>  				case 0x44:
>  					write_key(0x1b);	       /* F11 */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x33);
>  					write_key(0x7e);
>  					break;
> @@ -278,7 +274,7 @@ static void check_key_code(uint8_t *buf)
>  				case 0x45:
>  					write_key(0x1b);	       /* F12 */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x34);
>  					write_key(0x7e);
>  					break;
> @@ -290,36 +286,34 @@ static void check_key_code(uint8_t *buf)
>  				case 0x49:
>  					write_key(0x1b);	       /* INS */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x7e);
>  					break;
>  
>  				case 0x4a:
>  					write_key(0x1b);	      /* HOME */
>  					write_key(0x5b);
> -					write_key(0x32);
> -					write_key(0x7e);
> +					write_key(0x48);
>  					break;
>  
>  				case 0x4b:
>  					write_key(0x1b);	      /* PgUp */
>  					write_key(0x5b);
> -					write_key(0x33);
> +					write_key(0x35);
>  					write_key(0x7e);
>  					break;
>  
>  				case 0x4c:
>  					write_key(0x1b);	       /* DEL */
>  					write_key(0x5b);
> -					write_key(0x34);
> +					write_key(0x33);
>  					write_key(0x7e);
>  					break;
>  
>  				case 0x4d:
>  					write_key(0x1b);	       /* END */
>  					write_key(0x5b);
> -					write_key(0x35);
> -					write_key(0x7e);
> +					write_key(0x46);
>  					break;
>  
>  				case 0x4e:
> -- 
> 2.1.4
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
Thomas Huth Sept. 1, 2015, 2:13 p.m. UTC | #10
Hi!

May I ask what's the status of this patch? As far as I can see, it has
not been included in the repository yet?

On 29/05/15 15:30, Dinar valeev wrote:
> From: Dinar Valeev <dvaleev@suse.com>
> 
> Original issue is home and end keys are not functional in grub2.
> Later I've found other inconsistencies in f1-f12 keys.
> 
> "Correct sequence" was crabbed by pressing key on cat running in
> xterm.
> 
> Tested with Home, End, F2, Del and F10 keys in grub2
> 
> Signed-off-by: Dinar Valeev <dvaleev@suse.com>
> ---
>  lib/libusb/usb-hid.c | 40 +++++++++++++++++-----------------------
>  1 file changed, 17 insertions(+), 23 deletions(-)
> 
> diff --git a/lib/libusb/usb-hid.c b/lib/libusb/usb-hid.c
> index f0cab8a..ccd5ba9 100644
> --- a/lib/libusb/usb-hid.c
> +++ b/lib/libusb/usb-hid.c
...
> @@ -278,7 +274,7 @@ static void check_key_code(uint8_t *buf)
>  				case 0x45:
>  					write_key(0x1b);	       /* F12 */
>  					write_key(0x5b);
> -					write_key(0x31);
> +					write_key(0x32);
>  					write_key(0x34);
>  					write_key(0x7e);
>  					break;

... I'm especially interested in this hunk here. One of our testers ran
into the problem that you can not enter the boot menu when using USB
keyboard (and starting QEMU with "-boot menu=on"), and I think this is
related to this hunk.

Looking at "f12-pressed?" in slof/fs/start-up.fs you can also easily see
that the menu code expects a "32" instead of "31" here, and Dinar's
patch fixes this issue!

 Thomas
Dinar Valeev Sept. 1, 2015, 2:48 p.m. UTC | #11
On Tue, Sep 1, 2015 at 4:13 PM, Thomas Huth <thuth@redhat.com> wrote:
>
>  Hi!
>
> May I ask what's the status of this patch? As far as I can see, it has
> not been included in the repository yet?
Hi,
Uhh.. I forgot about this patch, since I run local copy.

No the patch is not included. For me it is unclear why keys don't work
for me, but they do for
Alexey and Nikunj.
>
> On 29/05/15 15:30, Dinar valeev wrote:
>> From: Dinar Valeev <dvaleev@suse.com>
>>
>> Original issue is home and end keys are not functional in grub2.
>> Later I've found other inconsistencies in f1-f12 keys.
>>
>> "Correct sequence" was crabbed by pressing key on cat running in
>> xterm.
>>
>> Tested with Home, End, F2, Del and F10 keys in grub2
>>
>> Signed-off-by: Dinar Valeev <dvaleev@suse.com>
>> ---
>>  lib/libusb/usb-hid.c | 40 +++++++++++++++++-----------------------
>>  1 file changed, 17 insertions(+), 23 deletions(-)
>>
>> diff --git a/lib/libusb/usb-hid.c b/lib/libusb/usb-hid.c
>> index f0cab8a..ccd5ba9 100644
>> --- a/lib/libusb/usb-hid.c
>> +++ b/lib/libusb/usb-hid.c
> ...
>> @@ -278,7 +274,7 @@ static void check_key_code(uint8_t *buf)
>>                               case 0x45:
>>                                       write_key(0x1b);               /* F12 */
>>                                       write_key(0x5b);
>> -                                     write_key(0x31);
>> +                                     write_key(0x32);
>>                                       write_key(0x34);
>>                                       write_key(0x7e);
>>                                       break;
>
> ... I'm especially interested in this hunk here. One of our testers ran
> into the problem that you can not enter the boot menu when using USB
> keyboard (and starting QEMU with "-boot menu=on"), and I think this is
> related to this hunk.
>
> Looking at "f12-pressed?" in slof/fs/start-up.fs you can also easily see
> that the menu code expects a "32" instead of "31" here, and Dinar's
> patch fixes this issue!
>
>  Thomas
>
Thomas Huth Sept. 1, 2015, 3:08 p.m. UTC | #12
On 01/09/15 16:48, Dinar Valeev wrote:
> On Tue, Sep 1, 2015 at 4:13 PM, Thomas Huth <thuth@redhat.com> wrote:
>>
>>  Hi!
>>
>> May I ask what's the status of this patch? As far as I can see, it has
>> not been included in the repository yet?
> Hi,
> Uhh.. I forgot about this patch, since I run local copy.
> 
> No the patch is not included. For me it is unclear why keys don't work
> for me, but they do for Alexey and Nikunj.

At least F12 for the boot menu is currently definitely broken - as the
code in "f12-pressed?" in slof/fs/start-up.fs expects other values than
the libusb code currently generates.

Alexey, Nikunj, could you please check whether the boot menu is working
for you when you run QEMU in graphical mode with "-boot menu=on"?

 Thanks,
  Thomas
diff mbox

Patch

diff --git a/lib/libusb/usb-hid.c b/lib/libusb/usb-hid.c
index f0cab8a..ccd5ba9 100644
--- a/lib/libusb/usb-hid.c
+++ b/lib/libusb/usb-hid.c
@@ -190,33 +190,29 @@  static void check_key_code(uint8_t *buf)
 				case 0x3a:	                        /* F1 */
 					write_key(0x1b);
 					write_key(0x5b);
-					write_key(0x31);
-					write_key(0x31);
-					write_key(0x7e);
+					write_key(0x4f);
+					write_key(0x50);
 					break;
 
 				case 0x3b:		                /* F2 */
 					write_key(0x1b);
 					write_key(0x5b);
-					write_key(0x31);
-					write_key(0x32);
-					write_key(0x7e);
+					write_key(0x4f);
+					write_key(0x51);
 					break;
 
 				case 0x3c:
 					write_key(0x1b);               /* F3 */
 					write_key(0x5b);
-					write_key(0x31);
-					write_key(0x33);
-					write_key(0x7e);
+					write_key(0x4f);
+					write_key(0x52);
 					break;
 
 				case 0x3d:
 					write_key(0x1b);		/* F4 */
 					write_key(0x5b);
-					write_key(0x31);
-					write_key(0x34);
-					write_key(0x7e);
+					write_key(0x4f);
+					write_key(0x53);
 					break;
 
 				case 0x3e:
@@ -254,7 +250,7 @@  static void check_key_code(uint8_t *buf)
 				case 0x42:
 					write_key(0x1b);		/* F9 */
 					write_key(0x5b);
-					write_key(0x31);
+					write_key(0x32);
 					write_key(0x30);
 					write_key(0x7e);
 					break;
@@ -262,7 +258,7 @@  static void check_key_code(uint8_t *buf)
 				case 0x43:
 					write_key(0x1b);	       /* F10 */
 					write_key(0x5b);
-					write_key(0x31);
+					write_key(0x32);
 					write_key(0x31);
 					write_key(0x7e);
 					break;
@@ -270,7 +266,7 @@  static void check_key_code(uint8_t *buf)
 				case 0x44:
 					write_key(0x1b);	       /* F11 */
 					write_key(0x5b);
-					write_key(0x31);
+					write_key(0x32);
 					write_key(0x33);
 					write_key(0x7e);
 					break;
@@ -278,7 +274,7 @@  static void check_key_code(uint8_t *buf)
 				case 0x45:
 					write_key(0x1b);	       /* F12 */
 					write_key(0x5b);
-					write_key(0x31);
+					write_key(0x32);
 					write_key(0x34);
 					write_key(0x7e);
 					break;
@@ -290,36 +286,34 @@  static void check_key_code(uint8_t *buf)
 				case 0x49:
 					write_key(0x1b);	       /* INS */
 					write_key(0x5b);
-					write_key(0x31);
+					write_key(0x32);
 					write_key(0x7e);
 					break;
 
 				case 0x4a:
 					write_key(0x1b);	      /* HOME */
 					write_key(0x5b);
-					write_key(0x32);
-					write_key(0x7e);
+					write_key(0x48);
 					break;
 
 				case 0x4b:
 					write_key(0x1b);	      /* PgUp */
 					write_key(0x5b);
-					write_key(0x33);
+					write_key(0x35);
 					write_key(0x7e);
 					break;
 
 				case 0x4c:
 					write_key(0x1b);	       /* DEL */
 					write_key(0x5b);
-					write_key(0x34);
+					write_key(0x33);
 					write_key(0x7e);
 					break;
 
 				case 0x4d:
 					write_key(0x1b);	       /* END */
 					write_key(0x5b);
-					write_key(0x35);
-					write_key(0x7e);
+					write_key(0x46);
 					break;
 
 				case 0x4e: