(Android) Rewrite of input code

This commit is contained in:
twinaphex 2012-11-03 00:30:41 +01:00
parent d875c78988
commit 0dbcdb087d
7 changed files with 171 additions and 199 deletions

@ -24,14 +24,7 @@ struct droid
{
struct android_app* app;
uint64_t input_state;
};
enum {
ANDROID_STATE_QUIT = 1 << 0,
ANDROID_STATE_KILL = 1 << 1,
ANDROID_STATE_VOLUME_UP = 1 << 2,
ANDROID_STATE_VOLUME_DOWN = 1 << 3,
ANDROID_WINDOW_READY = 1 << 4,
uint64_t game_state;
};
extern struct droid g_android;

@ -23,6 +23,16 @@
#include "input_android.h"
enum {
AKEYCODE_ESCAPE = 111,
AKEYCODE_BREAK = 121,
AKEYCODE_F2 = 132,
AKEYCODE_F3 = 133,
AKEYCODE_F4 = 134,
AKEYCODE_F5 = 135,
AKEYCODE_F6 = 136,
AKEYCODE_F7 = 137,
AKEYCODE_F8 = 138,
AKEYCODE_F9 = 139,
AKEYCODE_BUTTON_1 = 188,
AKEYCODE_BUTTON_2 = 189,
AKEYCODE_BUTTON_3 = 190,
@ -56,9 +66,9 @@ enum {
static unsigned pads_connected;
static uint64_t state[MAX_PADS];
static int8_t state_device_ids[MAX_DEVICE_IDS];
static int32_t keycode_lut[LAST_KEYCODE];
static int64_t keycode_lut[LAST_KEYCODE];
static int32_t handle_touch(AInputEvent* event, int i, int keycode)
static int32_t handle_touch(AInputEvent* event, int i)
{
RARCH_PERFORMANCE_INIT(handle_touch);
RARCH_PERFORMANCE_START(handle_touch);
@ -68,20 +78,20 @@ static int32_t handle_touch(AInputEvent* event, int i, int keycode)
switch(source)
{
case AINPUT_SOURCE_DPAD:
RARCH_LOG("AINPUT_SOURCE_DPAD, pad: %d, keycode: %d.\n", i, keycode);
RARCH_LOG("AINPUT_SOURCE_DPAD, pad: %d.\n", i);
break;
case AINPUT_SOURCE_TOUCHSCREEN:
RARCH_LOG("AINPUT_SOURCE_TOUCHSCREEN, pad: %d, keycode: %d.\n", i, keycode);
RARCH_LOG("AINPUT_SOURCE_TOUCHSCREEN, pad: %d.\n", i);
break;
case AINPUT_SOURCE_TOUCHPAD:
RARCH_LOG("AINPUT_SOURCE_TOUCHPAD, pad: %d, keycode: %d.\n", i, keycode);
RARCH_LOG("AINPUT_SOURCE_TOUCHPAD, pad: %d.\n", i);
break;
case AINPUT_SOURCE_ANY:
RARCH_LOG("AINPUT_SOURCE_ANY, pad: %d, keycode: %d.\n", i, keycode);
RARCH_LOG("AINPUT_SOURCE_ANY, pad: %d.\n", i);
break;
case 0:
default:
RARCH_LOG("AINPUT_SOURCE_DEFAULT, pad: %d, keycode: %d.\n", i, keycode);
RARCH_LOG("AINPUT_SOURCE_DEFAULT, pad: %d.\n", i);
break;
}
#endif
@ -91,37 +101,21 @@ static int32_t handle_touch(AInputEvent* event, int i, int keycode)
#ifdef RARCH_INPUT_DEBUG
RARCH_LOG("AINPUT_EVENT_TYPE_MOTION, pad: %d, x: %f, y: %f.\n", i, x, y);
#endif
state[i] &= ~(ANDROID_GAMEPAD_DPAD_LEFT | ANDROID_GAMEPAD_DPAD_RIGHT |
ANDROID_GAMEPAD_DPAD_UP | ANDROID_GAMEPAD_DPAD_DOWN);
state[i] |= PRESSED_LEFT(x, y) ? ANDROID_GAMEPAD_DPAD_LEFT : 0;
state[i] |= PRESSED_RIGHT(x, y) ? ANDROID_GAMEPAD_DPAD_RIGHT : 0;
state[i] |= PRESSED_UP(x, y) ? ANDROID_GAMEPAD_DPAD_UP : 0;
state[i] |= PRESSED_DOWN(x, y) ? ANDROID_GAMEPAD_DPAD_DOWN : 0;
state[i] &= ~((1 << RETRO_DEVICE_ID_JOYPAD_LEFT) | (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT) |
(1 << RETRO_DEVICE_ID_JOYPAD_UP) | (1 << RETRO_DEVICE_ID_JOYPAD_DOWN));
state[i] |= PRESSED_LEFT(x, y) ? (1 << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0;
state[i] |= PRESSED_RIGHT(x, y) ? (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT) : 0;
state[i] |= PRESSED_UP(x, y) ? (1 << RETRO_DEVICE_ID_JOYPAD_UP) : 0;
state[i] |= PRESSED_DOWN(x, y) ? (1 << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0;
RARCH_PERFORMANCE_STOP(handle_touch);
return 1;
}
static int32_t handle_button(AInputEvent* event, int i, int keycode)
{
RARCH_PERFORMANCE_INIT(handle_button);
RARCH_PERFORMANCE_START(handle_button);
int action = AKeyEvent_getAction(event);
if(action == AKEY_EVENT_ACTION_DOWN || action == AKEY_EVENT_ACTION_MULTIPLE)
state[i] |= keycode_lut[keycode];
else if(action == AKEY_EVENT_ACTION_UP)
state[i] &= ~(keycode_lut[keycode]);
RARCH_PERFORMANCE_STOP(handle_button);
return 1;
}
static void setup_keycode_lut(void)
{
for(int i = 0; i < LAST_KEYCODE; i++)
keycode_lut[i] = 0;
keycode_lut[i] = -1;
/* Control scheme 1
@ -135,18 +129,18 @@ static void setup_keycode_lut(void)
* builtinKeyboard=false
*/
keycode_lut[AKEYCODE_BUTTON_2] = ANDROID_GAMEPAD_CROSS;
keycode_lut[AKEYCODE_BUTTON_1] = ANDROID_GAMEPAD_SQUARE;
keycode_lut[AKEYCODE_BUTTON_9] = ANDROID_GAMEPAD_SELECT;
keycode_lut[AKEYCODE_BUTTON_10] = ANDROID_GAMEPAD_START;
keycode_lut[AKEYCODE_BUTTON_3] = ANDROID_GAMEPAD_CIRCLE;
keycode_lut[AKEYCODE_BUTTON_4] = ANDROID_GAMEPAD_TRIANGLE;
keycode_lut[AKEYCODE_BUTTON_5] = ANDROID_GAMEPAD_L1;
keycode_lut[AKEYCODE_BUTTON_6] = ANDROID_GAMEPAD_R1;
keycode_lut[AKEYCODE_BUTTON_7] = ANDROID_GAMEPAD_L2;
keycode_lut[AKEYCODE_BUTTON_8] = ANDROID_GAMEPAD_R2;
keycode_lut[AKEYCODE_BUTTON_11] = ANDROID_GAMEPAD_L3;
keycode_lut[AKEYCODE_BUTTON_12] = ANDROID_GAMEPAD_R3;
keycode_lut[AKEYCODE_BUTTON_2] = (1 << RETRO_DEVICE_ID_JOYPAD_B);
keycode_lut[AKEYCODE_BUTTON_1] = (1 << RETRO_DEVICE_ID_JOYPAD_Y);
keycode_lut[AKEYCODE_BUTTON_9] = (1 << RETRO_DEVICE_ID_JOYPAD_SELECT);
keycode_lut[AKEYCODE_BUTTON_10] = (1 << RETRO_DEVICE_ID_JOYPAD_START);
keycode_lut[AKEYCODE_BUTTON_3] = (1 << RETRO_DEVICE_ID_JOYPAD_A);
keycode_lut[AKEYCODE_BUTTON_4] = (1 << RETRO_DEVICE_ID_JOYPAD_X);
keycode_lut[AKEYCODE_BUTTON_5] = (1 << RETRO_DEVICE_ID_JOYPAD_L);
keycode_lut[AKEYCODE_BUTTON_6] = (1 << RETRO_DEVICE_ID_JOYPAD_R);
keycode_lut[AKEYCODE_BUTTON_7] = (1 << RETRO_DEVICE_ID_JOYPAD_L2);
keycode_lut[AKEYCODE_BUTTON_8] = (1 << RETRO_DEVICE_ID_JOYPAD_R2);
keycode_lut[AKEYCODE_BUTTON_11] = (1 << RETRO_DEVICE_ID_JOYPAD_L3);
keycode_lut[AKEYCODE_BUTTON_12] = (1 << RETRO_DEVICE_ID_JOYPAD_R3);
/* Control scheme 2
* Tested with: SNES Pad USB converter
@ -160,14 +154,14 @@ static void setup_keycode_lut(void)
* builtinKeyboard=false
*/
keycode_lut[AKEYCODE_BUTTON_C] = ANDROID_GAMEPAD_CROSS;
keycode_lut[AKEYCODE_BUTTON_X] = ANDROID_GAMEPAD_SQUARE;
keycode_lut[AKEYCODE_BUTTON_L2] = ANDROID_GAMEPAD_SELECT;
keycode_lut[AKEYCODE_BUTTON_R2] = ANDROID_GAMEPAD_START;
keycode_lut[AKEYCODE_BUTTON_B] = ANDROID_GAMEPAD_CIRCLE;
keycode_lut[AKEYCODE_BUTTON_A] = ANDROID_GAMEPAD_TRIANGLE;
keycode_lut[AKEYCODE_BUTTON_L1] = ANDROID_GAMEPAD_L1;
keycode_lut[AKEYCODE_BUTTON_R1] = ANDROID_GAMEPAD_R1;
keycode_lut[AKEYCODE_BUTTON_C] = (1 << RETRO_DEVICE_ID_JOYPAD_B);
keycode_lut[AKEYCODE_BUTTON_X] = (1 << RETRO_DEVICE_ID_JOYPAD_Y);
keycode_lut[AKEYCODE_BUTTON_L2] = (1 << RETRO_DEVICE_ID_JOYPAD_SELECT);
keycode_lut[AKEYCODE_BUTTON_R2] = (1 << RETRO_DEVICE_ID_JOYPAD_START);
keycode_lut[AKEYCODE_BUTTON_B] = (1 << RETRO_DEVICE_ID_JOYPAD_A);
keycode_lut[AKEYCODE_BUTTON_A] = (1 << RETRO_DEVICE_ID_JOYPAD_X);
keycode_lut[AKEYCODE_BUTTON_L1] = (1 << RETRO_DEVICE_ID_JOYPAD_L);
keycode_lut[AKEYCODE_BUTTON_R1] = (1 << RETRO_DEVICE_ID_JOYPAD_R);
/* Control scheme 3
* fd=196
@ -250,29 +244,33 @@ static void setup_keycode_lut(void)
* TODO: Map L2/R2/L3/R3
* */
keycode_lut[AKEYCODE_Z] = ANDROID_GAMEPAD_CROSS;
keycode_lut[AKEYCODE_A] = ANDROID_GAMEPAD_SQUARE;
keycode_lut[AKEYCODE_SHIFT_RIGHT] = ANDROID_GAMEPAD_SELECT;
keycode_lut[AKEYCODE_ENTER] = ANDROID_GAMEPAD_START;
keycode_lut[AKEYCODE_DPAD_UP] = ANDROID_GAMEPAD_DPAD_UP;
keycode_lut[AKEYCODE_DPAD_DOWN] = ANDROID_GAMEPAD_DPAD_DOWN;
keycode_lut[AKEYCODE_DPAD_LEFT] = ANDROID_GAMEPAD_DPAD_LEFT;
keycode_lut[AKEYCODE_DPAD_RIGHT] = ANDROID_GAMEPAD_DPAD_RIGHT;
keycode_lut[AKEYCODE_X] = ANDROID_GAMEPAD_CIRCLE;
keycode_lut[AKEYCODE_S] = ANDROID_GAMEPAD_TRIANGLE;
keycode_lut[AKEYCODE_Q] = ANDROID_GAMEPAD_L1;
keycode_lut[AKEYCODE_W] = ANDROID_GAMEPAD_R1;
keycode_lut[AKEYCODE_Z] = (1 << RETRO_DEVICE_ID_JOYPAD_B);
keycode_lut[AKEYCODE_A] = (1 << RETRO_DEVICE_ID_JOYPAD_Y);
keycode_lut[AKEYCODE_SHIFT_RIGHT] = (1 << RETRO_DEVICE_ID_JOYPAD_SELECT);
keycode_lut[AKEYCODE_ENTER] = (1 << RETRO_DEVICE_ID_JOYPAD_START);
keycode_lut[AKEYCODE_DPAD_UP] = (1 << RETRO_DEVICE_ID_JOYPAD_UP);
keycode_lut[AKEYCODE_DPAD_DOWN] = (1 << RETRO_DEVICE_ID_JOYPAD_DOWN);
keycode_lut[AKEYCODE_DPAD_LEFT] = (1 << RETRO_DEVICE_ID_JOYPAD_LEFT);
keycode_lut[AKEYCODE_DPAD_RIGHT] = (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT);
keycode_lut[AKEYCODE_X] = (1 << RETRO_DEVICE_ID_JOYPAD_A);
keycode_lut[AKEYCODE_S] = (1 << RETRO_DEVICE_ID_JOYPAD_X);
keycode_lut[AKEYCODE_Q] = (1 << RETRO_DEVICE_ID_JOYPAD_L);
keycode_lut[AKEYCODE_W] = (1 << RETRO_DEVICE_ID_JOYPAD_R);
/* Misc control scheme */
keycode_lut[AKEYCODE_BACK] = ANDROID_STATE_QUIT;
keycode_lut[AKEYCODE_VOLUME_UP] = ANDROID_STATE_VOLUME_UP;
keycode_lut[AKEYCODE_VOLUME_DOWN] = ANDROID_STATE_VOLUME_DOWN;
}
static void setup_state_ids(void)
{
for(int i = 0; i < MAX_DEVICE_IDS; i++)
state_device_ids[i] = -1;
keycode_lut[AKEYCODE_BACK] = (1ULL << RARCH_QUIT_KEY);
keycode_lut[AKEYCODE_F2] = (1ULL << RARCH_SAVE_STATE_KEY);
keycode_lut[AKEYCODE_F4] = (1ULL << RARCH_LOAD_STATE_KEY);
keycode_lut[AKEYCODE_F7] = (1ULL << RARCH_STATE_SLOT_PLUS);
keycode_lut[AKEYCODE_F6] = (1ULL << RARCH_STATE_SLOT_MINUS);
keycode_lut[AKEYCODE_SPACE] = (1ULL << RARCH_FAST_FORWARD_KEY);
keycode_lut[AKEYCODE_L] = (1ULL << RARCH_FAST_FORWARD_HOLD_KEY);
keycode_lut[AKEYCODE_ESCAPE] = (1ULL << RARCH_QUIT_KEY);
keycode_lut[AKEYCODE_BREAK] = (1ULL << RARCH_PAUSE_TOGGLE);
keycode_lut[AKEYCODE_K] = (1ULL << RARCH_FRAMEADVANCE);
keycode_lut[AKEYCODE_H] = (1ULL << RARCH_RESET);
keycode_lut[AKEYCODE_R] = (1ULL << RARCH_REWIND);
keycode_lut[AKEYCODE_F9] = (1ULL << RARCH_MUTE);
}
static void *android_input_init(void)
@ -288,25 +286,27 @@ static void *android_input_init(void)
for(int player = 0; player < 4; player++)
{
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_B].joykey = ANDROID_GAMEPAD_CROSS;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_Y].joykey = ANDROID_GAMEPAD_SQUARE;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_SELECT].joykey = ANDROID_GAMEPAD_SELECT;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_START].joykey = ANDROID_GAMEPAD_START;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_UP].joykey = ANDROID_GAMEPAD_DPAD_UP;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = ANDROID_GAMEPAD_DPAD_DOWN;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = ANDROID_GAMEPAD_DPAD_LEFT;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = ANDROID_GAMEPAD_DPAD_RIGHT;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_A].joykey = ANDROID_GAMEPAD_CIRCLE;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_X].joykey = ANDROID_GAMEPAD_TRIANGLE;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_L].joykey = ANDROID_GAMEPAD_L1;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_R].joykey = ANDROID_GAMEPAD_R1;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_L2].joykey = ANDROID_GAMEPAD_L2;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_R2].joykey = ANDROID_GAMEPAD_R2;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_L3].joykey = ANDROID_GAMEPAD_L3;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_R3].joykey = ANDROID_GAMEPAD_R3;
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_B].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_B);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_Y].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_Y);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_SELECT].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_SELECT);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_START].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_START);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_UP].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_UP);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_DOWN);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_LEFT);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_RIGHT);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_A].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_A);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_X].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_X);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_L].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_L);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_R].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_R);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_L2].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_L2);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_R2].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_R2);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_L3].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_L3);
g_settings.input.binds[player][RETRO_DEVICE_ID_JOYPAD_R3].joykey = (1 << RETRO_DEVICE_ID_JOYPAD_R3);
}
setup_state_ids();
for(int i = 0; i < MAX_DEVICE_IDS; i++)
state_device_ids[i] = -1;
setup_keycode_lut();
return (void*)-1;
@ -317,12 +317,12 @@ static void android_input_poll(void *data)
(void)data;
// Read all pending events.
int event;
int do_event;
struct android_app* android_app = g_android.app;
int id = ALooper_pollOnce(0, NULL, &event, NULL);
int id = ALooper_pollOnce(0, NULL, &do_event, NULL);
// Process this event.
if(event)
if(do_event)
{
if(id == LOOPER_ID_INPUT)
{
@ -335,6 +335,7 @@ static void android_input_poll(void *data)
int keycode = AKeyEvent_getKeyCode(event);
int32_t handled = 0;
uint64_t input_state = keycode_lut[keycode];
int id = AInputEvent_getDeviceId(event);
int type = AInputEvent_getType(event);
@ -344,11 +345,20 @@ static void android_input_poll(void *data)
i = state_device_ids[id] = pads_connected++;
if(type == AINPUT_EVENT_TYPE_MOTION)
handled = handle_touch(event, i, keycode);
else if(keycode == AKEYCODE_BACK || keycode == AKEYCODE_VOLUME_UP || keycode == AKEYCODE_VOLUME_DOWN)
g_android.input_state = keycode_lut[keycode];
else
handled = handle_button(event, i, keycode);
handled = handle_touch(event, i);
else if(input_state < (1 << RARCH_FIRST_META_KEY))
{
int action = AKeyEvent_getAction(event);
if(action == AKEY_EVENT_ACTION_DOWN || action == AKEY_EVENT_ACTION_MULTIPLE)
state[i] |= input_state;
else if(action == AKEY_EVENT_ACTION_UP)
state[i] &= ~(input_state);
handled = 1;
}
else if(input_state != -1)
g_android.input_state = input_state;
AInputQueue_finishEvent(android_app->inputQueue, event, handled);
}
@ -393,19 +403,11 @@ static int16_t android_input_state(void *data, const struct retro_keybind **bind
static bool android_input_key_pressed(void *data, int key)
{
(void)data;
(void)key;
switch (key)
{
case RARCH_QUIT_KEY:
if(g_android.input_state & ANDROID_STATE_KILL)
return true;
else
return false;
break;
default:
(void)0;
}
if(key == RARCH_QUIT_KEY && (g_android.input_state & (1ULL << RARCH_KILL)))
return true;
else if(g_android.input_state & key)
return true;
return false;
}

@ -20,31 +20,4 @@
#define AKEY_EVENT_NO_ACTION 255
#define MAX_PADS 8
enum {
ANDROID_GAMEPAD_CROSS = 1 << 0,
ANDROID_GAMEPAD_SQUARE = 1 << 1,
ANDROID_GAMEPAD_SELECT = 1 << 2,
ANDROID_GAMEPAD_START = 1 << 3,
ANDROID_GAMEPAD_DPAD_UP = 1 << 4,
ANDROID_GAMEPAD_DPAD_DOWN = 1 << 5,
ANDROID_GAMEPAD_DPAD_LEFT = 1 << 6,
ANDROID_GAMEPAD_DPAD_RIGHT = 1 << 7,
ANDROID_GAMEPAD_CIRCLE = 1 << 8,
ANDROID_GAMEPAD_TRIANGLE = 1 << 9,
ANDROID_GAMEPAD_L1 = 1 << 10,
ANDROID_GAMEPAD_R1 = 1 << 11,
ANDROID_GAMEPAD_L2 = 1 << 12,
ANDROID_GAMEPAD_R2 = 1 << 13,
ANDROID_GAMEPAD_L3 = 1 << 14,
ANDROID_GAMEPAD_R3 = 1 << 15,
ANDROID_GAMEPAD_LSTICK_LEFT_MASK = 1 << 16,
ANDROID_GAMEPAD_LSTICK_RIGHT_MASK = 1 << 17,
ANDROID_GAMEPAD_LSTICK_UP_MASK = 1 << 18,
ANDROID_GAMEPAD_LSTICK_DOWN_MASK = 1 << 19,
ANDROID_GAMEPAD_RSTICK_LEFT_MASK = 1 << 20,
ANDROID_GAMEPAD_RSTICK_RIGHT_MASK = 1 << 21,
ANDROID_GAMEPAD_RSTICK_UP_MASK = 1 << 22,
ANDROID_GAMEPAD_RSTICK_DOWN_MASK = 1 << 23,
};
#endif

@ -100,7 +100,7 @@ void engine_handle_cmd(struct android_app* android_app, int32_t cmd)
pthread_mutex_unlock(&android_app->mutex);
if (android_app->window != NULL)
g_android.input_state = ANDROID_WINDOW_READY;
g_android.input_state |= (1ULL << RARCH_WINDOW_READY);
break;
case APP_CMD_START:
RARCH_LOG("engine_handle_cmd: APP_CMD_START.\n");
@ -129,8 +129,8 @@ void engine_handle_cmd(struct android_app* android_app, int32_t cmd)
android_app->activityState = cmd;
pthread_cond_broadcast(&android_app->cond);
pthread_mutex_unlock(&android_app->mutex);
if(g_android.input_state & ANDROID_STATE_QUIT)
g_android.input_state = ANDROID_STATE_KILL;
if(g_android.input_state & (1ULL << RARCH_QUIT_KEY))
g_android.input_state |= (1ULL << RARCH_KILL);
break;
case APP_CMD_TERM_WINDOW:
RARCH_LOG("engine_handle_cmd: APP_CMD_TERM_WINDOW.\n");
@ -149,7 +149,7 @@ void engine_handle_cmd(struct android_app* android_app, int32_t cmd)
case APP_CMD_LOST_FOCUS:
RARCH_LOG("engine_handle_cmd: APP_CMD_LOST_FOCUS.\n");
/*
if (!g_android.input_state & ANDROID_WINDOW_READY)
if (!g_android.input_state & (1ULL << RARCH_WINDOW_READY))
{
}
*/
@ -238,7 +238,7 @@ void android_main(struct android_app* state)
g_extern.verbose = true;
while(!(g_android.input_state & ANDROID_WINDOW_READY))
while(!(g_android.input_state & (1ULL << RARCH_WINDOW_READY)))
{
// Read all pending events.
int id;

@ -91,6 +91,10 @@ enum // RetroArch specific bind IDs.
RARCH_CHEAT_INPUT,
RARCH_SRAM_WRITE_PROTECT,
#endif
#ifdef ANDROID
RARCH_KILL,
RARCH_WINDOW_READY,
#endif
RARCH_BIND_LIST_END,
RARCH_BIND_LIST_END_NULL

@ -137,7 +137,7 @@ static void gfx_ctx_check_window(bool *quit,
*resize = false;
// Check if we are exiting.
if (g_android.app->destroyRequested != 0 || (g_android.input_state & ANDROID_STATE_KILL))
if (g_android.app->destroyRequested != 0 || (g_android.input_state & (1ULL << RARCH_KILL)))
*quit = true;
}

@ -31,8 +31,8 @@
#include "../general.h"
/*============================================================
PS3 MOUSE
============================================================ */
PS3 MOUSE
============================================================ */
#ifdef HAVE_MOUSE
@ -65,8 +65,8 @@ CellMouseData ps3_mouse_input_poll_device(uint32_t id)
#endif
/*============================================================
PS3 PAD
============================================================ */
PS3 PAD
============================================================ */
const struct platform_bind platform_keys[] = {
{ PS3_GAMEPAD_CIRCLE, "Circle button" },
@ -227,18 +227,18 @@ static int16_t ps3_input_state(void *data, const struct retro_keybind **binds,
break;
#ifdef HAVE_MOUSE
case RETRO_DEVICE_MOUSE:
retval = ps3_mouse_device_state(data, player, id);
retval = ps3_mouse_device_state(data, player, id);
break;
#endif
}
}
}
return retval;
}
/*============================================================
ON-SCREEN KEYBOARD UTILITY
============================================================ */
ON-SCREEN KEYBOARD UTILITY
============================================================ */
#ifdef HAVE_OSKUTIL
@ -257,7 +257,7 @@ void oskutil_init(oskutil_params *params, unsigned containersize)
static bool oskutil_enable_key_layout (void)
{
int ret = pOskSetKeyLayoutOption(CELL_OSKDIALOG_10KEY_PANEL | \
CELL_OSKDIALOG_FULLKEY_PANEL);
CELL_OSKDIALOG_FULLKEY_PANEL);
if (ret < 0)
return (false);
else
@ -273,10 +273,10 @@ static void oskutil_create_activation_parameters(oskutil_params *params)
pOskSetLayoutMode(LayoutMode);
params->dialogParam.osk_allowed_panels =
CELL_OSKDIALOG_PANELMODE_ALPHABET |
CELL_OSKDIALOG_PANELMODE_NUMERAL |
CELL_OSKDIALOG_PANELMODE_NUMERAL_FULL_WIDTH |
CELL_OSKDIALOG_PANELMODE_ENGLISH;
CELL_OSKDIALOG_PANELMODE_ALPHABET |
CELL_OSKDIALOG_PANELMODE_NUMERAL |
CELL_OSKDIALOG_PANELMODE_NUMERAL_FULL_WIDTH |
CELL_OSKDIALOG_PANELMODE_ENGLISH;
params->dialogParam.firstViewPanel = CELL_OSKDIALOG_PANELMODE_ENGLISH;
params->dialogParam.osk_prohibit_flags = 0;
@ -367,8 +367,8 @@ void oskutil_unload(oskutil_params *params)
#endif
/*============================================================
RetroArch PS3 INPUT DRIVER
============================================================ */
RetroArch PS3 INPUT DRIVER
============================================================ */
static void ps3_input_set_analog_dpad_mapping(unsigned device, unsigned map_dpad_enum, unsigned controller_id)
{
@ -379,24 +379,24 @@ static void ps3_input_set_analog_dpad_mapping(unsigned device, unsigned map_dpad
case DPAD_EMULATION_NONE:
g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_NONE;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_UP].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_RIGHT].joykey;
break;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_DOWN].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_LEFT].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[PS3_DEVICE_ID_JOYPAD_RIGHT].joykey;
break;
case DPAD_EMULATION_LSTICK:
g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_LSTICK;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_UP_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_RIGHT_DPAD].joykey;
break;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_UP_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[PS3_DEVICE_ID_LSTICK_RIGHT_DPAD].joykey;
break;
case DPAD_EMULATION_RSTICK:
g_settings.input.dpad_emulation[controller_id] = DPAD_EMULATION_RSTICK;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_UP_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_RIGHT_DPAD].joykey;
break;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_UP].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_UP_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_DOWN].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_DOWN_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_LEFT].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_LEFT_DPAD].joykey;
g_settings.input.binds[controller_id][RETRO_DEVICE_ID_JOYPAD_RIGHT].joykey = platform_keys[PS3_DEVICE_ID_RSTICK_RIGHT_DPAD].joykey;
break;
}
}
@ -443,35 +443,35 @@ static bool ps3_key_pressed(void *data, int key)
case RARCH_STATE_SLOT_MINUS:
return ((state[0] & PS3_GAMEPAD_RSTICK_LEFT_MASK) && (state[0] & PS3_GAMEPAD_R2));
case RARCH_FRAMEADVANCE:
if(g_extern.console.screen.state.frame_advance.enable)
{
g_extern.console.rmenu.state.rmenu.enable = true;
g_extern.console.rmenu.state.ingame_menu.enable = true;
g_extern.console.rmenu.mode = MODE_MENU;
}
return false;
if(g_extern.console.screen.state.frame_advance.enable)
{
g_extern.console.rmenu.state.rmenu.enable = true;
g_extern.console.rmenu.state.ingame_menu.enable = true;
g_extern.console.rmenu.mode = MODE_MENU;
}
return false;
case RARCH_REWIND:
return (state[0] & PS3_GAMEPAD_RSTICK_UP_MASK) && !(state[0] & PS3_GAMEPAD_R2);
case RARCH_QUIT_KEY:
#ifdef HAVE_OPENGL
if(IS_TIMER_EXPIRED(gl))
{
if(IS_TIMER_EXPIRED(gl))
{
uint32_t r3_pressed = state[0] & PS3_GAMEPAD_R3;
uint32_t l3_pressed = state[0] & PS3_GAMEPAD_L3;
bool retval = false;
g_extern.console.rmenu.state.rmenu.enable = (r3_pressed && l3_pressed && IS_TIMER_EXPIRED(gl));
g_extern.console.rmenu.state.ingame_menu.enable = r3_pressed && !l3_pressed;
uint32_t l3_pressed = state[0] & PS3_GAMEPAD_L3;
bool retval = false;
g_extern.console.rmenu.state.rmenu.enable = (r3_pressed && l3_pressed && IS_TIMER_EXPIRED(gl));
g_extern.console.rmenu.state.ingame_menu.enable = r3_pressed && !l3_pressed;
if(g_extern.console.rmenu.state.rmenu.enable || (g_extern.console.rmenu.state.ingame_menu.enable && !g_extern.console.rmenu.state.rmenu.enable))
{
if(g_extern.console.rmenu.state.rmenu.enable || (g_extern.console.rmenu.state.ingame_menu.enable && !g_extern.console.rmenu.state.rmenu.enable))
{
g_extern.console.rmenu.mode = MODE_MENU;
SET_TIMER_EXPIRATION(gl, 30);
retval = g_extern.console.rmenu.state.rmenu.enable;
}
SET_TIMER_EXPIRATION(gl, 30);
retval = g_extern.console.rmenu.state.rmenu.enable;
}
retval = g_extern.console.rmenu.state.ingame_menu.enable ? g_extern.console.rmenu.state.ingame_menu.enable : g_extern.console.rmenu.state.rmenu.enable;
return retval;
}
retval = g_extern.console.rmenu.state.ingame_menu.enable ? g_extern.console.rmenu.state.ingame_menu.enable : g_extern.console.rmenu.state.rmenu.enable;
return retval;
}
#endif
default:
return false;