diff mbox

[vfio-users,v2,1/3] input: add qemu_input_qcode_to_linux + qemu_input_linux_to_qcode

Message ID CAAaYXTtsK61D6uxiRP=kapsAaa7rqvBViAqZiyDLGqMcuMF5JQ@mail.gmail.com (mailing list archive)
State New, archived
Headers show

Commit Message

sL1pKn07 SpinFlo Jan. 15, 2016, 6:14 p.m. UTC
2016-01-15 19:06 GMT+01:00 sL1pKn07 SpinFlo <sl1pkn07@gmail.com>:
> ---------- Forwarded message ----------
> From: Gerd Hoffmann <kraxel@redhat.com>
> Date: 2016-01-15 14:24 GMT+01:00
> Subject: Re: [vfio-users] [PATCH v2 1/3] input: add
> qemu_input_qcode_to_linux + qemu_input_linux_to_qcode
> To: sL1pKn07 SpinFlo <sl1pkn07@gmail.com>
>
>
>> --- a/include/standard-headers/linux/input-event-codes.h
>> +++ b/include/standard-headers/linux/input-event-codes.h
>> @@ -416,6 +416,11 @@
>>  #define BTN_WHEEL 0x150
>>  #define BTN_GEAR_DOWN 0x150
>>  #define BTN_GEAR_UP 0x151
>> +#define BTN_GEAR_LEFT 0x???   /* FIXME! */
>> +#define BTN_GEAR_RIGHT 0x???   /* FIXME! */
>> +#define BTN_FUNCTION_1 0x???   /* FIXME! */
>> +#define BTN_FUNCTION_2 0x???   /* FIXME! */
>
> The ones sent by your mouse most likely already in the list.
>
> Add "log=on" to the mouse, then qemu will log all mouse events it gets
> from the kernel to stderr, including the ones it doesn't handle.  That
> should show which wheel and button events the mouse sends.  Lets
> continue from there.
>
> More buttons can be defined by adding them to InputButton in
> qapi-schema.json
>
> Most tricky part is probably getting the mouse events to the guest os.
> quick look as the ps/2 emulation looks like there are no unused bits for
> more buttons.  Possibly we have to extend the usb mouse emulation for
> that.  Need to google a bit on that (any hints are welcome ;) ...
>
> cheers,
>   Gerd

With log=on

evdev: relative HWHEEL -1 <- press wheel Left
evdev: sync
evdev: relative HWHEEL 1 <- press wheel right
evdev: sync
evdev: type=MSC code=0x4 value=0x90005
evdev: key/btn BTN_EXTRA down
evdev: sync
evdev: type=MSC code=0x4 value=0x90005
evdev: key/btn BTN_EXTRA up
evdev: sync
evdev: type=MSC code=0x4 value=0x90004
evdev: key/btn BTN_SIDE down
evdev: sync
evdev: type=MSC code=0x4 value=0x90004
evdev: key/btn BTN_SIDE up

then
------------------------------------------------------------------------------------
-------------------------------------------------------

The part of whell left/right movement i don't know how paste on the code :/

and about  the extra buttons on windows....

https://msdn.microsoft.com/en-us/library/windows/hardware/jj128406(v=vs.85).aspx

bad business(?)

greetings
diff mbox

Patch

diff --git a/hw/input/hid.c b/hw/input/hid.c
index 3221d29..686ca3c 100644
--- a/hw/input/hid.c
+++ b/hw/input/hid.c
@@ -112,6 +112,8 @@  static void hid_pointer_event(DeviceState *dev,
QemuConsole *src,
         [INPUT_BUTTON_LEFT]   = 0x01,
         [INPUT_BUTTON_RIGHT]  = 0x02,
         [INPUT_BUTTON_MIDDLE] = 0x04,
+        [INPUT_BUTTON_EXTRA]  = 0x114,
+        [INPUT_BUTTON_SIDE]   = 0x113,
     };
     HIDState *hs = (HIDState *)dev;
     HIDPointerEvent *e;
