[gnome-games/wip/aplazas/konami-code: 15/15] event: Allow to keep hardware info
- From: Adrien Plazas <aplazas src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-games/wip/aplazas/konami-code: 15/15] event: Allow to keep hardware info
- Date: Mon, 22 May 2017 09:04:55 +0000 (UTC)
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]