diff --git a/griffin/griffin.c b/griffin/griffin.c index 9fcff06c55..0522676daa 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -634,7 +634,6 @@ INPUT #include "../input/drivers/xenon360_input.c" #elif defined(ANDROID) #include "../input/drivers/android_input.c" -#include "../input/drivers_keyboard/keyboard_event_android.c" #include "../input/drivers_joypad/android_joypad.c" #elif defined(__QNX__) #include "../input/drivers/qnx_input.c" diff --git a/input/drivers/android_input.c b/input/drivers/android_input.c index db1a8104d7..adf1f34da9 100644 --- a/input/drivers/android_input.c +++ b/input/drivers/android_input.c @@ -73,6 +73,38 @@ enum { /* Use this to enable/disable using the touch screen as mouse */ #define ENABLE_TOUCH_SCREEN_MOUSE 1 +#define AKEYCODE_ASSIST 219 + +#define LAST_KEYCODE AKEYCODE_ASSIST + +#define MAX_KEYS ((LAST_KEYCODE + 7) / 8) + +/* First ports are used to keep track of gamepad states. + * Last port is used for keyboard state */ +static uint8_t android_key_state[MAX_PADS+1][MAX_KEYS]; + +static bool android_keyboard_port_input_pressed( + const struct retro_keybind *binds, unsigned id) +{ + return BIT_GET(android_key_state[ANDROID_KEYBOARD_PORT], rarch_keysym_lut[binds[id].key]); +} + +#define android_keyboard_input_pressed(key) (BIT_GET(android_key_state[0], (key))) + +uint8_t *android_keyboard_state_get(unsigned port) +{ + return android_key_state[port]; +} + +static void android_keyboard_free(void) +{ + unsigned i, j; + + for (i = 0; i < MAX_PADS; i++) + for (j = 0; j < MAX_KEYS; j++) + android_key_state[i][j] = 0; +} + /* TODO/FIXME - * fix game focus toggle */ @@ -853,8 +885,8 @@ static INLINE void android_input_poll_event_type_key( AInputEvent *event, int port, int keycode, int source, int type_event, int *handled) { - uint8_t *buf = android_keyboard_state_get(port); - int action = AKeyEvent_getAction(event); + uint8_t *buf = android_key_state[port]; + int action = AKeyEvent_getAction(event); /* some controllers send both the up and down events at once * when the button is released for "special" buttons, like menu buttons @@ -1343,6 +1375,7 @@ static bool android_input_key_pressed(void *data, int key) &input_config_binds[0][key]; if( keyptr->valid + && (key < RARCH_BIND_LIST_END) && android_keyboard_port_input_pressed(input_config_binds[0], key)) return true; @@ -1441,11 +1474,11 @@ static int16_t android_input_state(void *data, switch (device) { case RETRO_DEVICE_KEYBOARD: - return (id < RETROK_LAST) && BIT_GET(android_keyboard_state_get(ANDROID_KEYBOARD_PORT), rarch_keysym_lut[id]); + return (id < RETROK_LAST) && BIT_GET(android_key_state[ANDROID_KEYBOARD_PORT], rarch_keysym_lut[id]); case RETRO_DEVICE_JOYPAD: ret = input_joypad_pressed(android->joypad, joypad_info, port, binds[port], id); - if (!ret) + if (!ret && (id < RARCH_BIND_LIST_END)) ret = android_keyboard_port_input_pressed(binds[port],id); return ret; case RETRO_DEVICE_ANALOG: diff --git a/input/drivers_keyboard/keyboard_event_android.c b/input/drivers_keyboard/keyboard_event_android.c deleted file mode 100644 index 6c2f95bec8..0000000000 --- a/input/drivers_keyboard/keyboard_event_android.c +++ /dev/null @@ -1,57 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2011-2017 - Daniel De Matteis - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include - -#include "keyboard_event_android.h" - -#define AKEYCODE_ASSIST 219 - -#define LAST_KEYCODE AKEYCODE_ASSIST - -#define MAX_KEYS ((LAST_KEYCODE + 7) / 8) - -// First ports are used to keeping track of gamepad states. Last port is used for keyboard state -static uint8_t android_key_state[MAX_PADS+1][MAX_KEYS]; - -bool android_keyboard_port_input_pressed(const struct retro_keybind *binds, unsigned id) -{ - if (id < RARCH_BIND_LIST_END) - { - const struct retro_keybind *bind = &binds[id]; - unsigned bit = rarch_keysym_lut[bind->key]; - return BIT_GET(android_key_state[ANDROID_KEYBOARD_PORT], bit); - } - return false; -} - -bool android_keyboard_input_pressed(unsigned key) -{ - return BIT_GET(android_key_state[0], key); -} - -uint8_t *android_keyboard_state_get(unsigned port) -{ - return android_key_state[port]; -} - -void android_keyboard_free(void) -{ - unsigned i, j; - - for (i = 0; i < MAX_PADS; i++) - for (j = 0; j < MAX_KEYS; j++) - android_key_state[i][j] = 0; -} diff --git a/input/drivers_keyboard/keyboard_event_android.h b/input/drivers_keyboard/keyboard_event_android.h index 27e77f78a4..069caeac83 100644 --- a/input/drivers_keyboard/keyboard_event_android.h +++ b/input/drivers_keyboard/keyboard_event_android.h @@ -137,12 +137,6 @@ enum { #define ANDROID_KEYBOARD_PORT MAX_PADS -bool android_keyboard_port_input_pressed(const struct retro_keybind *binds, unsigned id); - -bool android_keyboard_input_pressed(unsigned key); - uint8_t *android_keyboard_state_get(unsigned port); -void android_keyboard_free(void); - #endif