diff --git a/hw/input/ps2.c b/hw/input/ps2.c
index 79754cd..325eea8 100644
--- a/hw/input/ps2.c
+++ b/hw/input/ps2.c
@@ -386,6 +386,8 @@  static void ps2_mouse_event(DeviceState *dev,
QemuConsole *src,
         [INPUT_BUTTON_LEFT]   = MOUSE_EVENT_LBUTTON,
         [INPUT_BUTTON_MIDDLE] = MOUSE_EVENT_MBUTTON,
         [INPUT_BUTTON_RIGHT]  = MOUSE_EVENT_RBUTTON,
+        [INPUT_BUTTON_EXTRA]  = MOUSE_EVENT_EBUTTON,
+        [INPUT_BUTTON_SIDE]   = MOUSE_EVENT_SBUTTON,
     };
     PS2MouseState *s = (PS2MouseState *)dev;

diff --git a/hw/input/virtio-input-hid.c b/hw/input/virtio-input-hid.c
index a78d11c..c003eb5 100644
--- a/hw/input/virtio-input-hid.c
+++ b/hw/input/virtio-input-hid.c
@@ -144,6 +144,8 @@  static const unsigned int
keymap_button[INPUT_BUTTON__MAX] = {
     [INPUT_BUTTON_MIDDLE]            = BTN_MIDDLE,
     [INPUT_BUTTON_WHEELUP]           = BTN_GEAR_UP,
     [INPUT_BUTTON_WHEELDOWN]         = BTN_GEAR_DOWN,
+    [INPUT_BUTTON_EXTRA]             = BTN_EXTRA,
+    [INPUT_BUTTON_SIDE]              = BTN_SIDE,
 };

 static const unsigned int axismap_rel[INPUT_AXIS__MAX] = {
diff --git a/monitor.c b/monitor.c
index e7e7ae2..61b7089 100644
--- a/monitor.c
+++ b/monitor.c
@@ -1390,6 +1390,8 @@  static void hmp_mouse_button(Monitor *mon, const
QDict *qdict)
         [INPUT_BUTTON_LEFT]       = MOUSE_EVENT_LBUTTON,
         [INPUT_BUTTON_MIDDLE]     = MOUSE_EVENT_MBUTTON,
         [INPUT_BUTTON_RIGHT]      = MOUSE_EVENT_RBUTTON,
+        [INPUT_BUTTON_SIDE]       = MOUSE_EVENT_SBUTTON,
+        [INPUT_BUTTON_EXTRA]      = MOUSE_EVENT_EBUTTON,
     };
     int button_state = qdict_get_int(qdict, "button_state");

diff --git a/qapi-schema.json b/qapi-schema.json
index 2e31733..74096ce 100644
--- a/qapi-schema.json
+++ b/qapi-schema.json
@@ -3667,7 +3667,7 @@ 
 # x-input-send-event is promoted out of experimental status.
 ##
 { 'enum'  : 'InputButton',
-  'data'  : [ 'Left', 'Middle', 'Right', 'WheelUp', 'WheelDown' ] }
+  'data'  : [ 'Left', 'Middle', 'Right', 'WheelUp', 'WheelDown',
'WheelLeft', 'WheelRight', 'Side', 'Extra' ] }

 ##
 # @InputAxis
diff --git a/ui/input-linux.c b/ui/input-linux.c
index 2e92c21..a6bf766 100644
--- a/ui/input-linux.c
+++ b/ui/input-linux.c
@@ -212,6 +212,11 @@  static void input_linux_event_mouse(void *opaque)
             case BTN_GEAR_DOWN:
                 qemu_input_queue_btn(NULL, INPUT_BUTTON_WHEELDOWN,
                                      event.value);
+            case BTN_EXTRA:
+                qemu_input_queue_btn(NULL, INPUT_BUTTON_EXTRA, event.value);
+                break;
+            case BTN_SIDE:
+                qemu_input_queue_btn(NULL, INPUT_BUTTON_SIDE, event.value);
                 break;
             };
             break;