Universal Gamepad Drivers
I have a few USB game controllers that are from "no-name" manufacturers that didn't provide drivers for the device. Currently they run under generic drivers in Windows, but the buttons don't map to the correct IDs and some buttons don't seem to work at all. Under Android, I was able to fully map the controller with keylayout files, but it doesn't seem so simple in Windows. Any help with creating a simple HID driver that maps a controller's inputs to native controller inputs the way it works in Android/Linux?
Universal Gamepad Drivers
You need to get USB working, and then modprobe your gamepad driver, which is usbhid, as well as joydev. If you use a usb mouse or keyboard, usbhid will be loaded already and you just have to load the joydev module.
Go to -tester.com/. Currently, testing vibration and producing a visual of the gamepad is supported in Chromium but not Firefox. Additionally, as of version 107.0.5304.121-1, Chromium can read Joystick devices but not evdev.
this maps the EV_ABS event with id of 40 and 41 (use xboxdrv with --evdev-debug to see the events registered), which is the normally inaccessible "mouse pointer" on the throttle, to first gamepad joystick and throttles to second joystick, it also clamps the top and lower ranges as they not always register fully.
this maps the 3 joystick axes to gamepad axes and changes the calibration (min value, centre value, max value), dead zones (negative side, positive side, flag to turn smoothing) and finally change of response curve to a more flat one in the middle.
If you want to play games with your gamepad, you might want to disable its joystick control over mouse cursor. To do this, edit /etc/X11/xorg.conf.d/51-joystick.conf (create if it does not exists) so that it looks like this:
Gamepads can be remapped for SDL2 applications using the SDL_GAMECONTROLLERCONFIG environment variable. For each line, it includes the gamepad's GUID, a name, button / axis mappings and a platform. The controller's GUID can be retreived by installing sdl2-jstest-gitAUR and then running sdl2-jstest --list.
While most gamepads, especially USB based ones should just work, some may require (or give better results) if you use alternative drivers. If it does not work the first time, do not give up, and read the following sections thoroughly!
By default, SDL2 maps buttons on Nintendo controllers according to the gamepad's label instead of the button's position. This is enabled by the SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS setting, which defaults to 1 for controllers known to use the Nintendo button layout, and 0 for other controllers. This behavior can be overridden for all controllers by setting the SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS environment variable. For example, if Nintendo's conception of A/B and X/Y is undesirable, set SDL_HINT_GAMECONTROLLER_USE_BUTTON_LABELS=0.
If you want to use one of the widely available Bluetooth gamepads, such as iPEGA-9017s designed mostly for Android and iOS devices you would need xboxdrvAUR, bluez, bluez-plugins, and bluez-utils. You should connect it in gamepad mode (if there are different modes, choose the gamepad one). Technically it is ready to be used, but in most cases games would not recognize it, and you would have to map it individually for all application. The best way to simplify it and make it work with all applications is to mimic Microsoft X360 controller with xboxdrvAUR.Once connected you can create a udev rule to give it a persistent name, that would come in handy when setting it up.
The Steam client will recognize the controller and provide keyboard/mouse/gamepad emulation while Steam is running. The in-game Steam overlay needs to be enabled and working in order for gamepad emulation to work. You may need to run udevadm trigger with root privileges or plug the dongle out and in again, if the controller does not work immediately after installing and running Steam. If all else fails, try restarting the computer while the dongle is plugged in.
xboxdrv can be used to make any controller register as an Xbox 360 controller with the --mimic-xpad switch. This may be desirable for games that support Xbox 360 controllers out of the box, but have trouble detecting or working with other gamepads.
Any gamepad device, regardless of whether it is over USB or Bluetooth, is handled by the "input" subsystem of the kernel, corresponding with /dev/input. It's also common for udev rules to target the "hidraw" kernel module. Combining these, we can understand udev's handling of these devices by inspecting the configuration shipped by packages:
Sometimes USB gamepad can be recognized as HID mouse (only in X, it is still being installed as /dev/input/js0 as well). Known issue is cursor being moved by the joystick, or escaping to en edge of a screen right after plugin. If your application can detect gamepad by itself, you can remove the xf86-input-joystickAUR package.
If you are using a generic non-widely used gamepad you may encounter issues getting the gamepad recognized in games based on SDL. Since 14 May 2015, FNA supports dropping a gamecontrollerdb.txt into the executable folder of the game, for example the SDL_GameControllerDB.
Some software, Steam for example, will only recognize the first gamepad it encounters. Due to a bug in the driver for Microsoft wireless periphery devices this can in fact be the bluetooth dongle. If you find you have a /dev/input/js* and /dev/input/event* belonging to you keyboard's bluetooth transceiver you can get automatically get rid of it by creating according udev rules:
Redgear Smartline Gamepad: Best gamepad which supports both X-Input and D-Input. The best part is that this gamepad support all the latest PC games and you no need to download and install any third party application to enable vibration.
Quantum PC Gamepad: This is the cheapest gamepad you can get in any online retailing website and the best part is that this gamepad vibrates too. But you have to install a third-party driver (speedlink strike gamepad controller driver) which I have already shared with you in this post. Here, is the review:
Enter PC Gamepad: This is another budget PC gamepad which supports vibration and the good thing about this gamepad is, it is compatible with all the latest games available in the marker. Here is the review.
HID standard is a standard from the Universal Serial Bus (USB) committee originally proposed by Microsoft to generalize protocols for input devices. It consists of a byte-code description language and can express gamepads, mice, joysticks, throttle and rudder controls, and multi-axis controllers. Because this standard is so generalized, you might have difficulty writing software that consumes input from arbitrary devices. Therefore, for the game-centric DirectInput API, we developed a specific sub-mapping of types to encourage hardware manufactures to support through their drivers.
This class contains the necessary drivers for the USB Gamepad and must be called at the beginning of the program before using any other class functions. The first USB Gamepad connected to the Fusion has a pad_num equal to 0. Every additional USB Gamepad connected after increases the pad_num by 1.
No clue about USB joysticks or PCI game cards in DOS, but for a classic DB-15 that connects to your soundcard's game port you don't need to do anything special. Just make sure that the port is enabled through your soundcard's configuration software. After that no drivers are needed, the games will just use it.
These usb drivers work perfect with all my 4 usb logitech gamepad and logitech dual analog controller on my Pentium 233 mmx and pure dos games on dos 6.22. I played several dos games with this driver. Even 2 players games with 2 controllers work perfect too like Bubble Bobble and the Simpsons arcade game. If needed go to Bret Johnson forum and ask him for help, he will help you. I tested more than 30 dos games. The only ones that dont work are a few dos4gw protected games like Tomb Raider 1, Jazz Jackrabbit and a few others. 80%-90% of dos games i tested with this usb driver work perfect.
update turns out one of my joysticks was broken. MY other two gamepads worked without drivers. However it would have been nice if it was possible to use some sort of USB to a joystick port adapter or a way to use USB joysticks in general in dos.
You can download and install your drivers by using either Free or Pro version of Driver Easy. But with the Pro version it takes only 2 clicks (and you get full support and a 30-day money back guarantee):
Build your own gaming device, whether it be a flight panel, button box, pedals, joystick, robot controls and more......the list is limited by your imagination.Also suitable for converting gameport devices or connecting real life controls to turn them into a USB device suitable to be used by almost any simulation or game software without the need of installing any drivers.
If the controller does not appear under Nefarius HID Devices or if this section doesn't exist at all, you probably have another driver taking priority over DsHidMini. To solve this you need to remove those rogue drivers. See how to do so on the removing conflicting drivers section.
Works with all PC games that support gamepad input SpecificationsInterface: USB 2.0 Dimensions: 165 x 110 x 80 mm Net weight: 225 gUSB cable length: 1.8 m System requirementsWindows Windows 7/8/10A free USB port Manuals Helpdesk Emailhelpdesk@gembird.nl (Monday to Friday from 9:00 AM to 5:00 PM (NL time) excluding holidays) manual JPD-UDV-01 User Manual (2254 kb) Drivers Helpdesk Emailhelpdesk@gembird.nl (Monday to Friday from 9:00 AM to 5:00 PM (NL time) excluding holidays) driver Windows drivers/software (5411 kb) Certificates CE Certificate (pdf file) Package contentsGamepadUser ManualSoftware CDPacking detailsQ'ty in crtn, pcs60Crtn volume, CUM0.149226Crtn weight, kgs17.23Individual package size LxWxH:260x180x85 mmCarton size LxWxH:660x380x595 mmCountry of originCNBarcode8716309087636Customs code8522900090PackagingblisterTrade Mark Product information sheet