[gnome-games/wip/aplazas/konami-code: 15/15] event: Allow to keep hardware info



commit 8a9b8a5270e90281ba15ae8dc2948e9d4c19cd26
Author: Adrien Plazas <kekun plazas laposte net>
Date:   Mon May 15 10:41:53 2017 +0200

    event: Allow to keep hardware info
    
    Turn the 'index' field into 'hardware_index' and add fields containing
    the code of the input related to the event.
    
    Also remove the barely useful 'send_event' field.
    
    This avoid loosing information related to the original hardware event,
    whether the event is mapped or not.

 src/event/event.h                     |   16 +++++++---------
 src/gamepad/gamepad.c                 |   30 +++++++++---------------------
 src/gamepad/linux/linux-raw-gamepad.c |   11 ++++++-----
 3 files changed, 22 insertions(+), 35 deletions(-)
---
diff --git a/src/event/event.h b/src/event/event.h
index 6cc2c05..953ad44 100644
--- a/src/event/event.h
+++ b/src/event/event.h
@@ -29,49 +29,47 @@ typedef enum
 
 struct _GamesEventAny {
   GamesEventType type;
-  gint8 send_event;
   guint32 time;
 };
 
 struct _GamesEventGamepad {
   GamesEventType type;
-  gint8 send_event;
   guint32 time;
   guint16 hardware_type;
   guint16 hardware_code;
   gint32 hardware_value;
+  guint8 hardware_index;
 };
 
 struct _GamesEventGamepadButton {
   GamesEventType type;
-  gint8 send_event;
   guint32 time;
   guint16 hardware_type;
   guint16 hardware_code;
   gint32 hardware_value;
-  guint8 index;
+  guint8 hardware_index;
+  guint16 button;
 };
 
 struct _GamesEventGamepadAxis {
   GamesEventType type;
-  gint8 send_event;
   guint32 time;
   guint16 hardware_type;
   guint16 hardware_code;
   gint32 hardware_value;
-  guint8 index;
+  guint8 hardware_index;
+  guint16 axis;
   gdouble value;
 };
 
 struct _GamesEventGamepadHat {
   GamesEventType type;
-  gint8 send_event;
   guint32 time;
   guint16 hardware_type;
   guint16 hardware_code;
   gint32 hardware_value;
-  guint8 index;
-  guint8 axis;
+  guint8 hardware_index;
+  guint16 axis;
   gint8 value;
 };
 
