I'm working to extend Wine's RawInput implementation to support gamepads/controllers (and possibly joysticks, or any non-keyboard/mouse HID device).
I found this on the wine-patches list:
Vincas Miliƫnas wrote:
A comment about going beyond mouse/keyboard for raw input:> Other
devices then mouse&keyboard produce undocumented blobs of bytes;> to interpret them, functions from the hid.dll are used. Currently they> are unimplemented stubs in WINE as well as not the problem I am solving.> There is a recent article about this subject - Using the Raw Input API> to Process Joystick Input -> http://www.codeproject.com/KB/game/RawInputJoystick.aspx
Does this imply then, that if one was to add support for "raw" rawinput (RIM_TYPEHID device type) it could be used in conjunction with a native hid.dll and software that required RIM_TYPEHID input (for e.g. game controllers in games) would start working?
Also, could one create an adaptation from some joystick input libraries (evdev/x11) and make it conform to the API in the CodeProject example, making modifications similar to Henri Verbeet's and have built-in support for this?
(Henri Verbeet's rawinput contributions: http://source.winehq.org/git/wine.git/?a=search&st=commit&s=rawinput)
I see that Wine already has support for joysticks in some other fashion (the gamepad I'm working with shows up in the `wine control` Game Controller testing interface), and I bet it's a good idea to leverage that adaptation (those adaptations...) than to start adding my own.
Any direction here would be appreciated. I think I understand the separation between the wineserver (mainly server/queue.c) and the dlls (dlls/user32/*), but I see that there are other "dlls" that don't use (or don't appear to use, given my probably incorrect understanding) wineserver for their adaptation, and instead talk directly with the Linux libs to do their work (I'm assuming).
Any help is welcome, as it means my patches are more likely to make it upstream and benefit others. I'm wondering if there's an architecture diagram/doc somewhere to help me understand how the system works.
Thanks,
-- Nate