void IN_StopRumble (void) { SceCtrlActuator handle; handle.small = 0; handle.large = 0; sceCtrlSetActuator(1, &handle); rumble_tick = 0; }
void IN_StartRumble (void) { if (!pstv_rumble.value) return; SceCtrlActuator handle; handle.small = 100; handle.large = 100; sceCtrlSetActuator(1, &handle); rumble_tick = sceKernelGetProcessTimeWide(); }
static int lua_rumble(lua_State *L) { if (lua_gettop(L) != 3) return luaL_error(L, "wrong number of arguments."); int port = luaL_checkinteger(L, 1); uint8_t int_small = luaL_checkinteger(L, 2); uint8_t int_large = luaL_checkinteger(L, 3); switch (port){ case 0: case 1: pad1.small = int_small; pad1.large = int_large; sceCtrlSetActuator(1, &pad1); break; case 2: pad2.small = int_small; pad2.large = int_large; sceCtrlSetActuator(2, &pad2); break; default: return luaL_error(L, "wrong port number."); break; } return 0; }
static void _setRumble(struct mRumble* source, int enable) { struct mSceRumble* rumble = (struct mSceRumble*) source; rumble->current += enable; if (CircleBufferSize(&rumble->history) == RUMBLE_PWM) { int8_t oldLevel; CircleBufferRead8(&rumble->history, &oldLevel); rumble->current -= oldLevel; } CircleBufferWrite8(&rumble->history, enable); int small = (rumble->current << 21) / 65793; int big = ((rumble->current * rumble->current) << 18) / 65793; struct SceCtrlActuator state = { small, big }; sceCtrlSetActuator(1, &state); }