195 lines
8.4 KiB
Python
195 lines
8.4 KiB
Python
from ctypes import Structure, Union, POINTER, c_int, c_uint, c_float, c_char_p
|
|
from .dll import _bind
|
|
from .stdinc import Uint8, Uint16, Uint32, Sint16, Sint32
|
|
from .joystick import SDL_Joystick
|
|
|
|
__all__ = ["SDL_Haptic", "SDL_HAPTIC_CONSTANT", "SDL_HAPTIC_SINE",
|
|
"SDL_HAPTIC_LEFTRIGHT", "SDL_HAPTIC_TRIANGLE",
|
|
"SDL_HAPTIC_SAWTOOTHUP", "SDL_HAPTIC_SAWTOOTHDOWN",
|
|
"SDL_HAPTIC_RAMP", "SDL_HAPTIC_SPRING", "SDL_HAPTIC_DAMPER",
|
|
"SDL_HAPTIC_INERTIA", "SDL_HAPTIC_FRICTION", "SDL_HAPTIC_CUSTOM",
|
|
"SDL_HAPTIC_GAIN", "SDL_HAPTIC_AUTOCENTER", "SDL_HAPTIC_STATUS",
|
|
"SDL_HAPTIC_PAUSE", "SDL_HAPTIC_POLAR", "SDL_HAPTIC_CARTESIAN",
|
|
"SDL_HAPTIC_SPHERICAL", "SDL_HAPTIC_INFINITY",
|
|
"SDL_HapticDirection", "SDL_HapticConstant", "SDL_HapticPeriodic",
|
|
"SDL_HapticCondition", "SDL_HapticRamp", "SDL_HapticCustom",
|
|
"SDL_HapticLeftRight", "SDL_HapticEffect", "SDL_NumHaptics",
|
|
"SDL_HapticName", "SDL_HapticOpen", "SDL_HapticOpened",
|
|
"SDL_HapticIndex", "SDL_MouseIsHaptic", "SDL_HapticOpenFromMouse",
|
|
"SDL_JoystickIsHaptic", "SDL_HapticOpenFromJoystick",
|
|
"SDL_HapticClose", "SDL_HapticNumEffects",
|
|
"SDL_HapticNumEffectsPlaying", "SDL_HapticQuery",
|
|
"SDL_HapticNumAxes", "SDL_HapticEffectSupported",
|
|
"SDL_HapticNewEffect", "SDL_HapticUpdateEffect",
|
|
"SDL_HapticRunEffect", "SDL_HapticStopEffect",
|
|
"SDL_HapticDestroyEffect", "SDL_HapticGetEffectStatus",
|
|
"SDL_HapticSetGain", "SDL_HapticSetAutocenter", "SDL_HapticPause",
|
|
"SDL_HapticUnpause", "SDL_HapticStopAll",
|
|
"SDL_HapticRumbleSupported", "SDL_HapticRumbleInit",
|
|
"SDL_HapticRumblePlay", "SDL_HapticRumbleStop"
|
|
]
|
|
|
|
class SDL_Haptic(Structure):
|
|
pass
|
|
|
|
SDL_HAPTIC_CONSTANT = 1 << 0
|
|
SDL_HAPTIC_SINE = 1 << 1
|
|
SDL_HAPTIC_LEFTRIGHT = 1 << 2
|
|
SDL_HAPTIC_TRIANGLE = 1 << 3
|
|
SDL_HAPTIC_SAWTOOTHUP = 1 << 4
|
|
SDL_HAPTIC_SAWTOOTHDOWN = 1 << 5
|
|
SDL_HAPTIC_RAMP = 1 << 6
|
|
SDL_HAPTIC_SPRING = 1 << 7
|
|
SDL_HAPTIC_DAMPER = 1 << 8
|
|
SDL_HAPTIC_INERTIA = 1 << 9
|
|
SDL_HAPTIC_FRICTION = 1 << 10
|
|
SDL_HAPTIC_CUSTOM = 1 << 11
|
|
SDL_HAPTIC_GAIN = 1 << 12
|
|
SDL_HAPTIC_AUTOCENTER = 1 << 13
|
|
SDL_HAPTIC_STATUS = 1 << 14
|
|
SDL_HAPTIC_PAUSE = 1 << 15
|
|
SDL_HAPTIC_POLAR = 0
|
|
SDL_HAPTIC_CARTESIAN = 1
|
|
SDL_HAPTIC_SPHERICAL = 2
|
|
SDL_HAPTIC_INFINITY = 4294967295
|
|
|
|
class SDL_HapticDirection(Structure):
|
|
_fields_ = [("type", Uint8), ("dir", (Sint32 * 3))]
|
|
|
|
class SDL_HapticConstant(Structure):
|
|
_fields_ = [("type", Uint16),
|
|
("direction", SDL_HapticDirection),
|
|
("length", Uint32),
|
|
("delay", Uint16),
|
|
("button", Uint16),
|
|
("interval", Uint16),
|
|
("level", Sint16),
|
|
("attack_length", Uint16),
|
|
("attack_level", Uint16),
|
|
("fade_length", Uint16),
|
|
("fade_level", Uint16),
|
|
]
|
|
|
|
|
|
class SDL_HapticPeriodic(Structure):
|
|
_fields_ = [("type", Uint16),
|
|
("direction", SDL_HapticDirection),
|
|
("length", Uint32),
|
|
("delay", Uint16),
|
|
("button", Uint16),
|
|
("interval", Uint16),
|
|
("period", Uint16),
|
|
("magnitude", Sint16),
|
|
("offset", Sint16),
|
|
("phase", Uint16),
|
|
("attack_length", Uint16),
|
|
("attack_level", Uint16),
|
|
("fade_length", Uint16),
|
|
("fade_level", Uint16),
|
|
]
|
|
|
|
|
|
class SDL_HapticCondition(Structure):
|
|
"""A conditionally running effect."""
|
|
_fields_ = [("type", Uint16),
|
|
("direction", SDL_HapticDirection),
|
|
("length", Uint32),
|
|
("delay", Uint16),
|
|
("button", Uint16),
|
|
("interval", Uint16),
|
|
("right_sat", (Uint16 * 3)),
|
|
("left_sat", (Uint16 * 3)),
|
|
("right_coeff", (Sint16 * 3)),
|
|
("left_coeff", (Sint16 * 3)),
|
|
("deadband", (Uint16 * 3)),
|
|
("center", (Sint16 * 3)),
|
|
]
|
|
|
|
|
|
class SDL_HapticRamp(Structure):
|
|
"""A ramp-like effect."""
|
|
_fields_ = [("type", Uint16),
|
|
("direction", SDL_HapticDirection),
|
|
("length", Uint32),
|
|
("delay", Uint16),
|
|
("button", Uint16),
|
|
("interval", Uint16),
|
|
("start", Sint16),
|
|
("end", Sint16),
|
|
("attack_length", Uint16),
|
|
("attack_level", Uint16),
|
|
("fade_length", Uint16),
|
|
("fade_level", Uint16),
|
|
]
|
|
|
|
|
|
class SDL_HapticLeftRight(Structure):
|
|
"""A left-right effect."""
|
|
_fields_ = [("type", Uint16),
|
|
("length", Uint32),
|
|
("large_magnitude", Uint16),
|
|
("small_magnitude", Uint16)
|
|
]
|
|
|
|
|
|
class SDL_HapticCustom(Structure):
|
|
"""A custom effect."""
|
|
_fields_ = [("type", Uint16),
|
|
("direction", SDL_HapticDirection),
|
|
("length", Uint32),
|
|
("delay", Uint16),
|
|
("button", Uint16),
|
|
("interval", Uint16),
|
|
("channels", Uint8),
|
|
("period", Uint16),
|
|
("samples", Uint16),
|
|
("data", POINTER(Uint16)),
|
|
("attack_length", Uint16),
|
|
("attack_level", Uint16),
|
|
("fade_length", Uint16),
|
|
("fade_level", Uint16),
|
|
]
|
|
|
|
|
|
class SDL_HapticEffect(Union):
|
|
"""A generic haptic effect, containing the concrete haptic effect."""
|
|
_fields_ = [("type", Uint16),
|
|
("constant", SDL_HapticConstant),
|
|
("periodic", SDL_HapticPeriodic),
|
|
("condition", SDL_HapticCondition),
|
|
("ramp", SDL_HapticRamp),
|
|
("leftright", SDL_HapticLeftRight),
|
|
("custom", SDL_HapticCustom),
|
|
]
|
|
|
|
SDL_NumHaptics = _bind("SDL_NumHaptics", None, c_int)
|
|
SDL_HapticName = _bind("SDL_HapticName", [c_int], c_char_p)
|
|
SDL_HapticOpen = _bind("SDL_HapticOpen", [c_int], POINTER(SDL_Haptic))
|
|
SDL_HapticOpened = _bind("SDL_HapticOpened", [c_int], c_int)
|
|
SDL_HapticIndex = _bind("SDL_HapticIndex", [POINTER(SDL_Haptic)], c_int)
|
|
SDL_MouseIsHaptic = _bind("SDL_MouseIsHaptic", None, c_int)
|
|
SDL_HapticOpenFromMouse = _bind("SDL_HapticOpenFromMouse", None, POINTER(SDL_Haptic))
|
|
SDL_JoystickIsHaptic = _bind("SDL_JoystickIsHaptic", [POINTER(SDL_Joystick)], c_int)
|
|
SDL_HapticOpenFromJoystick = _bind("SDL_HapticOpenFromJoystick", [POINTER(SDL_Joystick)], POINTER(SDL_Haptic))
|
|
SDL_HapticClose = _bind("SDL_HapticClose", [POINTER(SDL_Haptic)])
|
|
SDL_HapticNumEffects = _bind("SDL_HapticNumEffects", [POINTER(SDL_Haptic)], c_int)
|
|
SDL_HapticNumEffectsPlaying = _bind("SDL_HapticNumEffectsPlaying", [POINTER(SDL_Haptic)], c_int)
|
|
SDL_HapticQuery = _bind("SDL_HapticQuery", [POINTER(SDL_Haptic)], c_uint)
|
|
SDL_HapticNumAxes = _bind("SDL_HapticNumAxes", [POINTER(SDL_Haptic)], c_int)
|
|
SDL_HapticEffectSupported = _bind("SDL_HapticEffectSupported", [POINTER(SDL_Haptic), POINTER(SDL_HapticEffect)], c_int)
|
|
SDL_HapticNewEffect = _bind("SDL_HapticNewEffect", [POINTER(SDL_Haptic), POINTER(SDL_HapticEffect)], c_int)
|
|
SDL_HapticUpdateEffect = _bind("SDL_HapticUpdateEffect", [POINTER(SDL_Haptic), c_int, POINTER(SDL_HapticEffect)], c_int)
|
|
SDL_HapticRunEffect = _bind("SDL_HapticRunEffect", [POINTER(SDL_Haptic), c_int, Uint32], c_int)
|
|
SDL_HapticStopEffect = _bind("SDL_HapticStopEffect", [POINTER(SDL_Haptic), c_int], c_int)
|
|
SDL_HapticDestroyEffect = _bind("SDL_HapticDestroyEffect", [POINTER(SDL_Haptic), c_int])
|
|
SDL_HapticGetEffectStatus = _bind("SDL_HapticGetEffectStatus", [POINTER(SDL_Haptic), c_int], c_int)
|
|
SDL_HapticSetGain = _bind("SDL_HapticSetGain", [POINTER(SDL_Haptic), c_int], c_int)
|
|
SDL_HapticSetAutocenter = _bind("SDL_HapticSetAutocenter", [POINTER(SDL_Haptic), c_int], c_int)
|
|
SDL_HapticPause = _bind("SDL_HapticPause", [POINTER(SDL_Haptic)], c_int)
|
|
SDL_HapticUnpause = _bind("SDL_HapticUnpause", [POINTER(SDL_Haptic)], c_int)
|
|
SDL_HapticStopAll = _bind("SDL_HapticStopAll", [POINTER(SDL_Haptic)], c_int)
|
|
SDL_HapticRumbleSupported = _bind("SDL_HapticRumbleSupported", [POINTER(SDL_Haptic)], c_int)
|
|
SDL_HapticRumbleInit = _bind("SDL_HapticRumbleInit", [POINTER(SDL_Haptic)], c_int)
|
|
SDL_HapticRumblePlay = _bind("SDL_HapticRumblePlay", [POINTER(SDL_Haptic), c_float, Uint32], c_int)
|
|
SDL_HapticRumbleStop = _bind("SDL_HapticRumbleStop", [POINTER(SDL_Haptic)], c_int)
|