diff --git a/src/gamepad/gamepad.c b/src/gamepad/gamepad.c
index 178c16a..e17244a 100644
--- a/src/gamepad/gamepad.c
+++ b/src/gamepad/gamepad.c
@@ -68,25 +68,21 @@ map_button_event (GamesGamepad            *self,
 
   mapped_event = games_event_copy ((GamesEvent *) games_event);
   games_gamepad_mapping_get_button_mapping (self->mapping,
-                                            games_event->index,
+                                            games_event->hardware_index,
                                             &destination);
 
   pressed = games_event->type == GAMES_EVENT_GAMEPAD_BUTTON_PRESS;
 
-  mapped_event->any.send_event = TRUE;
-  mapped_event->gamepad.hardware_type = destination.type;
-  mapped_event->gamepad.hardware_code = destination.code;
-
   switch (destination.type) {
   case EV_ABS:
     signal = SIGNAL_AXIS_EVENT;
-    mapped_event->gamepad_axis.index = 0; // FIXME How to set it properly?
+    mapped_event->gamepad_axis.axis = destination.code;
     mapped_event->gamepad_axis.value = pressed ? 1 : 0;
 
     break;
   case EV_KEY:
     signal = pressed ? SIGNAL_BUTTON_PRESS_EVENT : SIGNAL_BUTTON_RELEASE_EVENT;
-    mapped_event->gamepad_button.index = 0; // FIXME How to set it properly?
+    mapped_event->gamepad_button.button = destination.code;
 
     break;
   default:
@@ -110,23 +106,19 @@ map_axis_event (GamesGamepad          *self,
   gboolean pressed;
 
   mapped_event = games_event_copy ((GamesEvent *) games_event);
-  games_gamepad_mapping_get_axis_mapping (self->mapping, games_event->index, &destination);
+  games_gamepad_mapping_get_axis_mapping (self->mapping, games_event->hardware_index, &destination);
 
   pressed = games_event->value > 0.;
 
-  mapped_event->any.send_event = TRUE;
-  mapped_event->gamepad.hardware_type = destination.type;
-  mapped_event->gamepad.hardware_code = destination.code;
-
   switch (destination.type) {
   case EV_ABS:
     signal = SIGNAL_AXIS_EVENT;
-    mapped_event->gamepad_axis.index = 0; // FIXME How to set it properly?
+    mapped_event->gamepad_axis.axis = destination.code;
 
     break;
   case EV_KEY:
     signal = pressed ? SIGNAL_BUTTON_PRESS_EVENT : SIGNAL_BUTTON_RELEASE_EVENT;
-    mapped_event->gamepad_button.index = 0; // FIXME How to set it properly?
+    mapped_event->gamepad_button.button = destination.code;
 
     break;
   default:
@@ -151,27 +143,23 @@ map_hat_event (GamesGamepad         *self,
 
   mapped_event = games_event_copy ((GamesEvent *) games_event);
   games_gamepad_mapping_get_dpad_mapping (self->mapping,
-                                          games_event->index,
+                                          games_event->hardware_index,
                                           games_event->axis,
                                           games_event->value,
                                           &destination);
 
   pressed = abs (games_event->value);
 
-  mapped_event->any.send_event = TRUE;
-  mapped_event->gamepad.hardware_type = destination.type;
-  mapped_event->gamepad.hardware_code = destination.code;
-
   switch (destination.type) {
   case EV_ABS:
     signal = SIGNAL_AXIS_EVENT;
-    mapped_event->gamepad_axis.index = 0; // FIXME How to set it properly?
+    mapped_event->gamepad_axis.axis = destination.code;
     mapped_event->gamepad_axis.value = abs (games_event->value);
 
     break;
   case EV_KEY:
     signal = pressed ? SIGNAL_BUTTON_PRESS_EVENT : SIGNAL_BUTTON_RELEASE_EVENT;
-    mapped_event->gamepad_button.index = 0; // FIXME How to set it properly?
+    mapped_event->gamepad_button.button = destination.code;
 
     break;
   default:
diff --git a/src/gamepad/linux/linux-raw-gamepad.c b/src/gamepad/linux/linux-raw-gamepad.c
index b7b8cba..5b5e1c7 100644
--- a/src/gamepad/linux/linux-raw-gamepad.c
+++ b/src/gamepad/linux/linux-raw-gamepad.c
@@ -138,7 +138,6 @@ handle_evdev_event (GamesLinuxRawGamepad *self)
   if (libevdev_next_event (self->device, (guint) LIBEVDEV_READ_FLAG_NORMAL, &event) != 0)
     return;
 
-  games_event.gamepad.send_event = FALSE;
   games_event.gamepad.time = event.time.tv_sec * 1000 + event.time.tv_usec / 1000;
   games_event.gamepad.hardware_type = event.type;
   games_event.gamepad.hardware_code = event.code;
@@ -149,7 +148,8 @@ handle_evdev_event (GamesLinuxRawGamepad *self)
     games_event.type = event.value ?
       GAMES_EVENT_GAMEPAD_BUTTON_PRESS :
       GAMES_EVENT_GAMEPAD_BUTTON_RELEASE;
-    games_event.gamepad_button.index = self->key_map[event.code - BTN_MISC];
+    games_event.gamepad.hardware_index = self->key_map[event.code - BTN_MISC];
+      games_event.gamepad_button.button = event.code;
 
     break;
   case EV_ABS:
@@ -163,8 +163,8 @@ handle_evdev_event (GamesLinuxRawGamepad *self)
     case ABS_HAT3X:
     case ABS_HAT3Y:
       games_event.type = GAMES_EVENT_GAMEPAD_HAT;
-      games_event.gamepad_hat.index = self->key_map[(event.code - ABS_HAT0X) / 2];
-      games_event.gamepad_hat.axis = (event.code - ABS_HAT0X) % 2;
+      games_event.gamepad.hardware_index = self->key_map[(event.code - ABS_HAT0X) / 2];
+      games_event.gamepad_hat.axis = event.code;
       games_event.gamepad_hat.value = event.value;
 
       break;
@@ -173,7 +173,8 @@ handle_evdev_event (GamesLinuxRawGamepad *self)
     case ABS_RX:
     case ABS_RY:
       games_event.type = GAMES_EVENT_GAMEPAD_AXIS;
-      games_event.gamepad_axis.index = event.code;
+      games_event.gamepad.hardware_index = event.code;
+      games_event.gamepad_axis.axis = event.code;
       games_event.gamepad_axis.value =
         centered_axis_value (&self->abs_info[self->abs_map[event.code]],
                              event.value);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]