diff mbox

[v5,4/4] adb.c: prevent NO_KEY value from going to guest

Message ID 1471487270-1490-5-git-send-email-programmingkidx@gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

Programmingkid Aug. 18, 2016, 2:27 a.m. UTC
The NO_KEY value should not be sent to the guest. This patch drops that value.

Signed-off-by: John Arbuckle <programmingkidx@gmail.com>
---
v5 changes:
Added ADB_DPRINTF() call.

v4 changes:
Added NO_KEY related code to this patch.
Added removal of "= 0" code near end of qcode_to_adb_keycode.

 hw/input/adb.c | 23 +++++++++--------------
 1 file changed, 9 insertions(+), 14 deletions(-)

Comments

BALATON Zoltan Aug. 18, 2016, 11:06 a.m. UTC | #1
On Wed, 17 Aug 2016, John Arbuckle wrote:
> @@ -446,7 +438,10 @@ static void adb_keyboard_event(DeviceState *dev, QemuConsole *src,
>         return;
>     }
>     keycode = qcode_to_adb_keycode[qcode];
> -
> +    if (keycode == NO_KEY) {  /* We don't want to send this to the guest */
> +        ADB_DPRINTF("Ignoring NO_KEY\n");
> +        return;
> +    }
>     if (evt->u.key.data->down == false) { /* if key release event */
>         keycode = keycode | 0x80;   /* create keyboard break code */
>     }

I think you should print the qcode value that was ignored instead of that 
it was mapped to NO_KEY which is not that informative.

Regards,
BALATON Zoltan
Programmingkid Aug. 20, 2016, 1:29 a.m. UTC | #2
On Aug 18, 2016, at 7:06 AM, BALATON Zoltan wrote:

> On Wed, 17 Aug 2016, John Arbuckle wrote:
>> @@ -446,7 +438,10 @@ static void adb_keyboard_event(DeviceState *dev, QemuConsole *src,
>>        return;
>>    }
>>    keycode = qcode_to_adb_keycode[qcode];
>> -
>> +    if (keycode == NO_KEY) {  /* We don't want to send this to the guest */
>> +        ADB_DPRINTF("Ignoring NO_KEY\n");
>> +        return;
>> +    }
>>    if (evt->u.key.data->down == false) { /* if key release event */
>>        keycode = keycode | 0x80;   /* create keyboard break code */
>>    }
> 
> I think you should print the qcode value that was ignored instead of that it was mapped to NO_KEY which is not that informative.
> 
> Regards,
> BALATON Zoltan

Sounds like a good idea.

What do you think of this:
ADB_DPRINTF("Ignoring key with qcode %d\n", qcode);
BALATON Zoltan Aug. 20, 2016, 5:18 p.m. UTC | #3
On Fri, 19 Aug 2016, Programmingkid wrote:
> On Aug 18, 2016, at 7:06 AM, BALATON Zoltan wrote:
>> On Wed, 17 Aug 2016, John Arbuckle wrote:
>>> @@ -446,7 +438,10 @@ static void adb_keyboard_event(DeviceState *dev, QemuConsole *src,
>>>        return;
>>>    }
>>>    keycode = qcode_to_adb_keycode[qcode];
>>> -
>>> +    if (keycode == NO_KEY) {  /* We don't want to send this to the guest */
>>> +        ADB_DPRINTF("Ignoring NO_KEY\n");
>>> +        return;
>>> +    }
>>>    if (evt->u.key.data->down == false) { /* if key release event */
>>>        keycode = keycode | 0x80;   /* create keyboard break code */
>>>    }
>>
>> I think you should print the qcode value that was ignored instead of that it was mapped to NO_KEY which is not that informative.
>>
>> Regards,
>> BALATON Zoltan
>
> Sounds like a good idea.
>
> What do you think of this:
> ADB_DPRINTF("Ignoring key with qcode %d\n", qcode);

That looks good to me. (Nothing more is needed as this is a debug message 
so people reading this should be able to find the meaning of qcode value.)

Regards,
BALATON Zoltan
diff mbox

Patch

diff --git a/hw/input/adb.c b/hw/input/adb.c
index 12c6333..3d39368 100644
--- a/hw/input/adb.c
+++ b/hw/input/adb.c
@@ -62,6 +62,9 @@  do { printf("ADB: " fmt , ## __VA_ARGS__); } while (0)
 /* error codes */
 #define ADB_RET_NOTPRESENT (-2)
 
+/* The adb keyboard doesn't have every key imaginable */
+#define NO_KEY 0xff
+
 static void adb_device_reset(ADBDevice *d)
 {
     qdev_reset_all(DEVICE(d));
@@ -191,6 +194,8 @@  typedef struct ADBKeyboardClass {
 } ADBKeyboardClass;
 
 int qcode_to_adb_keycode[] = {
+     /* Make sure future additions are automatically set to NO_KEY */
+    [0 ... 0xff]               = NO_KEY,
 
     [Q_KEY_CODE_SHIFT]         = ADB_KEY_LEFT_SHIFT,
     [Q_KEY_CODE_SHIFT_R]       = ADB_KEY_RIGHT_SHIFT,
@@ -306,19 +311,6 @@  int qcode_to_adb_keycode[] = {
     [Q_KEY_CODE_PGUP]          = ADB_KEY_PAGE_UP,
     [Q_KEY_CODE_PGDN]          = ADB_KEY_PAGE_DOWN,
 
-    [Q_KEY_CODE_LESS]          = 0xa,
-    [Q_KEY_CODE_STOP]          = 0,
-    [Q_KEY_CODE_AGAIN]         = 0,
-    [Q_KEY_CODE_PROPS]         = 0,
-    [Q_KEY_CODE_UNDO]          = 0,
-    [Q_KEY_CODE_FRONT]         = 0,
-    [Q_KEY_CODE_COPY]          = 0,
-    [Q_KEY_CODE_OPEN]          = 0,
-    [Q_KEY_CODE_PASTE]         = 0,
-    [Q_KEY_CODE_FIND]          = 0,
-    [Q_KEY_CODE_CUT]           = 0,
-    [Q_KEY_CODE_LF]            = 0,
-    [Q_KEY_CODE_COMPOSE]       = 0,
     [Q_KEY_CODE_POWER]         = ADB_KEY_POWER
 };
 
@@ -446,7 +438,10 @@  static void adb_keyboard_event(DeviceState *dev, QemuConsole *src,
         return;
     }
     keycode = qcode_to_adb_keycode[qcode];
-
+    if (keycode == NO_KEY) {  /* We don't want to send this to the guest */
+        ADB_DPRINTF("Ignoring NO_KEY\n");
+        return;
+    }
     if (evt->u.key.data->down == false) { /* if key release event */
         keycode = keycode | 0x80;   /* create keyboard break code */
     }