(Android) Implement the joypad interface - but don't hook it up
just yet
This commit is contained in:
parent
9da8dc3409
commit
d33f4b8363
|
@ -75,6 +75,8 @@ typedef struct android_input
|
||||||
ASensorEventQueue* sensorEventQueue;
|
ASensorEventQueue* sensorEventQueue;
|
||||||
} android_input_t;
|
} android_input_t;
|
||||||
|
|
||||||
|
extern const rarch_joypad_driver_t android_joypad;
|
||||||
|
|
||||||
void (*engine_handle_dpad)(void *data, AInputEvent*, size_t, int, char*, size_t, int, bool, unsigned);
|
void (*engine_handle_dpad)(void *data, AInputEvent*, size_t, int, char*, size_t, int, bool, unsigned);
|
||||||
static bool android_input_set_sensor_state(void *data, unsigned port, enum retro_sensor_action action, unsigned event_rate);
|
static bool android_input_set_sensor_state(void *data, unsigned port, enum retro_sensor_action action, unsigned event_rate);
|
||||||
|
|
||||||
|
@ -1974,8 +1976,15 @@ static int16_t android_input_state(void *data, const struct retro_keybind **bind
|
||||||
switch (device)
|
switch (device)
|
||||||
{
|
{
|
||||||
case RETRO_DEVICE_JOYPAD:
|
case RETRO_DEVICE_JOYPAD:
|
||||||
|
#if 0
|
||||||
|
return input_joypad_pressed(&android_joypad, port, binds[port], id);
|
||||||
|
#else
|
||||||
return ((android->pad_state[port] & binds[port][id].joykey) && (port < android->pads_connected));
|
return ((android->pad_state[port] & binds[port][id].joykey) && (port < android->pads_connected));
|
||||||
|
#endif
|
||||||
case RETRO_DEVICE_ANALOG:
|
case RETRO_DEVICE_ANALOG:
|
||||||
|
#if 0
|
||||||
|
return input_joypad_analog(&android_joypad, port, index, id, binds[port]);
|
||||||
|
#else
|
||||||
if (port >= android->pads_connected)
|
if (port >= android->pads_connected)
|
||||||
return 0;
|
return 0;
|
||||||
switch ((index << 1) | id)
|
switch ((index << 1) | id)
|
||||||
|
@ -1989,6 +1998,8 @@ static int16_t android_input_state(void *data, const struct retro_keybind **bind
|
||||||
case (RETRO_DEVICE_INDEX_ANALOG_RIGHT << 1) | RETRO_DEVICE_ID_ANALOG_Y:
|
case (RETRO_DEVICE_INDEX_ANALOG_RIGHT << 1) | RETRO_DEVICE_ID_ANALOG_Y:
|
||||||
return android->analog_state[port][1][1];
|
return android->analog_state[port][1][1];
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case RETRO_DEVICE_POINTER:
|
case RETRO_DEVICE_POINTER:
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
|
@ -2001,6 +2012,7 @@ static int16_t android_input_state(void *data, const struct retro_keybind **bind
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
case RARCH_DEVICE_POINTER_SCREEN:
|
case RARCH_DEVICE_POINTER_SCREEN:
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
|
@ -2013,6 +2025,7 @@ static int16_t android_input_state(void *data, const struct retro_keybind **bind
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -2115,6 +2128,11 @@ unsigned android_input_devices_size(void *data)
|
||||||
return DEVICE_LAST;
|
return DEVICE_LAST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const rarch_joypad_driver_t *android_input_get_joypad_driver(void *data)
|
||||||
|
{
|
||||||
|
return &android_joypad;
|
||||||
|
}
|
||||||
|
|
||||||
const input_driver_t input_android = {
|
const input_driver_t input_android = {
|
||||||
android_input_init,
|
android_input_init,
|
||||||
android_input_poll,
|
android_input_poll,
|
||||||
|
@ -2127,4 +2145,93 @@ const input_driver_t input_android = {
|
||||||
android_input_get_capabilities,
|
android_input_get_capabilities,
|
||||||
android_input_devices_size,
|
android_input_devices_size,
|
||||||
"android_input",
|
"android_input",
|
||||||
|
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
android_input_get_joypad_driver,
|
||||||
|
};
|
||||||
|
|
||||||
|
static bool android_joypad_init(void)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool android_joypad_button(unsigned port_num, uint16_t joykey)
|
||||||
|
{
|
||||||
|
android_input_t *android = (android_input_t*)driver.input_data;
|
||||||
|
|
||||||
|
if (!android || port_num >= MAX_PADS)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return android->pad_state[port_num] & (1ULL << joykey);
|
||||||
|
}
|
||||||
|
|
||||||
|
static int16_t android_joypad_axis(unsigned port_num, uint32_t joyaxis)
|
||||||
|
{
|
||||||
|
android_input_t *android = (android_input_t*)driver.input_data;
|
||||||
|
if (!android || joyaxis == AXIS_NONE || port_num >= MAX_PADS)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
int val = 0;
|
||||||
|
|
||||||
|
int axis = -1;
|
||||||
|
bool is_neg = false;
|
||||||
|
bool is_pos = false;
|
||||||
|
|
||||||
|
if (AXIS_NEG_GET(joyaxis) < 4)
|
||||||
|
{
|
||||||
|
axis = AXIS_NEG_GET(joyaxis);
|
||||||
|
is_neg = true;
|
||||||
|
}
|
||||||
|
else if (AXIS_POS_GET(joyaxis) < 4)
|
||||||
|
{
|
||||||
|
axis = AXIS_POS_GET(joyaxis);
|
||||||
|
is_pos = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (axis)
|
||||||
|
{
|
||||||
|
case 0: val = android->analog_state[port_num][0][0]; break;
|
||||||
|
case 1: val = android->analog_state[port_num][0][1]; break;
|
||||||
|
case 2: val = android->analog_state[port_num][1][0]; break;
|
||||||
|
case 3: val = android->analog_state[port_num][1][1]; break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_neg && val > 0)
|
||||||
|
val = 0;
|
||||||
|
else if (is_pos && val < 0)
|
||||||
|
val = 0;
|
||||||
|
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void android_joypad_poll(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
static bool android_joypad_query_pad(unsigned pad)
|
||||||
|
{
|
||||||
|
android_input_t *android = (android_input_t*)driver.input_data;
|
||||||
|
return (android && pad < MAX_PLAYERS && android->pad_state[pad]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *android_joypad_name(unsigned pad)
|
||||||
|
{
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void android_joypad_destroy(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
const rarch_joypad_driver_t android_joypad = {
|
||||||
|
android_joypad_init,
|
||||||
|
android_joypad_query_pad,
|
||||||
|
android_joypad_destroy,
|
||||||
|
android_joypad_button,
|
||||||
|
android_joypad_axis,
|
||||||
|
android_joypad_poll,
|
||||||
|
NULL,
|
||||||
|
android_joypad_name,
|
||||||
|
"android",
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue