(PS3) Add preliminary analog stick support
This commit is contained in:
parent
abf2079920
commit
ae981ab946
|
@ -69,20 +69,26 @@ typedef struct ps3_input
|
||||||
#endif
|
#endif
|
||||||
} ps3_input_t;
|
} ps3_input_t;
|
||||||
|
|
||||||
|
int16_t analog_state[MAX_PADS][2][2];
|
||||||
|
|
||||||
static void ps3_input_poll(void *data)
|
static void ps3_input_poll(void *data)
|
||||||
{
|
{
|
||||||
CellPadInfo2 pad_info;
|
CellPadInfo2 pad_info;
|
||||||
ps3_input_t *ps3 = (ps3_input_t*)data;
|
ps3_input_t *ps3 = (ps3_input_t*)data;
|
||||||
|
|
||||||
for (unsigned i = 0; i < MAX_PADS; i++)
|
for (unsigned port = 0; port < MAX_PADS; port++)
|
||||||
{
|
{
|
||||||
static CellPadData state_tmp;
|
static CellPadData state_tmp;
|
||||||
cellPadGetData(i, &state_tmp);
|
cellPadGetData(port, &state_tmp);
|
||||||
|
|
||||||
if (state_tmp.len != 0)
|
if (state_tmp.len != 0)
|
||||||
{
|
{
|
||||||
uint64_t *state_cur = &ps3->state[i];
|
uint64_t *state_cur = &ps3->state[port];
|
||||||
*state_cur = 0;
|
*state_cur = 0;
|
||||||
|
analog_state[0][0][0] = analog_state[0][0][1] = analog_state[0][1][0] = analog_state[0][1][1] = 0;
|
||||||
|
analog_state[1][0][0] = analog_state[1][0][1] = analog_state[1][1][0] = analog_state[1][1][1] = 0;
|
||||||
|
analog_state[2][0][0] = analog_state[2][0][1] = analog_state[2][1][0] = analog_state[2][1][1] = 0;
|
||||||
|
analog_state[3][0][0] = analog_state[3][0][1] = analog_state[3][1][0] = analog_state[3][1][1] = 0;
|
||||||
#ifdef __PSL1GHT__
|
#ifdef __PSL1GHT__
|
||||||
*state_cur |= (state_tmp.BTN_LEFT) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0;
|
*state_cur |= (state_tmp.BTN_LEFT) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_LEFT) : 0;
|
||||||
*state_cur |= (state_tmp.BTN_DOWN) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0;
|
*state_cur |= (state_tmp.BTN_DOWN) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_DOWN) : 0;
|
||||||
|
@ -117,6 +123,11 @@ static void ps3_input_poll(void *data)
|
||||||
*state_cur |= (state_tmp.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_L1) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_L) : 0;
|
*state_cur |= (state_tmp.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_L1) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_L) : 0;
|
||||||
*state_cur |= (state_tmp.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_R2) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_R2) : 0;
|
*state_cur |= (state_tmp.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_R2) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_R2) : 0;
|
||||||
*state_cur |= (state_tmp.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_L2) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_L2) : 0;
|
*state_cur |= (state_tmp.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_L2) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_L2) : 0;
|
||||||
|
*state_cur |= (state_tmp.button[CELL_PAD_BTN_OFFSET_DIGITAL2] & CELL_PAD_CTRL_L2) ? (1ULL << RETRO_DEVICE_ID_JOYPAD_L2) : 0;
|
||||||
|
analog_state[port][RETRO_DEVICE_INDEX_ANALOG_LEFT ][RETRO_DEVICE_ID_ANALOG_X] = (int16_t)state_tmp.button[CELL_PAD_BTN_OFFSET_ANALOG_LEFT_X];
|
||||||
|
analog_state[port][RETRO_DEVICE_INDEX_ANALOG_LEFT ][RETRO_DEVICE_ID_ANALOG_Y] = (int16_t)state_tmp.button[CELL_PAD_BTN_OFFSET_ANALOG_LEFT_Y];
|
||||||
|
analog_state[port][RETRO_DEVICE_INDEX_ANALOG_RIGHT][RETRO_DEVICE_ID_ANALOG_X] = (int16_t)state_tmp.button[CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_X];
|
||||||
|
analog_state[port][RETRO_DEVICE_INDEX_ANALOG_RIGHT][RETRO_DEVICE_ID_ANALOG_Y] = (int16_t)state_tmp.button[CELL_PAD_BTN_OFFSET_ANALOG_RIGHT_Y];
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -125,8 +136,7 @@ static void ps3_input_poll(void *data)
|
||||||
uint64_t *lifecycle_state = &g_extern.lifecycle_state;
|
uint64_t *lifecycle_state = &g_extern.lifecycle_state;
|
||||||
|
|
||||||
*lifecycle_state &= ~(
|
*lifecycle_state &= ~(
|
||||||
(1ULL << RARCH_FAST_FORWARD_HOLD_KEY) |
|
(1ULL << RARCH_FAST_FORWARD_HOLD_KEY) | (1ULL << RARCH_LOAD_STATE_KEY) |
|
||||||
(1ULL << RARCH_LOAD_STATE_KEY) |
|
|
||||||
(1ULL << RARCH_SAVE_STATE_KEY) |
|
(1ULL << RARCH_SAVE_STATE_KEY) |
|
||||||
(1ULL << RARCH_STATE_SLOT_PLUS) |
|
(1ULL << RARCH_STATE_SLOT_PLUS) |
|
||||||
(1ULL << RARCH_STATE_SLOT_MINUS) |
|
(1ULL << RARCH_STATE_SLOT_MINUS) |
|
||||||
|
@ -177,20 +187,22 @@ static int16_t ps3_input_state(void *data, const struct retro_keybind **binds,
|
||||||
{
|
{
|
||||||
ps3_input_t *ps3 = (ps3_input_t*)data;
|
ps3_input_t *ps3 = (ps3_input_t*)data;
|
||||||
|
|
||||||
unsigned player = port;
|
uint64_t button = binds[port][id].joykey;
|
||||||
uint64_t button = binds[player][id].joykey;
|
|
||||||
int16_t retval = 0;
|
int16_t retval = 0;
|
||||||
|
|
||||||
if (player < ps3->pads_connected)
|
if (port < ps3->pads_connected)
|
||||||
{
|
{
|
||||||
switch (device)
|
switch (device)
|
||||||
{
|
{
|
||||||
case RETRO_DEVICE_JOYPAD:
|
case RETRO_DEVICE_JOYPAD:
|
||||||
retval = (ps3->state[player] & button) ? 1 : 0;
|
retval = (ps3->state[port] & button) ? 1 : 0;
|
||||||
|
break;
|
||||||
|
case RETRO_DEVICE_ANALOG:
|
||||||
|
retval = analog_state[port][index][id];
|
||||||
break;
|
break;
|
||||||
#ifdef HAVE_MOUSE
|
#ifdef HAVE_MOUSE
|
||||||
case RETRO_DEVICE_MOUSE:
|
case RETRO_DEVICE_MOUSE:
|
||||||
retval = ps3_mouse_device_state(data, player, id);
|
retval = ps3_mouse_device_state(data, port, id);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -306,7 +318,9 @@ static void ps3_input_free_input(void *data)
|
||||||
if (!data)
|
if (!data)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
//cellPadEnd();
|
#ifndef __CELLOS_LV2__
|
||||||
|
cellPadEnd();
|
||||||
|
#endif
|
||||||
#ifdef HAVE_MOUSE
|
#ifdef HAVE_MOUSE
|
||||||
//cellMouseEnd();
|
//cellMouseEnd();
|
||||||
#endif
|
#endif
|
||||||
|
@ -382,6 +396,7 @@ static uint64_t ps3_input_get_capabilities(void *data)
|
||||||
#ifdef HAVE_MOUSE
|
#ifdef HAVE_MOUSE
|
||||||
caps |= (1 << RETRO_DEVICE_MOUSE);
|
caps |= (1 << RETRO_DEVICE_MOUSE);
|
||||||
#endif
|
#endif
|
||||||
|
caps |= (1 << RETRO_DEVICE_ANALOG);
|
||||||
|
|
||||||
return caps;
|
return caps;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue