1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
use joystick::SDL_Joystick; #[cfg(feature = "no_std")] use core::prelude::*; use libc::{c_int, c_uint, c_char, c_float, c_void, int16_t, int32_t, uint8_t, uint16_t, uint32_t}; pub const SDL_HAPTIC_CONSTANT: uint16_t = 1 << 0; pub const SDL_HAPTIC_SINE: uint16_t = 1 << 1; pub const SDL_HAPTIC_LEFTRIGHT: uint16_t = 1 << 2; pub const SDL_HAPTIC_TRIANGLE: uint16_t = 1 << 3; pub const SDL_HAPTIC_SAWTOOTHUP: uint16_t = 1 << 4; pub const SDL_HAPTIC_SAWTOOTHDOWN: uint16_t = 1 << 5; pub const SDL_HAPTIC_RAMP: uint16_t = 1 << 6; pub const SDL_HAPTIC_SPRING: uint16_t = 1 << 7; pub const SDL_HAPTIC_DAMPER: uint16_t = 1 << 8; pub const SDL_HAPTIC_INERTIA: uint16_t = 1 << 9; pub const SDL_HAPTIC_FRICTION: uint16_t = 1 << 10; pub const SDL_HAPTIC_CUSTOM: uint16_t = 1 << 11; pub const SDL_HAPTIC_GAIN: uint16_t = 1 << 12; pub const SDL_HAPTIC_AUTOCENTER: uint16_t = 1 << 13; pub const SDL_HAPTIC_STATUS: uint16_t = 1 << 14; pub const SDL_HAPTIC_PAUSE: uint16_t = 1 << 15; pub type SDL_Haptic = c_void; #[derive(Copy, Clone)] #[repr(C)] pub struct SDL_HapticDirection { pub type_: uint8_t, pub dir: [int32_t; 3], } #[derive(Copy, Clone)] #[repr(C)] pub struct SDL_HapticConstant { pub type_: uint16_t, pub direction: SDL_HapticDirection, pub length: uint32_t, pub delay: uint16_t, pub button: uint16_t, pub interval: uint16_t, pub level: int16_t, pub attack_length: uint16_t, pub attack_level: uint16_t, pub fade_length: uint16_t, pub fade_level: uint16_t, } #[derive(Copy, Clone)] #[repr(C)] pub struct SDL_HapticPeriodic { pub type_: uint16_t, pub direction: SDL_HapticDirection, pub length: uint32_t, pub delay: uint16_t, pub button: uint16_t, pub interval: uint16_t, pub period: uint16_t, pub magnitude: int16_t, pub offset: int16_t, pub phase: uint16_t, pub attack_length: uint16_t, pub attack_level: uint16_t, pub fade_length: uint16_t, pub fade_level: uint16_t, } #[derive(Copy, Clone)] #[repr(C)] pub struct SDL_HapticCondition { pub type_: uint16_t, pub direction: SDL_HapticDirection, pub length: uint32_t, pub delay: uint16_t, pub button: uint16_t, pub interval: uint16_t, pub right_sat: [uint16_t; 3], pub left_sat: [uint16_t; 3], pub right_coeff: [int16_t; 3], pub left_coeff: [int16_t; 3], pub deadband: [uint16_t; 3], pub center: [int16_t; 3], } #[derive(Copy, Clone)] #[repr(C)] pub struct SDL_HapticRamp { pub type_: uint16_t, pub length: uint32_t, pub delay: uint16_t, pub button: uint16_t, pub interval: uint16_t, pub start: int16_t, pub end: int16_t, pub attack_length: uint16_t, pub attack_level: uint16_t, pub fade_length: uint16_t, pub fade_level: uint16_t, } #[derive(Copy, Clone)] #[repr(C)] pub struct SDL_HapticLeftRight { pub type_: uint16_t, pub length: uint32_t, pub large_magnitude: uint16_t, pub small_magnitude: uint16_t, } #[allow(missing_copy_implementations)] #[repr(C)] pub struct SDL_HapticCustom { pub type_: uint16_t, pub direction: SDL_HapticDirection, pub length: uint32_t, pub delay: uint16_t, pub button: uint16_t, pub interval: uint16_t, pub channels: uint8_t, pub period: uint16_t, pub samples: uint16_t, pub data: *const uint16_t, pub attack_length: uint16_t, pub attack_level: uint16_t, pub fade_length: uint16_t, pub fade_level: uint16_t, } #[allow(missing_copy_implementations)] #[repr(C)] pub struct SDL_HapticEffect { pub data: [uint8_t; 72], } impl SDL_HapticEffect { pub fn type_(&self) -> *const uint16_t { self.data.as_ptr() as *const _ } pub fn constant(&self) -> *const SDL_HapticConstant { self.data.as_ptr() as *const _ } pub fn periodic(&self) -> *const SDL_HapticPeriodic { self.data.as_ptr() as *const _ } pub fn condition(&self) -> *const SDL_HapticCondition { self.data.as_ptr() as *const _ } pub fn ramp(&self) -> *const SDL_HapticRamp { self.data.as_ptr() as *const _ } pub fn left_right(&self) -> *const SDL_HapticLeftRight { self.data.as_ptr() as *const _ } pub fn custom(&self) -> *const SDL_HapticCustom { self.data.as_ptr() as *const _ } } extern "C" { pub fn SDL_NumHaptics() -> c_int; pub fn SDL_HapticName(device_index: c_int) -> *const c_char; pub fn SDL_HapticOpen(device_index: c_int) -> *const SDL_Haptic; pub fn SDL_HapticOpened(device_index: c_int) -> c_int; pub fn SDL_HapticIndex(haptic: *const SDL_Haptic) -> c_int; pub fn SDL_MouseIsHaptic() -> c_int; pub fn SDL_HapticOpenFromMouse() -> *const SDL_Haptic; pub fn SDL_JoystickIsHaptic(joystick: *const SDL_Joystick) -> c_int; pub fn SDL_HapticOpenFromJoystick(joystick: *const SDL_Joystick) -> *const SDL_Haptic; pub fn SDL_HapticClose(haptic: *const SDL_Haptic); pub fn SDL_HapticNumEffects(haptic: *const SDL_Haptic) -> c_int; pub fn SDL_HapticNumEffectsPlaying(haptic: *const SDL_Haptic) -> c_int; pub fn SDL_HapticQuery(haptic: *const SDL_Haptic) -> c_uint; pub fn SDL_HapticNumAxes(haptic: *const SDL_Haptic) -> c_int; pub fn SDL_HapticEffectSupported(haptic: *const SDL_Haptic, effect: *const SDL_HapticEffect) -> c_int; pub fn SDL_HapticNewEffect(haptic: *const SDL_Haptic, effect: *const SDL_HapticEffect) -> c_int; pub fn SDL_HapticUpdateEffect(haptic: *const SDL_Haptic, effect: *const SDL_HapticEffect) -> c_int; pub fn SDL_HapticRunEffect(haptic: *const SDL_Haptic, effect: c_int, iterations: uint32_t) -> c_int; pub fn SDL_HapticStopEffect(haptic: *const SDL_Haptic, effect: c_int) -> c_int; pub fn SDL_HapticDestroyEffect(haptic: *const SDL_Haptic, effect: c_int); pub fn SDL_HapticGetEffectStatus(haptic: *const SDL_Haptic, effect: c_int) -> c_int; pub fn SDL_HapticSetGain(haptic: *const SDL_Haptic, gain: c_int) -> c_int; pub fn SDL_HapticSetAutocenter(haptic: *const SDL_Haptic, autocenter: c_int) -> c_int; pub fn SDL_HapticPause(haptic: *const SDL_Haptic) -> c_int; pub fn SDL_HapticUnpause(haptic: *const SDL_Haptic) -> c_int; pub fn SDL_HapticStopAll(haptic: *const SDL_Haptic) -> c_int; pub fn SDL_HapticRumbleSupported(haptic: *const SDL_Haptic) -> c_int; pub fn SDL_HapticRumbleInit(haptic: *const SDL_Haptic) -> c_int; pub fn SDL_HapticRumblePlay(haptic: *const SDL_Haptic, strength: c_float, length: uint32_t) -> c_int; pub fn SDL_HapticRumbleStop(haptic: *const SDL_Haptic) -> c_int; }