I have noticed a lot of question regarding how to access the vibration controls of an Xbox controller connected to the driver station.
So I started investigating and found LabVIEW can use DLLs, and remembered that Xbox controllers use the xinput DLL to control this feature of the controllers.
This is the function definition of XInputSetState in the Xinput DLL found on most, if not all Windows computers. I am using the Xinput9_1_0.dll found in C:\Windows\System32. If you do not have this DLL, install the latest directx available.
dwUserIndex is the controller index of the controller you want to use, you can identify the number by seeing which “player” light is lit on the controller.
pVibration is a struct in C++ but a cluster in the LabVIEW code attached. The vibration value is from 0 to 65536, higher means more vibration.
The attached code is a LabVIEW library that you place in the user.lib directory of your LabVIEW install. For example mine is
C:\Program Files (x86)\National Instruments\LabVIEW 2013\user.lib
Unzip the folder Xinput9_1_0 to that directory and open up LabVIEW with either a new VI or your current Dashboard Project. The example pictures below is a new, default Dashboard Project.
http://i1294.photobucket.com/albums/b620/D_MAGE59663/Screenshot2014-04-15144248_zps5e425c18.png
- Start by dragging the XinputSetState VI to you block diagram.
- Right click on the pVibration terminal, go to create, then click constant
- delete the wire branch connecting the constant to XInputSetState
- create a bundle by name and place it on the diagram
- connect the cluster constant to the bundle by name
- create controls, constants, or what ever to the input terminals of wLeftMotorSpeed or wRightMotorSpeed
Left Motor is the ‘rough’ vibration while the Right Motor is the ‘smooth’ vbration - Run the project and give it a value between 0 and 65536
- Your controller is Vibrating!
Here is a small video demonstrating the library (Note the controller in the video is wireless, this library will work just the same with wired controllers): https://www.dropbox.com/s/swrerlsmomyafrv/VID_20140415_141309.mp4
Remember to set the vibration value to 0 before exiting, or your controller will vibrate until you do set it!
The controller will be pulling power from your driver station’s USB hub. Be sure it does not go over the limit for your hub or your may lose connectivity to other devices connected to the same hub.
This method of interfacing with the XInput DLL should transfer to the SmartDashboard as well. If anyone accomplishes this, send me a private message with instructions and I will update the thread.