void ESInput::Refresh () { cellPadGetInfo2(&PadInfo); if(!(PadInfo.system_info & CELL_PAD_INFO_INTERCEPTED)) { for(int p = 0; p != PadCount(); p ++) { CellPadData newstate; cellPadGetData(p, &newstate); if(newstate.len != 0) { CurrentState[p] = newstate; for(int i = 0; i != BUTTONS - 8; i ++) { ESInputHelp::RefreshButton(CurrentState[p].button[ButtonIndex[i][0]] & ButtonIndex[i][1], HeldState[p][i], SingleState[p][i]); } for(int i = 0; i != 4; i ++) { ESInputHelp::RefreshButton(GetAxis(0, i) < -0x40, HeldState[p][16 + i * 2 + 0], SingleState[p][16 + i * 2 + 0]); ESInputHelp::RefreshButton(GetAxis(0, i) > 0x40, HeldState[p][16 + i * 2 + 1], SingleState[p][16 + i * 2 + 1]); } } } //TODO: Support rumble for more than 1 controller CellPadActParam param = {Small & 1, Large & 0xFF}; cellPadSetActDirect(0, ¶m); } }
static bool ps3_input_set_rumble(void *data, unsigned port, enum retro_rumble_effect effect, uint16_t strength) { CellPadActParam params; switch (effect) { case RETRO_RUMBLE_WEAK: if (strength > 1) strength = 1; params.motor[0] = strength; break; case RETRO_RUMBLE_STRONG: if (strength > 255) strength = 255; params.motor[1] = strength; } cellPadSetActDirect(port, ¶ms); return true; }