Mercurial > sdl-ios-xcode
comparison src/haptic/SDL_haptic.c @ 2476:242d8a668ebb gsoc2008_force_feedback
* Implemented opening and closing of haptic devices.
author | Edgar Simo <bobbens@gmail.com> |
---|---|
date | Mon, 23 Jun 2008 09:01:58 +0000 |
parents | 4b874e3a3a2c |
children | 97f75ea43a93 |
comparison
equal
deleted
inserted
replaced
2475:4b874e3a3a2c | 2476:242d8a668ebb |
---|---|
111 SDL_memset(haptic, 0, (sizeof *haptic)); | 111 SDL_memset(haptic, 0, (sizeof *haptic)); |
112 haptic->index = device_index; | 112 haptic->index = device_index; |
113 if (SDL_SYS_HapticOpen(haptic) < 0) { | 113 if (SDL_SYS_HapticOpen(haptic) < 0) { |
114 SDL_free(haptic); | 114 SDL_free(haptic); |
115 haptic = NULL; | 115 haptic = NULL; |
116 } else { | |
117 } | 116 } |
118 } | 117 } |
119 if (haptic) { | 118 if (haptic) { |
120 /* Add haptic to list */ | 119 /* Add haptic to list */ |
121 ++haptic->ref_count; | 120 ++haptic->ref_count; |
126 return haptic; | 125 return haptic; |
127 } | 126 } |
128 | 127 |
129 | 128 |
130 /* | 129 /* |
130 * Checks to see if the haptic device is valid | |
131 */ | |
132 static int | |
133 ValidHaptic(SDL_Haptic ** haptic) | |
134 { | |
135 int valid; | |
136 | |
137 if (*haptic == NULL) { | |
138 SDL_SetError("Haptic device hasn't been opened yet"); | |
139 valid = 0; | |
140 } else { | |
141 valid = 1; | |
142 } | |
143 return valid; | |
144 } | |
145 | |
146 | |
147 /* | |
131 * Closes a SDL_Haptic device. | 148 * Closes a SDL_Haptic device. |
132 */ | 149 */ |
133 void | 150 void |
134 SDL_HapticClose(SDL_Haptic * haptic) | 151 SDL_HapticClose(SDL_Haptic * haptic) |
135 { | 152 { |
136 (void)haptic; | 153 int i; |
137 /* TODO */ | 154 |
155 /* Must be valid */ | |
156 if (!ValidHaptic(&haptic)) { | |
157 return; | |
158 } | |
159 | |
160 /* Check if it's still in use */ | |
161 if (--haptic->ref_count < 0) { | |
162 return; | |
163 } | |
164 | |
165 /* Close it */ | |
166 SDL_SYS_HapticClose(haptic); | |
167 | |
168 /* Remove from the list */ | |
169 for (i = 0; SDL_haptics[i]; ++i) { | |
170 if (haptic == SDL_haptics[i]) { | |
171 SDL_memcpy(&SDL_haptics[i], &SDL_haptics[i + 1], | |
172 (SDL_numhaptics - i) * sizeof(haptic)); | |
173 break; | |
174 } | |
175 } | |
176 | |
177 /* Free */ | |
178 SDL_free(haptic); | |
138 } | 179 } |
139 | 180 |
140 /* | 181 /* |
141 * Cleans up after the subsystem. | 182 * Cleans up after the subsystem. |
142 */ | 183 */ |