From 117ae93cf16bbac6c15cce186182597675409c42 Mon Sep 17 00:00:00 2001 From: hondres Date: Sat, 2 Jan 2016 03:34:32 +0100 Subject: [PATCH 1/2] Analog values for gamepad triggers, using axes 6 & 7 --- core/os/input_event.h | 3 +++ main/input_default.cpp | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/core/os/input_event.h b/core/os/input_event.h index 12980e2a15..b601adc875 100644 --- a/core/os/input_event.h +++ b/core/os/input_event.h @@ -143,6 +143,9 @@ enum { JOY_ANALOG_2_X = JOY_AXIS_4, JOY_ANALOG_2_Y = JOY_AXIS_5, + + JOY_ANALOG_L2 = JOY_AXIS_6, + JOY_ANALOG_R2 = JOY_AXIS_7, }; diff --git a/main/input_default.cpp b/main/input_default.cpp index 4141102bf6..68f7434d96 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -545,7 +545,12 @@ uint32_t InputDefault::joy_button(uint32_t p_last_id, int p_device, int p_button JoyEvent map = el->get(); if (map.type == TYPE_BUTTON) { - + //fake additional axis event for triggers + if (map.index == JOY_L2 || map.index == JOY_R2) { + float value = p_pressed ? 1.0f : 0.0f; + int axis = map.index == JOY_L2 ? JOY_ANALOG_L2 : JOY_ANALOG_R2; + p_last_id = _axis_event(p_last_id, p_device, axis, value); + } return _button_event(p_last_id, p_device, map.index, p_pressed); }; @@ -580,8 +585,9 @@ uint32_t InputDefault::joy_axis(uint32_t p_last_id, int p_device, int p_axis, co joy.last_axis[p_axis] = p_value.value; + float val = p_value.min == 0 ? -1.0f + 2.0f * p_value.value : p_value.value; + if (joy.mapping == -1) { - float val = p_value.min == 0 ? -1.0f + 2.0f * p_value.value : p_value.value; return _axis_event(p_last_id, p_device, p_axis, val); }; @@ -595,6 +601,12 @@ uint32_t InputDefault::joy_axis(uint32_t p_last_id, int p_device, int p_axis, co JoyEvent map = el->get(); if (map.type == TYPE_BUTTON) { + //send axis event for triggers + if (map.index == JOY_L2 || map.index == JOY_R2) { + float value = p_value.min == 0 ? p_value.value : 0.5f + p_value.value / 2.0f; + int axis = map.index == JOY_L2 ? JOY_ANALOG_L2 : JOY_ANALOG_R2; + p_last_id = _axis_event(p_last_id, p_device, axis, value); + } float deadzone = p_value.min == 0 ? 0.5f : 0.0f; bool pressed = p_value.value > deadzone ? true : false; if (pressed == joy_buttons_pressed.has(_combine_device(map.index,p_device))) { @@ -606,7 +618,6 @@ uint32_t InputDefault::joy_axis(uint32_t p_last_id, int p_device, int p_axis, co if (map.type == TYPE_AXIS) { - float val = p_value.min == 0 ? -1.0f + 2.0f * p_value.value : p_value.value; return _axis_event(p_last_id, p_device, map.index, val ); }; //printf("invalid mapping\n"); From c60e1648ba17489d5c762dcbe42d2019e540b0b9 Mon Sep 17 00:00:00 2001 From: hondres Date: Sat, 2 Jan 2016 03:52:44 +0100 Subject: [PATCH 2/2] make num_buttons local, no need to keep in joystick struct --- platform/x11/joystick_linux.cpp | 15 +++++++++------ platform/x11/joystick_linux.h | 2 -- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/platform/x11/joystick_linux.cpp b/platform/x11/joystick_linux.cpp index 1a513c778f..050fdac2b8 100644 --- a/platform/x11/joystick_linux.cpp +++ b/platform/x11/joystick_linux.cpp @@ -45,11 +45,11 @@ static const char* ignore_str = "/dev/input/js"; joystick_linux::Joystick::Joystick() { fd = -1; dpad = 0; + dev = NULL; + devpath = ""; } void joystick_linux::Joystick::reset() { - num_buttons = 0; - num_axes = 0; dpad = 0; fd = -1; for (int i=0; i < MAX_ABS; i++) { @@ -225,20 +225,23 @@ static String _hex_str(uint8_t p_byte) { void joystick_linux::setup_joystick_properties(int p_id) { Joystick* joy = &joysticks[p_id]; - libevdev* dev = joy->dev; + + int num_buttons = 0; + int num_axes = 0; + for (int i = BTN_JOYSTICK; i < KEY_MAX; ++i) { if (libevdev_has_event_code(dev, EV_KEY, i)) { - joy->key_map[i] = joy->num_buttons++; + joy->key_map[i] = num_buttons++; } } for (int i = BTN_MISC; i < BTN_JOYSTICK; ++i) { if (libevdev_has_event_code(dev, EV_KEY, i)) { - joy->key_map[i] = joy->num_buttons++; + joy->key_map[i] = num_buttons++; } } for (int i = 0; i < ABS_MISC; ++i) { @@ -249,7 +252,7 @@ void joystick_linux::setup_joystick_properties(int p_id) { } if (libevdev_has_event_code(dev, EV_ABS, i)) { - joy->abs_map[i] = joy->num_axes++; + joy->abs_map[i] = num_axes++; } } } diff --git a/platform/x11/joystick_linux.h b/platform/x11/joystick_linux.h index 45324cbf34..9d22a6c754 100644 --- a/platform/x11/joystick_linux.h +++ b/platform/x11/joystick_linux.h @@ -56,8 +56,6 @@ private: struct Joystick { int key_map[MAX_KEY - BT_MISC]; int abs_map[MAX_ABS]; - int num_buttons; - int num_axes; int dpad; int fd;