View Single Post
  #3  
Old 08-26-2014, 11:38 AM
Kevin Chiu Kevin Chiu is offline
WorldViz Team Member
 
Join Date: Feb 2012
Posts: 26
Hi John,

Here is a work around for having the vibration working in Vizard via the Python ctypes library.
Please be aware about the XInput versions which you have and change the line accordingly when loading the Xinput.dll.
For example, if the XInput versions is 9.1.0 then it will become
Code:
ctypes.windll.xinput9_1_0
Here is some information for your reference too.
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Hope this helps.

Best,
Kevin

Code:
import ctypes

# Define necessary structures
class XINPUT_VIBRATION(ctypes.Structure):
    _fields_ = [("wLeftMotorSpeed", ctypes.c_ushort),
                ("wRightMotorSpeed", ctypes.c_ushort)]

xinput = ctypes.windll.xinput1_4  # Load Xinput.dll

# Set up function argument types and return type
XInputSetState = xinput.XInputSetState
XInputSetState.argtypes = [ctypes.c_uint, ctypes.POINTER(XINPUT_VIBRATION)]
XInputSetState.restype = ctypes.c_uint

# The helper function with 3 input arguments:
#   controller id ( 0 for the first controller )
#   left motor vibration scaled from 0 (off) to 1.0 (full on)
#   right motor vibration (also 0 - 1.0)
def set_vibration(controller, left_motor, right_motor):
    vibration = XINPUT_VIBRATION(int(left_motor * 65535), int(right_motor * 65535))
    XInputSetState(controller, ctypes.byref(vibration))


## Example usage
import time
set_vibration(0, 0.5, 0.5)
time.sleep(1)
set_vibration(0, 0, 0)
Reply With Quote