author  Edgar Simo <bobbens@gmail.com> 
Wed, 06 Aug 2008 09:55:29 +0000  
branch  gsoc2008_force_feedback 
changeset 2624  c6476e26a783 
parent 2524  1a55848ce198 
child 2645  269ba4f28d0e 
permissions  rwrr 
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

1 
/* 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

2 
SDL  Simple DirectMedia Layer 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

3 
Copyright (C) 2008 Edgar Simo 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

4 

3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

5 
This library is free software; you can redistribute it and/or 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

6 
modify it under the terms of the GNU Lesser General Public 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

7 
License as published by the Free Software Foundation; either 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

8 
version 2.1 of the License, or (at your option) any later version. 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

9 

3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

10 
This library is distributed in the hope that it will be useful, 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

11 
but WITHOUT ANY WARRANTY; without even the implied warranty of 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

12 
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

13 
Lesser General Public License for more details. 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

14 

3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

15 
You should have received a copy of the GNU Lesser General Public 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

16 
License along with this library; if not, write to the Free Software 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

17 
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 021101301 USA 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

18 

3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

19 
Sam Lantinga 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

20 
slouken@libsdl.org 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

21 
*/ 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

22 

3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

23 
#include "SDL_config.h" 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

24 

3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

25 
#include "SDL_haptic.h" 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

26 

3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

27 

2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

28 
/* 
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

29 
* Number of haptic devices on the system. 
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

30 
*/ 
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

31 
extern Uint8 SDL_numhaptics; 
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

32 

ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

33 

2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

34 
struct haptic_effect 
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

35 
{ 
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

36 
SDL_HapticEffect effect; /* The current event */ 
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

37 
struct haptic_hweffect *hweffect; /* The hardware behind the event */ 
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

38 
}; 
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

39 

97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

40 
/* 
2517
37c13c12c878
Broke API by introducing iterations to SDL_HapticRunEffects().
Edgar Simo <bobbens@gmail.com>
parents:
2515
diff
changeset

41 
* The real SDL_Haptic struct. 
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

42 
*/ 
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

43 
struct _SDL_Haptic 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

44 
{ 
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

45 
Uint8 index; /* Stores index it is attached to */ 
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

46 

2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

47 
struct haptic_effect *effects; /* Allocated effects */ 
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

48 
int neffects; /* Maximum amount of effects */ 
2515
030fc4375e63
Added SDL_HapticNumEffectsPlaying().
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset

49 
int nplaying; /* Maximum amount of effects to play at the same time */ 
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

50 
unsigned int supported; /* Supported effects */ 
2523
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset

51 
int naxes; /* Number of axes on the device. */ 
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

52 

2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

53 
struct haptic_hwdata *hwdata; /* Driver dependent */ 
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset

54 
int ref_count; /* Count for multiple opens */ 
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

55 
}; 
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

56 

2491  57 
/* 
58 
* Scans the system for haptic devices. 

59 
* 

60 
* Returns 0 on success, 1 on error. 

61 
*/ 

2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

62 
extern int SDL_SYS_HapticInit(void); 
2491  63 

64 
/* 

65 
* Gets the device dependent name of the haptic device 

66 
*/ 

2475  67 
extern const char * SDL_SYS_HapticName(int index); 
2491  68 

69 
/* 

70 
* Opens the haptic device for usage. The haptic device should have 

71 
* the index value set previously. 

72 
* 

73 
* Returns 0 on success, 1 on error. 

74 
*/ 

2475  75 
extern int SDL_SYS_HapticOpen(SDL_Haptic * haptic); 
2491  76 

77 
/* 

2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

78 
* Returns the index of the haptic core pointer or 1 if none is found. 
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

79 
*/ 
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

80 
int SDL_SYS_HapticMouse(void); 
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

81 

ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset

82 
/* 
2491  83 
* Checks to see if the joystick has haptic capabilities. 
84 
* 

85 
* Returns >0 if haptic capabilities are detected, 0 if haptic 

86 
* capabilities aren't detected and 1 on error. 

87 
*/ 

2624  88 
extern int SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick); 
2491  89 

