1 | /* |
2 | Simple DirectMedia Layer |
3 | Copyright (C) 1997-2021 Sam Lantinga <slouken@libsdl.org> |
4 | |
5 | This software is provided 'as-is', without any express or implied |
6 | warranty. In no event will the authors be held liable for any damages |
7 | arising from the use of this software. |
8 | |
9 | Permission is granted to anyone to use this software for any purpose, |
10 | including commercial applications, and to alter it and redistribute it |
11 | freely, subject to the following restrictions: |
12 | |
13 | 1. The origin of this software must not be misrepresented; you must not |
14 | claim that you wrote the original software. If you use this software |
15 | in a product, an acknowledgment in the product documentation would be |
16 | appreciated but is not required. |
17 | 2. Altered source versions must be plainly marked as such, and must not be |
18 | misrepresented as being the original software. |
19 | 3. This notice may not be removed or altered from any source distribution. |
20 | */ |
21 | |
22 | #include "../SDL_internal.h" |
23 | |
24 | #ifndef SDL_syshaptic_h_ |
25 | #define SDL_syshaptic_h_ |
26 | |
27 | #include "SDL_haptic.h" |
28 | |
29 | |
30 | struct haptic_effect |
31 | { |
32 | SDL_HapticEffect effect; /* The current event */ |
33 | struct haptic_hweffect *hweffect; /* The hardware behind the event */ |
34 | }; |
35 | |
36 | /* |
37 | * The real SDL_Haptic struct. |
38 | */ |
39 | struct _SDL_Haptic |
40 | { |
41 | Uint8 index; /* Stores index it is attached to */ |
42 | |
43 | struct haptic_effect *effects; /* Allocated effects */ |
44 | int neffects; /* Maximum amount of effects */ |
45 | int nplaying; /* Maximum amount of effects to play at the same time */ |
46 | unsigned int supported; /* Supported effects */ |
47 | int naxes; /* Number of axes on the device. */ |
48 | |
49 | struct haptic_hwdata *hwdata; /* Driver dependent */ |
50 | int ref_count; /* Count for multiple opens */ |
51 | |
52 | int rumble_id; /* ID of rumble effect for simple rumble API. */ |
53 | SDL_HapticEffect rumble_effect; /* Rumble effect. */ |
54 | struct _SDL_Haptic *next; /* pointer to next haptic we have allocated */ |
55 | }; |
56 | |
57 | /* |
58 | * Scans the system for haptic devices. |
59 | * |
60 | * Returns number of devices on success, -1 on error. |
61 | */ |
62 | extern int SDL_SYS_HapticInit(void); |
63 | |
64 | /* Function to return the number of haptic devices plugged in right now */ |
65 | extern int SDL_SYS_NumHaptics(void); |
66 | |
67 | /* |
68 | * Gets the device dependent name of the haptic device |
69 | */ |
70 | extern const char *SDL_SYS_HapticName(int index); |
71 | |
72 | /* |
73 | * Opens the haptic device for usage. The haptic device should have |
74 | * the index value set previously. |
75 | * |
76 | * Returns 0 on success, -1 on error. |
77 | */ |
78 | extern int SDL_SYS_HapticOpen(SDL_Haptic * haptic); |
79 | |
80 | /* |
81 | * Returns the index of the haptic core pointer or -1 if none is found. |
82 | */ |
83 | int SDL_SYS_HapticMouse(void); |
84 | |
85 | /* |
86 | * Checks to see if the joystick has haptic capabilities. |
87 | * |
88 | * Returns >0 if haptic capabilities are detected, 0 if haptic |
89 | * capabilities aren't detected and -1 on error. |
90 | */ |
91 | extern int SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick); |
92 | |
93 | /* |
94 | * Opens the haptic device for usage using the same device as |
95 | * the joystick. |
96 | * |
97 | * Returns 0 on success, -1 on error. |
98 | */ |
99 | extern int SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic, |
100 | SDL_Joystick * joystick); |
101 | /* |
102 | * Checks to see if haptic device and joystick device are the same. |
103 | * |
104 | * Returns 1 if they are the same, 0 if they aren't. |
105 | */ |
106 | extern int SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, |
107 | SDL_Joystick * joystick); |
108 | |
109 | /* |
110 | * Closes a haptic device after usage. |
111 | */ |
112 | extern void SDL_SYS_HapticClose(SDL_Haptic * haptic); |
113 | |
114 | /* |
115 | * Performs a cleanup on the haptic subsystem. |
116 | */ |
117 | extern void SDL_SYS_HapticQuit(void); |
118 | |
119 | /* |
120 | * Creates a new haptic effect on the haptic device using base |
121 | * as a template for the effect. |
122 | * |
123 | * Returns 0 on success, -1 on error. |
124 | */ |
125 | extern int SDL_SYS_HapticNewEffect(SDL_Haptic * haptic, |
126 | struct haptic_effect *effect, |
127 | SDL_HapticEffect * base); |
128 | |
129 | /* |
130 | * Updates the haptic effect on the haptic device using data |
131 | * as a template. |
132 | * |
133 | * Returns 0 on success, -1 on error. |
134 | */ |
135 | extern int SDL_SYS_HapticUpdateEffect(SDL_Haptic * haptic, |
136 | struct haptic_effect *effect, |
137 | SDL_HapticEffect * data); |
138 | |
139 | /* |
140 | * Runs the effect on the haptic device. |
141 | * |
142 | * Returns 0 on success, -1 on error. |
143 | */ |
144 | extern int SDL_SYS_HapticRunEffect(SDL_Haptic * haptic, |
145 | struct haptic_effect *effect, |
146 | Uint32 iterations); |
147 | |
148 | /* |
149 | * Stops the effect on the haptic device. |
150 | * |
151 | * Returns 0 on success, -1 on error. |
152 | */ |
153 | extern int SDL_SYS_HapticStopEffect(SDL_Haptic * haptic, |
154 | struct haptic_effect *effect); |
155 | |
156 | /* |
157 | * Cleanups up the effect on the haptic device. |
158 | */ |
159 | extern void SDL_SYS_HapticDestroyEffect(SDL_Haptic * haptic, |
160 | struct haptic_effect *effect); |
161 | |
162 | /* |
163 | * Queries the device for the status of effect. |
164 | * |
165 | * Returns 0 if device is stopped, >0 if device is playing and |
166 | * -1 on error. |
167 | */ |
168 | extern int SDL_SYS_HapticGetEffectStatus(SDL_Haptic * haptic, |
169 | struct haptic_effect *effect); |
170 | |
171 | /* |
172 | * Sets the global gain of the haptic device. |
173 | * |
174 | * Returns 0 on success, -1 on error. |
175 | */ |
176 | extern int SDL_SYS_HapticSetGain(SDL_Haptic * haptic, int gain); |
177 | |
178 | /* |
179 | * Sets the autocenter feature of the haptic device. |
180 | * |
181 | * Returns 0 on success, -1 on error. |
182 | */ |
183 | extern int SDL_SYS_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter); |
184 | |
185 | /* |
186 | * Pauses the haptic device. |
187 | * |
188 | * Returns 0 on success, -1 on error. |
189 | */ |
190 | extern int SDL_SYS_HapticPause(SDL_Haptic * haptic); |
191 | |
192 | /* |
193 | * Unpauses the haptic device. |
194 | * |
195 | * Returns 0 on success, -1 on error. |
196 | */ |
197 | extern int SDL_SYS_HapticUnpause(SDL_Haptic * haptic); |
198 | |
199 | /* |
200 | * Stops all the currently playing haptic effects on the device. |
201 | * |
202 | * Returns 0 on success, -1 on error. |
203 | */ |
204 | extern int SDL_SYS_HapticStopAll(SDL_Haptic * haptic); |
205 | |
206 | #endif /* SDL_syshaptic_h_ */ |
207 | |
208 | /* vi: set ts=4 sw=4 expandtab: */ |
209 | |