kimcinoo pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=308b0f82fa6ad0a44914e12a36eec5b91c58f06e
commit 308b0f82fa6ad0a44914e12a36eec5b91c58f06e Author: Shinwoo Kim <cinoo....@samsung.com> Date: Wed Jan 25 22:31:03 2017 +0900 ecore_input: support PS4 joystick Add joystick mapper for Sony Computer Entertainment Wireless Controller --- src/lib/ecore_input/ecore_input_joystick.c | 109 ++++++++++++++++++++++++++++- 1 file changed, 108 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore_input/ecore_input_joystick.c b/src/lib/ecore_input/ecore_input_joystick.c index 1b17abf..7913a0e 100644 --- a/src/lib/ecore_input/ecore_input_joystick.c +++ b/src/lib/ecore_input/ecore_input_joystick.c @@ -24,6 +24,7 @@ static int _ecore_input_joystick_init_count = 0; typedef void (*Joystick_Mapper)(struct js_event *event, Ecore_Event_Joystick *e); static void _joystick_xiinput_mapper(struct js_event *event, Ecore_Event_Joystick *e); +static void _joystick_ps4_mapper(struct js_event *event, Ecore_Event_Joystick *e); struct _Joystick_Info { @@ -39,7 +40,10 @@ struct _Joystick_Mapping_Info const char *vendor; const char *product; Joystick_Mapper mapper; -} Joystick_Mapping_Info[] = {{"045e", "028e", _joystick_xiinput_mapper}}; +} Joystick_Mapping_Info[] = { + {"045e", "028e", _joystick_xiinput_mapper}, /* Microsoft X-Box 360 pad */ + {"054c", "05c4", _joystick_ps4_mapper} /* Sony Computer Entertainment Wireless Controller */ +}; static const char joystickPrefix[] = "/dev/input/js"; static Eina_List *joystick_list; @@ -62,6 +66,109 @@ _joystick_connected_event_add(int index, Eina_Bool connected) } static void +_joystick_ps4_mapper(struct js_event *event, Ecore_Event_Joystick *e) +{ + if (event->type == JS_EVENT_BUTTON) + { + e->type = ECORE_EVENT_JOYSTICK_EVENT_TYPE_BUTTON; + e->button.value = event->value; + switch (event->number) + { + case 0: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_FACE_0; + break; + + case 1: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_FACE_1; + break; + + case 2: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_FACE_2; + break; + + case 3: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_FACE_3; + break; + + case 4: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_LEFT_SHOULDER; + break; + + case 5: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_RIGHT_SHOULDER; + break; + + case 8: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_SELECT; + break; + + case 9: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_META; + break; + + case 10: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_LEFT_ANALOG_STICK; + break; + + case 11: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_RIGHT_ANALOG_STICK; + break; + + case 12: + e->button.index = ECORE_EVENT_JOYSTICK_BUTTON_START; + break; + + default: + ERR("Unsupported joystick event: %d", event->number); + break; + } + } + else + { + e->type = ECORE_EVENT_JOYSTICK_EVENT_TYPE_AXIS; + e->axis.value = event->value / 32767.0f;; + switch (event->number) + { + case 0: + e->axis.index = ECORE_EVENT_JOYSTICK_AXIS_LEFT_ANALOG_HOR; + break; + + case 1: + e->axis.index = ECORE_EVENT_JOYSTICK_AXIS_LEFT_ANALOG_VER; + break; + + case 2: + e->axis.index = ECORE_EVENT_JOYSTICK_AXIS_RIGHT_ANALOG_HOR; + break; + + case 3: + e->axis.index = ECORE_EVENT_JOYSTICK_AXIS_LEFT_SHOULDER; + break; + + case 4: + e->axis.index = ECORE_EVENT_JOYSTICK_AXIS_RIGHT_SHOULDER; + break; + + case 5: + e->axis.index = ECORE_EVENT_JOYSTICK_AXIS_RIGHT_ANALOG_VER; + break; + + case 6: + e->axis.index = ECORE_EVENT_JOYSTICK_AXIS_HAT_X; + break; + + case 7: + e->axis.index = ECORE_EVENT_JOYSTICK_AXIS_HAT_Y; + break; + + default: + ERR("Unsupported joystick event: %d", event->number); + break; + } + } +} + +static void _joystick_xiinput_mapper(struct js_event *event, Ecore_Event_Joystick *e) { if (event->type == JS_EVENT_BUTTON) --