90 
/* 

91 
* Opens the haptic device for usage using the same device as 

92 
* the joystick. 

93 
* 

94 
* Returns 0 on success, 1 on error. 

95 
*/ 

96 
extern int SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic, 

97 
SDL_Joystick * joystick); 

98 
/* 

99 
* Checks to see if haptic device and joystick device are the same. 

100 
* 

101 
* Returns 1 if they are the same, 0 if they aren't. 

102 
*/ 

103 
extern int SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, 

104 
SDL_Joystick * joystick); 

105 

106 
/* 

107 
* Closes a haptic device after usage. 

108 
*/ 

2475  109 
extern void SDL_SYS_HapticClose(SDL_Haptic * haptic); 
2491  110 

111 
/* 

112 
* Performs a cleanup on the haptic subsystem. 

113 
*/ 

2475  114 
extern void SDL_SYS_HapticQuit(void); 
2491  115 

116 
/* 

117 
* Creates a new haptic effect on the haptic device using base 

118 
* as a template for the effect. 

119 
* 

120 
* Returns 0 on success, 1 on error. 

121 
*/ 

2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2477
diff
changeset

122 
extern int SDL_SYS_HapticNewEffect(SDL_Haptic * haptic, 
2491  123 
struct haptic_effect * effect, 
124 
SDL_HapticEffect * base); 

125 

126 
/* 

127 
* Updates the haptic effect on the haptic device using data 

128 
* as a template. 

129 
* 

130 
* Returns 0 on success, 1 on error. 

131 
*/ 

2488
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2485
diff
changeset

132 
extern int SDL_SYS_HapticUpdateEffect(SDL_Haptic * haptic, 
2491  133 
struct haptic_effect * effect, 
134 
SDL_HapticEffect * data); 

135 

136 
/* 

137 
* Runs the effect on the haptic device. 

138 
* 

139 
* Returns 0 on success, 1 on error. 

140 
*/ 

2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2477
diff
changeset

141 
extern int SDL_SYS_HapticRunEffect(SDL_Haptic * haptic, 
2517
37c13c12c878
Broke API by introducing iterations to SDL_HapticRunEffects().
Edgar Simo <bobbens@gmail.com>
parents:
2515
diff
changeset

142 
struct haptic_effect * effect, 
2519
af9df9662807
More explicit with iterations and length.
Edgar Simo <bobbens@gmail.com>
parents:
2517
diff
changeset

143 
Uint32 iterations); 
2491  144 

145 
/* 

146 
* Stops the effect on the haptic device. 

147 
* 

148 
* Returns 0 on success, 1 on error. 

149 
*/ 

2485
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset

150 
extern int SDL_SYS_HapticStopEffect(SDL_Haptic * haptic, 
2491  151 
struct haptic_effect * effect); 
152 

153 
/* 

154 
* Cleanups up the effect on the haptic device. 

155 
*/ 

2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2477
diff
changeset

156 
extern void SDL_SYS_HapticDestroyEffect(SDL_Haptic * haptic, 
2491  157 
struct haptic_effect * effect); 
158 

159 
/* 

2495
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset

160 
* Queries the device for the status of effect. 
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset

161 
* 
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset

162 
* Returns 0 if device is stopped, >0 if device is playing and 
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset

163 
* 1 on error. 
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset

164 
*/ 
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset

165 
extern int SDL_SYS_HapticGetEffectStatus(SDL_Haptic * haptic, 
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset

166 
struct haptic_effect * effect); 
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset

167 

66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset

168 
/* 
2491  169 
* Sets the global gain of the haptic device. 
170 
* 

171 
* Returns 0 on success, 1 on error. 

172 
*/ 

2483
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2480
diff
changeset

173 
extern int SDL_SYS_HapticSetGain(SDL_Haptic * haptic, int gain); 
2491  174 

175 
/* 

176 
* Sets the autocenter feature of the haptic device. 

177 
* 

178 
* Returns 0 on success, 1 on error. 

179 
*/ 

180 
extern int SDL_SYS_HapticSetAutocenter(SDL_Haptic * haptic, 

181 
int autocenter); 

2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset

182 

2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2477
diff
changeset

183 