/************************************************************************** * joyGetDevCapsW [WINMM.@] */ MMRESULT WINAPI DECLSPEC_HOTPATCH joyGetDevCapsW(UINT_PTR wID, LPJOYCAPSW lpCaps, UINT wSize) { if (wID >= MAXJOYSTICK) return JOYERR_PARMS; if (!JOY_LoadDriver(wID)) return MMSYSERR_NODRIVER; lpCaps->wPeriodMin = JOY_PERIOD_MIN; /* FIXME */ lpCaps->wPeriodMax = JOY_PERIOD_MAX; /* FIXME (same as MS Joystick Driver) */ return SendDriverMessage(JOY_Sticks[wID].hDriver, JDD_GETDEVCAPS, (LPARAM)lpCaps, wSize); }
/************************************************************************** * joyGetNumDevs [WINMM.@] */ UINT WINAPI DECLSPEC_HOTPATCH joyGetNumDevs(void) { UINT ret = 0; int i; for (i = 0; i < MAXJOYSTICK; i++) { if (JOY_LoadDriver(i)) { ret += SendDriverMessage(JOY_Sticks[i].hDriver, JDD_GETNUMDEVS, 0, 0); } } return ret; }
/************************************************************************** * joyReleaseCapture [WINMM.@] */ MMRESULT WINAPI joyReleaseCapture(UINT wID) { TRACE("(%04X);\n", wID); if (wID >= MAXJOYSTICK) return JOYERR_PARMS; if (!JOY_LoadDriver(wID)) return MMSYSERR_NODRIVER; if (!JOY_Sticks[wID].hCapture) return JOYERR_NOCANDO; KillTimer(JOY_Sticks[wID].hCapture, JOY_Sticks[wID].wTimer); JOY_Sticks[wID].hCapture = 0; JOY_Sticks[wID].wTimer = 0; return JOYERR_NOERROR; }
/************************************************************************** * joyGetPos [WINMM.@] */ MMRESULT WINAPI joyGetPos(UINT wID, LPJOYINFO lpInfo) { TRACE("(%d, %p);\n", wID, lpInfo); if (wID >= MAXJOYSTICK) return JOYERR_PARMS; if (!JOY_LoadDriver(wID)) return MMSYSERR_NODRIVER; lpInfo->wXpos = 0; lpInfo->wYpos = 0; lpInfo->wZpos = 0; lpInfo->wButtons = 0; return SendDriverMessage(JOY_Sticks[wID].hDriver, JDD_GETPOS, (LPARAM)lpInfo, 0); }
/************************************************************************** * joyReleaseCapture [WINMM.@] */ MMRESULT WINAPI joyReleaseCapture(UINT wID) { TRACE("(%04X);\n", wID); if (wID >= MAXJOYSTICK) return JOYERR_PARMS; if (!JOY_LoadDriver(wID)) return MMSYSERR_NODRIVER; if (JOY_Sticks[wID].hCapture) { KillTimer(JOY_Sticks[wID].hCapture, JOY_Sticks[wID].wTimer); JOY_Sticks[wID].hCapture = 0; JOY_Sticks[wID].wTimer = 0; } else TRACE("Joystick is not captured, ignoring request.\n"); return JOYERR_NOERROR; }
/************************************************************************** * joyGetPosEx [WINMM.@] */ MMRESULT WINAPI DECLSPEC_HOTPATCH joyGetPosEx(UINT wID, LPJOYINFOEX lpInfo) { TRACE("(%d, %p);\n", wID, lpInfo); if (wID >= MAXJOYSTICK) return JOYERR_PARMS; if (!JOY_LoadDriver(wID)) return MMSYSERR_NODRIVER; lpInfo->dwXpos = 0; lpInfo->dwYpos = 0; lpInfo->dwZpos = 0; lpInfo->dwRpos = 0; lpInfo->dwUpos = 0; lpInfo->dwVpos = 0; lpInfo->dwButtons = 0; lpInfo->dwButtonNumber = 0; lpInfo->dwPOV = 0; lpInfo->dwReserved1 = 0; lpInfo->dwReserved2 = 0; return SendDriverMessage(JOY_Sticks[wID].hDriver, JDD_GETPOSEX, (LPARAM)lpInfo, 0); }
/************************************************************************** * joySetCapture [WINMM.@] */ MMRESULT WINAPI joySetCapture(HWND hWnd, UINT wID, UINT wPeriod, BOOL bChanged) { TRACE("(%p, %04X, %d, %d);\n", hWnd, wID, wPeriod, bChanged); if (wID >= MAXJOYSTICK || hWnd == 0) return JOYERR_PARMS; if (wPeriod<JOY_PERIOD_MIN || wPeriod>JOY_PERIOD_MAX) return JOYERR_PARMS; if (!JOY_LoadDriver(wID)) return MMSYSERR_NODRIVER; if (JOY_Sticks[wID].hCapture || !IsWindow(hWnd)) return JOYERR_NOCANDO; /* FIXME: what should be returned ? */ if (joyGetPos(wID, &JOY_Sticks[wID].ji) != JOYERR_NOERROR) return JOYERR_UNPLUGGED; if ((JOY_Sticks[wID].wTimer = SetTimer(hWnd, 0, wPeriod, JOY_Timer)) == 0) return JOYERR_NOCANDO; JOY_Sticks[wID].hCapture = hWnd; JOY_Sticks[wID].bChanged = bChanged; return JOYERR_NOERROR; }