Mercurial > sdl-ios-xcode
annotate src/haptic/linux/SDL_syshaptic.c @ 2574:c1f07fdd1e2d gsoc2008_force_feedback
Windows build should compile after this.
author | Edgar Simo <bobbens@gmail.com> |
---|---|
date | Thu, 31 Jul 2008 16:38:13 +0000 |
parents | 3696b9ce8a37 |
children | dbd63c419ba5 |
rev | line source |
---|---|
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 02110-1301 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 #include "SDL_config.h" |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
23 |
2493
6a2482d4af81
Fixed regex replace mistake.
Edgar Simo <bobbens@gmail.com>
parents:
2491
diff
changeset
|
24 #ifdef SDL_HAPTIC_LINUX |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
25 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
26 #include "SDL_haptic.h" |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
27 #include "../SDL_syshaptic.h" |
2489
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
28 #include "SDL_joystick.h" |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
29 #include "../../joystick/SDL_sysjoystick.h" /* For the real SDL_Joystick */ |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
30 #include "../../joystick/linux/SDL_sysjoystick_c.h" /* For joystick hwdata */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
31 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
32 #include <unistd.h> /* close */ |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
33 #include <linux/input.h> |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
34 #include <sys/ioctl.h> |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
35 #include <sys/types.h> |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
36 #include <sys/stat.h> |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
37 #include <fcntl.h> |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
38 #include <linux/limits.h> |
2517
37c13c12c878
Broke API by introducing iterations to SDL_HapticRunEffects().
Edgar Simo <bobbens@gmail.com>
parents:
2515
diff
changeset
|
39 #include <limits.h> /* INT_MAX */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
40 #include <string.h> |
2496
8f840a6cdf01
Using errno for more verbosity in errors.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset
|
41 #include <errno.h> |
2510
e6ad7e678fca
Implemented SDL_HAPTIC_CARTESIAN on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2503
diff
changeset
|
42 #include <math.h> |
e6ad7e678fca
Implemented SDL_HAPTIC_CARTESIAN on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2503
diff
changeset
|
43 |
e6ad7e678fca
Implemented SDL_HAPTIC_CARTESIAN on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2503
diff
changeset
|
44 #ifndef M_PI |
e6ad7e678fca
Implemented SDL_HAPTIC_CARTESIAN on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2503
diff
changeset
|
45 # define M_PI 3.14159265358979323846 |
e6ad7e678fca
Implemented SDL_HAPTIC_CARTESIAN on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2503
diff
changeset
|
46 #endif |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
47 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
48 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
49 #define MAX_HAPTICS 32 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
50 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
51 |
2475 | 52 /* |
53 * List of available haptic devices. | |
54 */ | |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
55 static struct |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
56 { |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
57 char *fname; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
58 SDL_Haptic *haptic; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
59 } SDL_hapticlist[MAX_HAPTICS]; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
60 |
2475 | 61 |
62 /* | |
63 * Haptic system hardware data. | |
64 */ | |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
65 struct haptic_hwdata |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
66 { |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
67 int fd; |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
68 char *fname; /* Points to the name in SDL_hapticlist. */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
69 }; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
70 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
71 |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
72 /* |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
73 * Haptic system effect data. |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
74 */ |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
75 struct haptic_hweffect |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
76 { |
2511
f12ae0bae468
Fixed bugs in documentation.
Edgar Simo <bobbens@gmail.com>
parents:
2510
diff
changeset
|
77 struct ff_effect effect; /* The linux kernel effect structure. */ |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
78 }; |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
79 |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
80 |
2475 | 81 |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
82 #define test_bit(nr, addr) \ |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
83 (((1UL << ((nr) & 31)) & (((const unsigned int *) addr)[(nr) >> 5])) != 0) |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
84 #define EV_TEST(ev,f) \ |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
85 if (test_bit((ev), features)) ret |= (f); |
2475 | 86 /* |
87 * Test whether a device has haptic properties. | |
88 * Returns available properties or 0 if there are none. | |
89 */ | |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
90 static int |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
91 EV_IsHaptic(int fd) |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
92 { |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
93 unsigned int ret; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
94 unsigned long features[1 + FF_MAX/sizeof(unsigned long)]; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
95 |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
96 /* Ask device for what it has. */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
97 ret = 0; |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
98 if (ioctl(fd, EVIOCGBIT(EV_FF, sizeof(features)), features) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
99 SDL_SetError("Haptic: Unable to get device's features: %s", strerror(errno)); |
2490 | 100 return -1; |
101 } | |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
102 |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
103 /* Convert supported features to SDL_HAPTIC platform-neutral features. */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
104 EV_TEST(FF_CONSTANT, SDL_HAPTIC_CONSTANT); |
2487
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
105 EV_TEST(FF_PERIODIC, SDL_HAPTIC_SINE | |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
106 SDL_HAPTIC_SQUARE | |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
107 SDL_HAPTIC_TRIANGLE | |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
108 SDL_HAPTIC_SAWTOOTHUP | |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
109 SDL_HAPTIC_SAWTOOTHDOWN); |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
110 EV_TEST(FF_RAMP, SDL_HAPTIC_RAMP); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
111 EV_TEST(FF_SPRING, SDL_HAPTIC_SPRING); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
112 EV_TEST(FF_FRICTION, SDL_HAPTIC_FRICTION); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
113 EV_TEST(FF_DAMPER, SDL_HAPTIC_DAMPER); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
114 EV_TEST(FF_INERTIA, SDL_HAPTIC_INERTIA); |
2486
24dd8b8669fa
Added SDL_HAPTIC_CUSTOM (not supported on linux).
Edgar Simo <bobbens@gmail.com>
parents:
2485
diff
changeset
|
115 EV_TEST(FF_CUSTOM, SDL_HAPTIC_CUSTOM); |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
116 EV_TEST(FF_GAIN, SDL_HAPTIC_GAIN); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
117 EV_TEST(FF_AUTOCENTER, SDL_HAPTIC_AUTOCENTER); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
118 |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
119 /* Return what it supports. */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
120 return ret; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
121 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
122 |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
123 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
124 /* |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
125 * Tests whether a device is a mouse or not. |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
126 */ |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
127 static int |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
128 EV_IsMouse(int fd) |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
129 { |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
130 unsigned long argp[40]; |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
131 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
132 /* Ask for supported features. */ |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
133 if (ioctl(fd, EVIOCGBIT(EV_KEY, sizeof(argp)), argp) < 0) { |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
134 return -1; |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
135 } |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
136 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
137 /* Currently we only test for BTN_MOUSE which can give fake positives. */ |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
138 if (test_bit(BTN_MOUSE,argp) != 0) { |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
139 return 1; |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
140 } |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
141 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
142 return 0; |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
143 } |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
144 |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
145 /* |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
146 * Initializes the haptic subsystem by finding available devices. |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
147 */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
148 int |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
149 SDL_SYS_HapticInit(void) |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
150 { |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
151 const char joydev_pattern[] = "/dev/input/event%d"; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
152 dev_t dev_nums[MAX_HAPTICS]; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
153 char path[PATH_MAX]; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
154 struct stat sb; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
155 int fd; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
156 int i, j, k; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
157 int duplicate; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
158 int numhaptics; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
159 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
160 numhaptics = 0; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
161 |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
162 /* |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
163 * Limit amount of checks to MAX_HAPTICS since we may or may not have |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
164 * permission to some or all devices. |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
165 */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
166 i = 0; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
167 for (j = 0; j < MAX_HAPTICS; ++j) { |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
168 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
169 snprintf(path, PATH_MAX, joydev_pattern, i++); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
170 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
171 /* check to see if file exists */ |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
172 if (stat(path,&sb) != 0) |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
173 break; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
174 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
175 /* check for duplicates */ |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
176 duplicate = 0; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
177 for (k = 0; (k < numhaptics) && !duplicate; ++k) { |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
178 if (sb.st_rdev == dev_nums[k]) { |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
179 duplicate = 1; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
180 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
181 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
182 if (duplicate) { |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
183 continue; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
184 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
185 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
186 /* try to open */ |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
187 fd = open(path, O_RDWR, 0); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
188 if (fd < 0) continue; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
189 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
190 #ifdef DEBUG_INPUT_EVENTS |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
191 printf("Checking %s\n", path); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
192 #endif |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
193 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
194 /* see if it works */ |
2490 | 195 if (EV_IsHaptic(fd) > 0) { |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
196 SDL_hapticlist[numhaptics].fname = SDL_strdup(path); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
197 SDL_hapticlist[numhaptics].haptic = NULL; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
198 dev_nums[numhaptics] = sb.st_rdev; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
199 ++numhaptics; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
200 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
201 close(fd); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
202 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
203 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
204 return numhaptics; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
205 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
206 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
207 |
2475 | 208 /* |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
209 * Gets the name from a file descriptor. |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
210 */ |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
211 static const char * |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
212 SDL_SYS_HapticNameFromFD(int fd) |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
213 { |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
214 static char namebuf[128]; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
215 |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
216 /* We use the evdev name ioctl. */ |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
217 if (ioctl(fd, EVIOCGNAME(sizeof(namebuf)), namebuf) <= 0) { |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
218 return NULL; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
219 } |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
220 |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
221 return namebuf; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
222 } |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
223 |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
224 |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
225 /* |
2475 | 226 * Return the name of a haptic device, does not need to be opened. |
227 */ | |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
228 const char * |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
229 SDL_SYS_HapticName(int index) |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
230 { |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
231 int fd; |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
232 const char *name; |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
233 |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
234 /* Open the haptic device. */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
235 name = NULL; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
236 fd = open(SDL_hapticlist[index].fname, O_RDONLY, 0); |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
237 |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
238 if (fd >= 0) { |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
239 |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
240 name = SDL_SYS_HapticNameFromFD(fd); |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
241 if (name==NULL) { |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
242 /* No name found, return device character device */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
243 name = SDL_hapticlist[index].fname; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
244 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
245 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
246 close(fd); |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
247 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
248 return name; |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
249 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
250 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
251 |
2475 | 252 /* |
2490 | 253 * Opens the haptic device from the file descriptor. |
2475 | 254 */ |
2490 | 255 static int |
256 SDL_SYS_HapticOpenFromFD(SDL_Haptic * haptic, int fd) | |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
257 { |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
258 const char *name; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
259 |
2476
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
260 /* Allocate the hwdata */ |
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
261 haptic->hwdata = (struct haptic_hwdata *) |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
262 SDL_malloc(sizeof(*haptic->hwdata)); |
2476
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
263 if (haptic->hwdata == NULL) { |
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
264 SDL_OutOfMemory(); |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
265 goto open_err; |
2476
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
266 } |
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
267 SDL_memset(haptic->hwdata, 0, sizeof(*haptic->hwdata)); |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
268 |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
269 /* Set the data. */ |
2476
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
270 haptic->hwdata->fd = fd; |
2478
4fd783e0f34b
Added query functions for haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2477
diff
changeset
|
271 haptic->supported = EV_IsHaptic(fd); |
2523
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
272 haptic->naxes = 2; /* Hardcoded for now, not sure if it's possible to find out. */ |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
273 |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
274 /* Set the effects */ |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
275 if (ioctl(fd, EVIOCGEFFECTS, &haptic->neffects) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
276 SDL_SetError("Haptic: Unable to query device memory: %s", strerror(errno)); |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
277 goto open_err; |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
278 } |
2515
030fc4375e63
Added SDL_HapticNumEffectsPlaying().
Edgar Simo <bobbens@gmail.com>
parents:
2513
diff
changeset
|
279 haptic->nplaying = haptic->neffects; /* Linux makes no distinction. */ |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
280 haptic->effects = (struct haptic_effect *) |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
281 SDL_malloc(sizeof(struct haptic_effect) * haptic->neffects); |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
282 if (haptic->effects == NULL) { |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
283 SDL_OutOfMemory(); |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
284 goto open_err; |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
285 } |
2483
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
286 /* Clear the memory */ |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
287 SDL_memset(haptic->effects, 0, |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
288 sizeof(struct haptic_effect) * haptic->neffects); |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
289 |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
290 return 0; |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
291 |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
292 /* Error handling */ |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
293 open_err: |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
294 close(fd); |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
295 if (haptic->hwdata != NULL) { |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
296 free(haptic->hwdata); |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
297 haptic->hwdata = NULL; |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
298 } |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
299 return -1; |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
300 } |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
301 |
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
302 |
2475 | 303 /* |
2490 | 304 * Opens a haptic device for usage. |
305 */ | |
306 int | |
307 SDL_SYS_HapticOpen(SDL_Haptic * haptic) | |
308 { | |
309 int fd; | |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
310 int ret; |
2490 | 311 |
312 /* Open the character device */ | |
313 fd = open(SDL_hapticlist[haptic->index].fname, O_RDWR, 0); | |
314 if (fd < 0) { | |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
315 SDL_SetError("Haptic: Unable to open %s: %s", |
2496
8f840a6cdf01
Using errno for more verbosity in errors.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset
|
316 SDL_hapticlist[haptic->index], strerror(errno)); |
2490 | 317 return -1; |
318 } | |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
319 |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
320 /* Try to create the haptic. */ |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
321 ret = SDL_SYS_HapticOpenFromFD(haptic,fd); /* Already closes on error. */ |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
322 if (ret < 0) { |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
323 return -1; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
324 } |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
325 |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
326 /* Set the fname. */ |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
327 haptic->hwdata->fname = SDL_hapticlist[haptic->index].fname; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
328 return 0; |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
329 } |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
330 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
331 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
332 /* |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
333 * Opens a haptic device from first mouse it finds for usage. |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
334 */ |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
335 int |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
336 SDL_SYS_HapticMouse(void) |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
337 { |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
338 int fd; |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
339 int i; |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
340 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
341 for (i=0; i<SDL_numhaptics; i++) { |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
342 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
343 /* Open the device. */ |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
344 fd = open(SDL_hapticlist[i].fname, O_RDWR, 0); |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
345 if (fd < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
346 SDL_SetError("Haptic: Unable to open %s: %s", |
2512
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
347 SDL_hapticlist[i], strerror(errno)); |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
348 return -1; |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
349 } |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
350 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
351 if (EV_IsMouse(fd)) { |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
352 close(fd); |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
353 return i; |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
354 } |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
355 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
356 close(fd); |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
357 } |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
358 |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
359 return -1; |
ef147ee4896c
Improved some ioctl handling.
Edgar Simo <bobbens@gmail.com>
parents:
2511
diff
changeset
|
360 } |
2490 | 361 |
362 | |
363 /* | |
2489
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
364 * Checks to see if a joystick has haptic features. |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
365 */ |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
366 int |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
367 SDL_SYS_JoystickIsHaptic(SDL_Joystick * joystick) |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
368 { |
2490 | 369 return EV_IsHaptic(joystick->hwdata->fd); |
370 } | |
371 | |
372 | |
373 /* | |
374 * Checks to see if the haptic device and joystick and in reality the same. | |
375 */ | |
376 int | |
377 SDL_SYS_JoystickSameHaptic(SDL_Haptic * haptic, SDL_Joystick * joystick) | |
378 { | |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
379 /* We are assuming linux is using evdev which should trump the old |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
380 * joystick methods. */ |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
381 if (SDL_strcmp(joystick->hwdata->fname,haptic->hwdata->fname)==0) { |
2489
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
382 return 1; |
2490 | 383 } |
2489
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
384 return 0; |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
385 } |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
386 |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
387 |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
388 /* |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
389 * Opens a SDL_Haptic from a SDL_Joystick. |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
390 */ |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
391 int |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
392 SDL_SYS_HapticOpenFromJoystick(SDL_Haptic * haptic, SDL_Joystick * joystick) |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
393 { |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
394 int i; |
2490 | 395 int fd; |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
396 int ret; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
397 |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
398 /* Find the joystick in the haptic list. */ |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
399 for (i=0; i<MAX_HAPTICS; i++) { |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
400 if (SDL_hapticlist[i].fname != NULL) { |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
401 if (SDL_strcmp(SDL_hapticlist[i].fname, joystick->hwdata->fname)==0) { |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
402 haptic->index = i; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
403 } |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
404 } |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
405 } |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
406 |
2490 | 407 fd = open(joystick->hwdata->fname, O_RDWR, 0); |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
408 ret = SDL_SYS_HapticOpenFromFD(haptic,fd); /* Already closes on error. */ |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
409 if (ret < 0) { |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
410 return -1; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
411 } |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
412 |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
413 haptic->hwdata->fname = SDL_hapticlist[haptic->index].fname; |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
414 return 0; |
2489
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
415 } |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
416 |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
417 |
96adc8025331
Exposed some of the joystick stuff to the haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2488
diff
changeset
|
418 /* |
2475 | 419 * Closes the haptic device. |
420 */ | |
421 void | |
422 SDL_SYS_HapticClose(SDL_Haptic * haptic) | |
423 { | |
2476
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
424 if (haptic->hwdata) { |
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
425 |
2561
3696b9ce8a37
Correctness patch, it's up to the SDL_haptic.c to clean up effects, not SDL_syshaptic.c.
Edgar Simo <bobbens@gmail.com>
parents:
2556
diff
changeset
|
426 /* Free effects. */ |
3696b9ce8a37
Correctness patch, it's up to the SDL_haptic.c to clean up effects, not SDL_syshaptic.c.
Edgar Simo <bobbens@gmail.com>
parents:
2556
diff
changeset
|
427 SDL_free(haptic->effects); |
3696b9ce8a37
Correctness patch, it's up to the SDL_haptic.c to clean up effects, not SDL_syshaptic.c.
Edgar Simo <bobbens@gmail.com>
parents:
2556
diff
changeset
|
428 haptic->effects = NULL; |
3696b9ce8a37
Correctness patch, it's up to the SDL_haptic.c to clean up effects, not SDL_syshaptic.c.
Edgar Simo <bobbens@gmail.com>
parents:
2556
diff
changeset
|
429 haptic->neffects = 0; |
3696b9ce8a37
Correctness patch, it's up to the SDL_haptic.c to clean up effects, not SDL_syshaptic.c.
Edgar Simo <bobbens@gmail.com>
parents:
2556
diff
changeset
|
430 |
2476
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
431 /* Clean up */ |
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
432 close(haptic->hwdata->fd); |
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
433 |
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
434 /* Free */ |
2561
3696b9ce8a37
Correctness patch, it's up to the SDL_haptic.c to clean up effects, not SDL_syshaptic.c.
Edgar Simo <bobbens@gmail.com>
parents:
2556
diff
changeset
|
435 SDL_free(haptic->hwdata); |
3696b9ce8a37
Correctness patch, it's up to the SDL_haptic.c to clean up effects, not SDL_syshaptic.c.
Edgar Simo <bobbens@gmail.com>
parents:
2556
diff
changeset
|
436 haptic->hwdata = NULL; |
2476
242d8a668ebb
* Implemented opening and closing of haptic devices.
Edgar Simo <bobbens@gmail.com>
parents:
2475
diff
changeset
|
437 } |
2524
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
438 |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
439 /* Clear the rest. */ |
1a55848ce198
Better handling of opening haptics from joysticks.
Edgar Simo <bobbens@gmail.com>
parents:
2523
diff
changeset
|
440 SDL_memset(haptic, 0, sizeof(SDL_Haptic)); |
2475 | 441 } |
442 | |
443 | |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
444 /* |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
445 * Clean up after system specific haptic stuff |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
446 */ |
2474
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
447 void |
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
448 SDL_SYS_HapticQuit(void) |
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
449 { |
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
450 int i; |
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
451 |
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
452 for (i=0; SDL_hapticlist[i].fname != NULL; i++) { |
2530 | 453 /* Opened and not closed haptics are leaked, this is on purpose. |
454 * Close your haptic devices after usage. */ | |
455 | |
2474
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
456 SDL_free(SDL_hapticlist[i].fname); |
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
457 } |
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
458 SDL_hapticlist[0].fname = NULL; |
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
459 } |
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
460 |
2556
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
461 |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
462 /* |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
463 * Converts an SDL button to a ff_trigger button. |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
464 */ |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
465 static Uint16 |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
466 SDL_SYS_ToButton( Uint16 button ) |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
467 { |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
468 Uint16 ff_button; |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
469 |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
470 ff_button = 0; |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
471 |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
472 if (button != 0) { |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
473 ff_button = BTN_GAMEPAD + button - 1; |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
474 } |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
475 |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
476 return ff_button; |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
477 } |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
478 |
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
479 |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
480 /* |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
481 * Returns the ff_effect usable direction from a SDL_HapticDirection. |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
482 */ |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
483 static Uint16 |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
484 SDL_SYS_ToDirection( SDL_HapticDirection * dir ) |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
485 { |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
486 Uint32 tmp; |
2511
f12ae0bae468
Fixed bugs in documentation.
Edgar Simo <bobbens@gmail.com>
parents:
2510
diff
changeset
|
487 float f; /* Ideally we'd use fixed point math instead of floats... */ |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
488 |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
489 switch (dir->type) { |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
490 case SDL_HAPTIC_POLAR: |
2502
5356ca0c36a3
Fixed linux directions being inverted.
Edgar Simo <bobbens@gmail.com>
parents:
2500
diff
changeset
|
491 /* Linux directions are inverted. */ |
5356ca0c36a3
Fixed linux directions being inverted.
Edgar Simo <bobbens@gmail.com>
parents:
2500
diff
changeset
|
492 tmp = (((18000 + dir->dir[0]) % 36000) * 0xFFFF) / 36000; |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
493 return (Uint16) tmp; |
2523
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
494 |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
495 case SDL_HAPTIC_CARTESIAN: |
2511
f12ae0bae468
Fixed bugs in documentation.
Edgar Simo <bobbens@gmail.com>
parents:
2510
diff
changeset
|
496 /* We must invert "x" and "y" to go clockwise. */ |
2510
e6ad7e678fca
Implemented SDL_HAPTIC_CARTESIAN on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2503
diff
changeset
|
497 f = atan2(dir->dir[0], dir->dir[1]); |
e6ad7e678fca
Implemented SDL_HAPTIC_CARTESIAN on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2503
diff
changeset
|
498 tmp = (int)(f*18000./M_PI) % 36000; |
e6ad7e678fca
Implemented SDL_HAPTIC_CARTESIAN on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2503
diff
changeset
|
499 tmp = (tmp * 0xFFFF) / 36000; |
e6ad7e678fca
Implemented SDL_HAPTIC_CARTESIAN on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2503
diff
changeset
|
500 return (Uint16) tmp; |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
501 |
2523
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
502 case SDL_HAPTIC_SPHERICAL: |
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
503 tmp = (36000 - dir->dir[0]) + 27000; /* Convert to polars */ |
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
504 tmp = (((18000 + tmp) % 36000) * 0xFFFF) / 36000; |
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
505 return (Uint16) tmp; |
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
506 |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
507 default: |
2523
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
508 SDL_SetError("Haptic: Unsupported direction type."); |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
509 return -1; |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
510 } |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
511 |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
512 return 0; |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
513 } |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
514 |
2556
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
515 |
2481 | 516 #define CLAMP(x) (((x) > 32767) ? 32767 : x) |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
517 /* |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
518 * Initializes the linux effect struct from a haptic_effect. |
2481 | 519 * Values above 32767 (for unsigned) are unspecified so we must clamp. |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
520 */ |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
521 static int |
2480 | 522 SDL_SYS_ToFFEffect( struct ff_effect * dest, SDL_HapticEffect * src ) |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
523 { |
2526 | 524 Uint32 tmp; |
2480 | 525 SDL_HapticConstant *constant; |
526 SDL_HapticPeriodic *periodic; | |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
527 SDL_HapticCondition *condition; |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
528 SDL_HapticRamp *ramp; |
2480 | 529 |
530 /* Clear up */ | |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
531 SDL_memset(dest, 0, sizeof(struct ff_effect)); |
2480 | 532 |
533 switch (src->type) { | |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
534 case SDL_HAPTIC_CONSTANT: |
2480 | 535 constant = &src->constant; |
536 | |
537 /* Header */ | |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
538 dest->type = FF_CONSTANT; |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
539 dest->direction = SDL_SYS_ToDirection(&constant->direction); |
2523
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
540 if (dest->direction < 0) return -1; |
2480 | 541 |
542 /* Replay */ | |
2539
b4c41a7eea04
Properly support INFINITY length haptic effects on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2530
diff
changeset
|
543 dest->replay.length = (constant->length == SDL_HAPTIC_INFINITY) ? |
b4c41a7eea04
Properly support INFINITY length haptic effects on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2530
diff
changeset
|
544 0 : CLAMP(constant->length); |
2481 | 545 dest->replay.delay = CLAMP(constant->delay); |
2480 | 546 |
547 /* Trigger */ | |
2556
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
548 dest->trigger.button = SDL_SYS_ToButton(constant->button); |
2481 | 549 dest->trigger.interval = CLAMP(constant->interval); |
2480 | 550 |
551 /* Constant */ | |
552 dest->u.constant.level = constant->level; | |
553 | |
554 /* Envelope */ | |
2481 | 555 dest->u.constant.envelope.attack_length = CLAMP(constant->attack_length); |
556 dest->u.constant.envelope.attack_level = CLAMP(constant->attack_level); | |
557 dest->u.constant.envelope.fade_length = CLAMP(constant->fade_length); | |
558 dest->u.constant.envelope.fade_level = CLAMP(constant->fade_level); | |
2480 | 559 |
560 break; | |
561 | |
2487
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
562 case SDL_HAPTIC_SINE: |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
563 case SDL_HAPTIC_SQUARE: |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
564 case SDL_HAPTIC_TRIANGLE: |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
565 case SDL_HAPTIC_SAWTOOTHUP: |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
566 case SDL_HAPTIC_SAWTOOTHDOWN: |
2480 | 567 periodic = &src->periodic; |
568 | |
569 /* Header */ | |
570 dest->type = FF_PERIODIC; | |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
571 dest->direction = SDL_SYS_ToDirection(&periodic->direction); |
2523
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
572 if (dest->direction < 0) return -1; |
2480 | 573 |
574 /* Replay */ | |
2539
b4c41a7eea04
Properly support INFINITY length haptic effects on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2530
diff
changeset
|
575 dest->replay.length = (periodic->length == SDL_HAPTIC_INFINITY) ? |
b4c41a7eea04
Properly support INFINITY length haptic effects on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2530
diff
changeset
|
576 0 : CLAMP(periodic->length); |
2481 | 577 dest->replay.delay = CLAMP(periodic->delay); |
2480 | 578 |
579 /* Trigger */ | |
2556
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
580 dest->trigger.button = SDL_SYS_ToButton(periodic->button); |
2481 | 581 dest->trigger.interval = CLAMP(periodic->interval); |
2480 | 582 |
2487
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
583 /* Periodic */ |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
584 if (periodic->type == SDL_HAPTIC_SINE) |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
585 dest->u.periodic.waveform = FF_SINE; |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
586 else if (periodic->type == SDL_HAPTIC_SQUARE) |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
587 dest->u.periodic.waveform = FF_SQUARE; |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
588 else if (periodic->type == SDL_HAPTIC_TRIANGLE) |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
589 dest->u.periodic.waveform = FF_TRIANGLE; |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
590 else if (periodic->type == SDL_HAPTIC_SAWTOOTHUP) |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
591 dest->u.periodic.waveform = FF_SAW_UP; |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
592 else if (periodic->type == SDL_HAPTIC_SAWTOOTHDOWN) |
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
593 dest->u.periodic.waveform = FF_SAW_DOWN; |
2481 | 594 dest->u.periodic.period = CLAMP(periodic->period); |
2480 | 595 dest->u.periodic.magnitude = periodic->magnitude; |
596 dest->u.periodic.offset = periodic->offset; | |
2526 | 597 /* Phase is calculated based of offset from period and then clamped. */ |
598 tmp = ((periodic->phase % 36000) * dest->u.periodic.period) / 36000; | |
599 dest->u.periodic.phase = CLAMP(tmp); | |
2480 | 600 |
601 /* Envelope */ | |
2481 | 602 dest->u.periodic.envelope.attack_length = CLAMP(periodic->attack_length); |
603 dest->u.periodic.envelope.attack_level = CLAMP(periodic->attack_level); | |
604 dest->u.periodic.envelope.fade_length = CLAMP(periodic->fade_length); | |
605 dest->u.periodic.envelope.fade_level = CLAMP(periodic->fade_level); | |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
606 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
607 break; |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
608 |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
609 case SDL_HAPTIC_SPRING: |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
610 case SDL_HAPTIC_DAMPER: |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
611 case SDL_HAPTIC_INERTIA: |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
612 case SDL_HAPTIC_FRICTION: |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
613 condition = &src->condition; |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
614 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
615 /* Header */ |
2503
84a634009a83
Another important typo mistake.
Edgar Simo <bobbens@gmail.com>
parents:
2502
diff
changeset
|
616 if (condition->type == SDL_HAPTIC_SPRING) |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
617 dest->type = FF_SPRING; |
2503
84a634009a83
Another important typo mistake.
Edgar Simo <bobbens@gmail.com>
parents:
2502
diff
changeset
|
618 else if (condition->type == SDL_HAPTIC_DAMPER) |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
619 dest->type = FF_DAMPER; |
2503
84a634009a83
Another important typo mistake.
Edgar Simo <bobbens@gmail.com>
parents:
2502
diff
changeset
|
620 else if (condition->type == SDL_HAPTIC_INERTIA) |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
621 dest->type = FF_INERTIA; |
2503
84a634009a83
Another important typo mistake.
Edgar Simo <bobbens@gmail.com>
parents:
2502
diff
changeset
|
622 else if (condition->type == SDL_HAPTIC_FRICTION) |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
623 dest->type = FF_FRICTION; |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
624 dest->direction = 0; /* Handled by the condition-specifics. */ |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
625 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
626 /* Replay */ |
2539
b4c41a7eea04
Properly support INFINITY length haptic effects on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2530
diff
changeset
|
627 dest->replay.length = (condition->length == SDL_HAPTIC_INFINITY) ? |
b4c41a7eea04
Properly support INFINITY length haptic effects on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2530
diff
changeset
|
628 0 : CLAMP(condition->length); |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
629 dest->replay.delay = CLAMP(condition->delay); |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
630 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
631 /* Trigger */ |
2556
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
632 dest->trigger.button = SDL_SYS_ToButton(condition->button); |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
633 dest->trigger.interval = CLAMP(condition->interval); |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
634 |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
635 /* Condition */ |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
636 /* X axis */ |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
637 dest->u.condition[0].right_saturation = CLAMP(condition->right_sat[0]); |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
638 dest->u.condition[0].left_saturation = CLAMP(condition->left_sat[0]); |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
639 dest->u.condition[0].right_coeff = condition->right_coeff[0]; |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
640 dest->u.condition[0].left_coeff = condition->left_coeff[0]; |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
641 dest->u.condition[0].deadband = CLAMP(condition->deadband[0]); |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
642 dest->u.condition[0].center = condition->center[0]; |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
643 /* Y axis */ |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
644 dest->u.condition[1].right_saturation = CLAMP(condition->right_sat[1]); |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
645 dest->u.condition[1].left_saturation = CLAMP(condition->left_sat[1]); |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
646 dest->u.condition[1].right_coeff = condition->right_coeff[1]; |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
647 dest->u.condition[1].left_coeff = condition->left_coeff[1]; |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
648 dest->u.condition[1].deadband = CLAMP(condition->deadband[1]); |
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
649 dest->u.condition[1].center = condition->center[1]; |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
650 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
651 break; |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
652 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
653 case SDL_HAPTIC_RAMP: |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
654 ramp = &src->ramp; |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
655 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
656 /* Header */ |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
657 dest->type = FF_RAMP; |
2500
5251d0510b7e
Implemented polar coordinates in linux.
Edgar Simo <bobbens@gmail.com>
parents:
2496
diff
changeset
|
658 dest->direction = SDL_SYS_ToDirection(&ramp->direction); |
2523
366d84fdf8d1
Haptic subsystem handles haptic axes now.
Edgar Simo <bobbens@gmail.com>
parents:
2519
diff
changeset
|
659 if (dest->direction < 0) return -1; |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
660 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
661 /* Replay */ |
2539
b4c41a7eea04
Properly support INFINITY length haptic effects on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2530
diff
changeset
|
662 dest->replay.length = (ramp->length == SDL_HAPTIC_INFINITY) ? |
b4c41a7eea04
Properly support INFINITY length haptic effects on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2530
diff
changeset
|
663 0 : CLAMP(ramp->length); |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
664 dest->replay.delay = CLAMP(ramp->delay); |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
665 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
666 /* Trigger */ |
2556
fe346eddd3fb
Updated button trigger stuff.
Edgar Simo <bobbens@gmail.com>
parents:
2539
diff
changeset
|
667 dest->trigger.button = SDL_SYS_ToButton(ramp->button); |
2482
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
668 dest->trigger.interval = CLAMP(ramp->interval); |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
669 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
670 /* Ramp */ |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
671 dest->u.ramp.start_level = ramp->start; |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
672 dest->u.ramp.end_level = ramp->end; |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
673 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
674 /* Envelope */ |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
675 dest->u.ramp.envelope.attack_length = CLAMP(ramp->attack_length); |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
676 dest->u.ramp.envelope.attack_level = CLAMP(ramp->attack_level); |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
677 dest->u.ramp.envelope.fade_length = CLAMP(ramp->fade_length); |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
678 dest->u.ramp.envelope.fade_level = CLAMP(ramp->fade_level); |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
679 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
680 break; |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
681 |
b51ad78812d5
Removed the linux only SDL_HAPTIC_RUMBLE (use PERIODIC instead).
Edgar Simo <bobbens@gmail.com>
parents:
2481
diff
changeset
|
682 |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
683 default: |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
684 SDL_SetError("Haptic: Unknown effect type."); |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
685 return -1; |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
686 } |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
687 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
688 return 0; |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
689 } |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
690 |
2483
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
691 |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
692 /* |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
693 * Creates a new haptic effect. |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
694 */ |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
695 int |
2480 | 696 SDL_SYS_HapticNewEffect(SDL_Haptic * haptic, struct haptic_effect * effect, |
697 SDL_HapticEffect * base) | |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
698 { |
2480 | 699 struct ff_effect * linux_effect; |
700 | |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
701 /* Allocate the hardware effect */ |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
702 effect->hweffect = (struct haptic_hweffect *) |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
703 SDL_malloc(sizeof(struct haptic_hweffect)); |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
704 if (effect->hweffect == NULL) { |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
705 SDL_OutOfMemory(); |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
706 return -1; |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
707 } |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
708 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
709 /* Prepare the ff_effect */ |
2480 | 710 linux_effect = &effect->hweffect->effect; |
711 if (SDL_SYS_ToFFEffect( linux_effect, base ) != 0) { | |
2488
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
712 goto new_effect_err; |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
713 } |
2480 | 714 linux_effect->id = -1; /* Have the kernel give it an id */ |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
715 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
716 /* Upload the effect */ |
2480 | 717 if (ioctl(haptic->hwdata->fd, EVIOCSFF, linux_effect) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
718 SDL_SetError("Haptic: Error uploading effect to the device: %s", strerror(errno)); |
2488
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
719 goto new_effect_err; |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
720 } |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
721 |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
722 return 0; |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
723 |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
724 new_effect_err: |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
725 free(effect->hweffect); |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
726 effect->hweffect = NULL; |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
727 return -1; |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
728 } |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
729 |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
730 |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
731 /* |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
732 * Updates an effect. |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
733 * |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
734 * Note: Dynamically updating the direction can in some cases force |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
735 * the effect to restart and run once. |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
736 */ |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
737 int SDL_SYS_HapticUpdateEffect(SDL_Haptic * haptic, |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
738 struct haptic_effect * effect, SDL_HapticEffect * data) |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
739 { |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
740 struct ff_effect linux_effect; |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
741 |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
742 /* Create the new effect */ |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
743 if (SDL_SYS_ToFFEffect( &linux_effect, data ) != 0) { |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
744 return -1; |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
745 } |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
746 linux_effect.id = effect->hweffect->effect.id; |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
747 |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
748 /* See if it can be uploaded. */ |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
749 if (ioctl(haptic->hwdata->fd, EVIOCSFF, &linux_effect) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
750 SDL_SetError("Haptic: Error updating the effect: %s", strerror(errno)); |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
751 return -1; |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
752 } |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
753 |
2488
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
754 /* Copy the new effect into memory. */ |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
755 SDL_memcpy( &effect->hweffect->effect, &linux_effect, sizeof(struct ff_effect) ); |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
756 |
8e2bdbccf7ff
Added SDL_HapticUpdateEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2487
diff
changeset
|
757 return effect->hweffect->effect.id; |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
758 } |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
759 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
760 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
761 /* |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
762 * Runs an effect. |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
763 */ |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
764 int |
2519
af9df9662807
More explicit with iterations and length.
Edgar Simo <bobbens@gmail.com>
parents:
2518
diff
changeset
|
765 SDL_SYS_HapticRunEffect(SDL_Haptic * haptic, struct haptic_effect * effect, |
af9df9662807
More explicit with iterations and length.
Edgar Simo <bobbens@gmail.com>
parents:
2518
diff
changeset
|
766 Uint32 iterations) |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
767 { |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
768 struct input_event run; |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
769 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
770 /* Prepare to run the effect */ |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
771 run.type = EV_FF; |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
772 run.code = effect->hweffect->effect.id; |
2539
b4c41a7eea04
Properly support INFINITY length haptic effects on linux.
Edgar Simo <bobbens@gmail.com>
parents:
2530
diff
changeset
|
773 /* We don't actually have infinity here, so we just do INT_MAX which is pretty damn close. */ |
2519
af9df9662807
More explicit with iterations and length.
Edgar Simo <bobbens@gmail.com>
parents:
2518
diff
changeset
|
774 run.value = (iterations > INT_MAX) ? INT_MAX : iterations; |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
775 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
776 if (write(haptic->hwdata->fd, (const void*) &run, sizeof(run)) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
777 SDL_SetError("Haptic: Unable to run the effect: %s", strerror(errno)); |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
778 return -1; |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
779 } |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
780 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
781 return 0; |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
782 } |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
783 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
784 |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
785 /* |
2485
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
786 * Stops an effect. |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
787 */ |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
788 int |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
789 SDL_SYS_HapticStopEffect(SDL_Haptic * haptic, struct haptic_effect * effect) |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
790 { |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
791 struct input_event stop; |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
792 |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
793 stop.type = EV_FF; |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
794 stop.code = effect->hweffect->effect.id; |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
795 stop.value = 0; |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
796 |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
797 if (write(haptic->hwdata->fd, (const void*) &stop, sizeof(stop)) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
798 SDL_SetError("Haptic: Unable to stop the effect: %s", strerror(errno)); |
2485
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
799 return -1; |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
800 } |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
801 |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
802 return 0; |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
803 } |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
804 |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
805 |
67978eea6d10
Added SDL_HapticStopEffect().
Edgar Simo <bobbens@gmail.com>
parents:
2484
diff
changeset
|
806 /* |
2487
4c8e25ef2d97
Merged seperate waveforms into types to be more compatible.
Edgar Simo <bobbens@gmail.com>
parents:
2486
diff
changeset
|
807 * Frees the effect. |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
808 */ |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
809 void |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
810 SDL_SYS_HapticDestroyEffect(SDL_Haptic * haptic, struct haptic_effect * effect) |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
811 { |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
812 if (ioctl(haptic->hwdata->fd, EVIOCRMFF, effect->hweffect->effect.id) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
813 SDL_SetError("Haptic: Error removing the effect from the device: %s", |
2496
8f840a6cdf01
Using errno for more verbosity in errors.
Edgar Simo <bobbens@gmail.com>
parents:
2495
diff
changeset
|
814 strerror(errno)); |
2479
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
815 } |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
816 SDL_free(effect->hweffect); |
b9eb2cfe16cd
Added some preliminary support for haptic effect control.
Edgar Simo <bobbens@gmail.com>
parents:
2478
diff
changeset
|
817 effect->hweffect = NULL; |
2477
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
818 } |
97f75ea43a93
Starting to add infrastructure to handle haptic effects.
Edgar Simo <bobbens@gmail.com>
parents:
2476
diff
changeset
|
819 |
2474
3f80bf1528b4
Properly quit the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
2472
diff
changeset
|
820 |
2483
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
821 /* |
2495
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
822 * Gets the status of a haptic effect. |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
823 */ |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
824 int |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
825 SDL_SYS_HapticGetEffectStatus(SDL_Haptic * haptic, struct haptic_effect * effect) |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
826 { |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
827 #if 0 /* Not supported atm. */ |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
828 struct input_event ie; |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
829 |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
830 ie.type = EV_FF; |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
831 ie.type = EV_FF_STATUS; |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
832 ie.code = effect->hweffect->effect.id; |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
833 |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
834 if (write(haptic->hwdata->fd, &ie, sizeof(ie)) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
835 SDL_SetError("Haptic: Error getting device status."); |
2495
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
836 return -1; |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
837 } |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
838 |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
839 return 0; |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
840 #endif |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
841 |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
842 return -1; |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
843 } |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
844 |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
845 |
66c02abeef0e
Added SDL_HapticGetEffectStatus().
Edgar Simo <bobbens@gmail.com>
parents:
2493
diff
changeset
|
846 /* |
2483
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
847 * Sets the gain. |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
848 */ |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
849 int |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
850 SDL_SYS_HapticSetGain(SDL_Haptic * haptic, int gain) |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
851 { |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
852 struct input_event ie; |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
853 |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
854 ie.type = EV_FF; |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
855 ie.code = FF_GAIN; |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
856 ie.value = (0xFFFFUL * gain) / 100; |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
857 |
2484
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
858 if (write(haptic->hwdata->fd, &ie, sizeof(ie)) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
859 SDL_SetError("Haptic: Error setting gain: %s", strerror(errno)); |
2484
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
860 return -1; |
2483
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
861 } |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
862 |
2484
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
863 return 0; |
2483
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
864 } |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
865 |
9d52368ebcf5
Setting effects memory to 0.
Edgar Simo <bobbens@gmail.com>
parents:
2482
diff
changeset
|
866 |
2484
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
867 /* |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
868 * Sets the autocentering. |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
869 */ |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
870 int |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
871 SDL_SYS_HapticSetAutocenter(SDL_Haptic * haptic, int autocenter) |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
872 { |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
873 struct input_event ie; |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
874 |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
875 ie.type = EV_FF; |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
876 ie.code = FF_AUTOCENTER; |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
877 ie.value = (0xFFFFUL * autocenter) / 100; |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
878 |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
879 if (write(haptic->hwdata->fd, &ie, sizeof(ie)) < 0) { |
2513
55fd9103a330
Prefixed all haptic errors with "Haptic:" for easier readability.
Edgar Simo <bobbens@gmail.com>
parents:
2512
diff
changeset
|
880 SDL_SetError("Haptic: Error setting autocenter: %s", strerror(errno)); |
2484
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
881 return -1; |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
882 } |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
883 |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
884 return 0; |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
885 } |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
886 |
666472fd4cb0
HapticSetGain checks to see if device supports it.
Edgar Simo <bobbens@gmail.com>
parents:
2483
diff
changeset
|
887 |
2472
3f73c88c9abb
First commit of the SDL_haptic subsystem.
Edgar Simo <bobbens@gmail.com>
parents:
diff
changeset
|
888 #endif /* SDL_HAPTIC_LINUX */ |