Mercurial > sdl-ios-xcode
comparison test/testjoystick.c @ 1895:c121d94672cb
SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Mon, 10 Jul 2006 21:04:37 +0000 |
parents | 5ff2c01e475e |
children | 893c862eed86 |
comparison
equal
deleted
inserted
replaced
1894:c69cee13dd76 | 1895:c121d94672cb |
---|---|
8 #include "SDL.h" | 8 #include "SDL.h" |
9 | 9 |
10 #define SCREEN_WIDTH 640 | 10 #define SCREEN_WIDTH 640 |
11 #define SCREEN_HEIGHT 480 | 11 #define SCREEN_HEIGHT 480 |
12 | 12 |
13 void WatchJoystick(SDL_Joystick *joystick) | 13 void |
14 WatchJoystick(SDL_Joystick * joystick) | |
14 { | 15 { |
15 SDL_Surface *screen; | 16 SDL_Surface *screen; |
16 const char *name; | 17 const char *name; |
17 int i, done; | 18 int i, done; |
18 SDL_Event event; | 19 SDL_Event event; |
19 int x, y, draw; | 20 int x, y, draw; |
20 SDL_Rect axis_area[2]; | 21 SDL_Rect axis_area[6][2]; |
21 | 22 |
22 /* Set a video mode to display joystick axis position */ | 23 /* Set a video mode to display joystick axis position */ |
23 screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, 0); | 24 screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 16, 0); |
24 if ( screen == NULL ) { | 25 if (screen == NULL) { |
25 fprintf(stderr, "Couldn't set video mode: %s\n",SDL_GetError()); | 26 fprintf(stderr, "Couldn't set video mode: %s\n", SDL_GetError()); |
26 return; | 27 return; |
27 } | 28 } |
28 | 29 |
29 /* Print info about the joystick we are watching */ | 30 /* Print info about the joystick we are watching */ |
30 name = SDL_JoystickName(SDL_JoystickIndex(joystick)); | 31 name = SDL_JoystickName(SDL_JoystickIndex(joystick)); |
31 printf("Watching joystick %d: (%s)\n", SDL_JoystickIndex(joystick), | 32 printf("Watching joystick %d: (%s)\n", SDL_JoystickIndex(joystick), |
32 name ? name : "Unknown Joystick"); | 33 name ? name : "Unknown Joystick"); |
33 printf("Joystick has %d axes, %d hats, %d balls, and %d buttons\n", | 34 printf("Joystick has %d axes, %d hats, %d balls, and %d buttons\n", |
34 SDL_JoystickNumAxes(joystick), SDL_JoystickNumHats(joystick), | 35 SDL_JoystickNumAxes(joystick), SDL_JoystickNumHats(joystick), |
35 SDL_JoystickNumBalls(joystick),SDL_JoystickNumButtons(joystick)); | 36 SDL_JoystickNumBalls(joystick), SDL_JoystickNumButtons(joystick)); |
36 | 37 |
37 /* Initialize drawing rectangles */ | 38 /* Initialize drawing rectangles */ |
38 memset(axis_area, 0, (sizeof axis_area)); | 39 memset(axis_area, 0, (sizeof axis_area)); |
39 draw = 0; | 40 draw = 0; |
40 | 41 |
41 /* Loop, getting joystick events! */ | 42 /* Loop, getting joystick events! */ |
42 done = 0; | 43 done = 0; |
43 while ( ! done ) { | 44 while (!done) { |
44 while ( SDL_PollEvent(&event) ) { | 45 while (SDL_PollEvent(&event)) { |
45 switch (event.type) { | 46 switch (event.type) { |
46 case SDL_JOYAXISMOTION: | 47 case SDL_JOYAXISMOTION: |
47 printf("Joystick %d axis %d value: %d\n", | 48 printf("Joystick %d axis %d value: %d\n", |
48 event.jaxis.which, | 49 event.jaxis.which, |
49 event.jaxis.axis, | 50 event.jaxis.axis, event.jaxis.value); |
50 event.jaxis.value); | 51 break; |
51 break; | 52 case SDL_JOYHATMOTION: |
52 case SDL_JOYHATMOTION: | 53 printf("Joystick %d hat %d value:", |
53 printf("Joystick %d hat %d value:", | 54 event.jhat.which, event.jhat.hat); |
54 event.jhat.which, | 55 if (event.jhat.value == SDL_HAT_CENTERED) |
55 event.jhat.hat); | 56 printf(" centered"); |
56 if ( event.jhat.value == SDL_HAT_CENTERED ) | 57 if (event.jhat.value & SDL_HAT_UP) |
57 printf(" centered"); | 58 printf(" up"); |
58 if ( event.jhat.value & SDL_HAT_UP ) | 59 if (event.jhat.value & SDL_HAT_RIGHT) |
59 printf(" up"); | 60 printf(" right"); |
60 if ( event.jhat.value & SDL_HAT_RIGHT ) | 61 if (event.jhat.value & SDL_HAT_DOWN) |
61 printf(" right"); | 62 printf(" down"); |
62 if ( event.jhat.value & SDL_HAT_DOWN ) | 63 if (event.jhat.value & SDL_HAT_LEFT) |
63 printf(" down"); | 64 printf(" left"); |
64 if ( event.jhat.value & SDL_HAT_LEFT ) | 65 printf("\n"); |
65 printf(" left"); | 66 break; |
66 printf("\n"); | 67 case SDL_JOYBALLMOTION: |
67 break; | 68 printf("Joystick %d ball %d delta: (%d,%d)\n", |
68 case SDL_JOYBALLMOTION: | 69 event.jball.which, |
69 printf("Joystick %d ball %d delta: (%d,%d)\n", | 70 event.jball.ball, event.jball.xrel, event.jball.yrel); |
70 event.jball.which, | 71 break; |
71 event.jball.ball, | 72 case SDL_JOYBUTTONDOWN: |
72 event.jball.xrel, | 73 printf("Joystick %d button %d down\n", |
73 event.jball.yrel); | 74 event.jbutton.which, event.jbutton.button); |
74 break; | 75 break; |
75 case SDL_JOYBUTTONDOWN: | 76 case SDL_JOYBUTTONUP: |
76 printf("Joystick %d button %d down\n", | 77 printf("Joystick %d button %d up\n", |
77 event.jbutton.which, | 78 event.jbutton.which, event.jbutton.button); |
78 event.jbutton.button); | 79 break; |
79 break; | 80 case SDL_KEYDOWN: |
80 case SDL_JOYBUTTONUP: | 81 if (event.key.keysym.sym != SDLK_ESCAPE) { |
81 printf("Joystick %d button %d up\n", | 82 break; |
82 event.jbutton.which, | 83 } |
83 event.jbutton.button); | 84 /* Fall through to signal quit */ |
84 break; | 85 case SDL_QUIT: |
85 case SDL_KEYDOWN: | 86 done = 1; |
86 if ( event.key.keysym.sym != SDLK_ESCAPE ) { | 87 break; |
87 break; | 88 default: |
88 } | 89 break; |
89 /* Fall through to signal quit */ | 90 } |
90 case SDL_QUIT: | 91 } |
91 done = 1; | 92 /* Update visual joystick state */ |
92 break; | 93 for (i = 0; i < SDL_JoystickNumButtons(joystick); ++i) { |
93 default: | 94 SDL_Rect area; |
94 break; | |
95 } | |
96 } | |
97 /* Update visual joystick state */ | |
98 for ( i=0; i<SDL_JoystickNumButtons(joystick); ++i ) { | |
99 SDL_Rect area; | |
100 | 95 |
101 area.x = i*34; | 96 area.x = i * 34; |
102 area.y = SCREEN_HEIGHT-34; | 97 area.y = SCREEN_HEIGHT - 34; |
103 area.w = 32; | 98 area.w = 32; |
104 area.h = 32; | 99 area.h = 32; |
105 if (SDL_JoystickGetButton(joystick, i) == SDL_PRESSED) { | 100 if (SDL_JoystickGetButton(joystick, i) == SDL_PRESSED) { |
106 SDL_FillRect(screen, &area, 0xFFFF); | 101 SDL_FillRect(screen, &area, 0xFFFF); |
107 } else { | 102 } else { |
108 SDL_FillRect(screen, &area, 0x0000); | 103 SDL_FillRect(screen, &area, 0x0000); |
109 } | 104 } |
110 SDL_UpdateRects(screen, 1, &area); | 105 SDL_UpdateRects(screen, 1, &area); |
111 } | 106 } |
112 | 107 |
113 /* Erase previous axes */ | 108 for (i = 0; |
114 SDL_FillRect(screen, &axis_area[draw], 0x0000); | 109 i < SDL_JoystickNumAxes(joystick) / 2 |
110 && i < SDL_arraysize(axis_area); ++i) { | |
111 /* Erase previous axes */ | |
112 SDL_FillRect(screen, &axis_area[i][draw], 0x0000); | |
115 | 113 |
116 /* Draw the X/Y axis */ | 114 /* Draw the X/Y axis */ |
117 draw = !draw; | 115 draw = !draw; |
118 x = (((int)SDL_JoystickGetAxis(joystick, 0))+32768); | 116 x = (((int) SDL_JoystickGetAxis(joystick, i * 2 + 0)) + 32768); |
119 x *= SCREEN_WIDTH; | 117 x *= SCREEN_WIDTH; |
120 x /= 65535; | 118 x /= 65535; |
121 if ( x < 0 ) { | 119 if (x < 0) { |
122 x = 0; | 120 x = 0; |
123 } else | 121 } else if (x > (SCREEN_WIDTH - 16)) { |
124 if ( x > (SCREEN_WIDTH-16) ) { | 122 x = SCREEN_WIDTH - 16; |
125 x = SCREEN_WIDTH-16; | 123 } |
126 } | 124 y = (((int) SDL_JoystickGetAxis(joystick, i * 2 + 1)) + 32768); |
127 y = (((int)SDL_JoystickGetAxis(joystick, 1))+32768); | 125 y *= SCREEN_HEIGHT; |
128 y *= SCREEN_HEIGHT; | 126 y /= 65535; |
129 y /= 65535; | 127 if (y < 0) { |
130 if ( y < 0 ) { | 128 y = 0; |
131 y = 0; | 129 } else if (y > (SCREEN_HEIGHT - 16)) { |
132 } else | 130 y = SCREEN_HEIGHT - 16; |
133 if ( y > (SCREEN_HEIGHT-16) ) { | 131 } |
134 y = SCREEN_HEIGHT-16; | 132 axis_area[i][draw].x = (Sint16) x; |
135 } | 133 axis_area[i][draw].y = (Sint16) y; |
136 axis_area[draw].x = (Sint16)x; | 134 axis_area[i][draw].w = 16; |
137 axis_area[draw].y = (Sint16)y; | 135 axis_area[i][draw].h = 16; |
138 axis_area[draw].w = 16; | 136 SDL_FillRect(screen, &axis_area[i][draw], 0xFFFF); |
139 axis_area[draw].h = 16; | |
140 SDL_FillRect(screen, &axis_area[draw], 0xFFFF); | |
141 | 137 |
142 SDL_UpdateRects(screen, 2, axis_area); | 138 SDL_UpdateRects(screen, 2, axis_area[i]); |
143 } | 139 } |
140 } | |
144 } | 141 } |
145 | 142 |
146 int main(int argc, char *argv[]) | 143 int |
144 main(int argc, char *argv[]) | |
147 { | 145 { |
148 const char *name; | 146 const char *name; |
149 int i; | 147 int i; |
150 SDL_Joystick *joystick; | 148 SDL_Joystick *joystick; |
151 | 149 |
152 /* Initialize SDL (Note: video is required to start event loop) */ | 150 /* Initialize SDL (Note: video is required to start event loop) */ |
153 if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK) < 0 ) { | 151 if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) { |
154 fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError()); | 152 fprintf(stderr, "Couldn't initialize SDL: %s\n", SDL_GetError()); |
155 exit(1); | 153 exit(1); |
156 } | 154 } |
157 | 155 |
158 /* Print information about the joysticks */ | 156 /* Print information about the joysticks */ |
159 printf("There are %d joysticks attached\n", SDL_NumJoysticks()); | 157 printf("There are %d joysticks attached\n", SDL_NumJoysticks()); |
160 for ( i=0; i<SDL_NumJoysticks(); ++i ) { | 158 for (i = 0; i < SDL_NumJoysticks(); ++i) { |
161 name = SDL_JoystickName(i); | 159 name = SDL_JoystickName(i); |
162 printf("Joystick %d: %s\n",i,name ? name : "Unknown Joystick"); | 160 printf("Joystick %d: %s\n", i, name ? name : "Unknown Joystick"); |
163 } | 161 } |
164 | 162 |
165 if ( argv[1] ) { | 163 if (argv[1]) { |
166 joystick = SDL_JoystickOpen(atoi(argv[1])); | 164 joystick = SDL_JoystickOpen(atoi(argv[1])); |
167 if ( joystick == NULL ) { | 165 if (joystick == NULL) { |
168 printf("Couldn't open joystick %d: %s\n", atoi(argv[1]), | 166 printf("Couldn't open joystick %d: %s\n", atoi(argv[1]), |
169 SDL_GetError()); | 167 SDL_GetError()); |
170 } else { | 168 } else { |
171 WatchJoystick(joystick); | 169 WatchJoystick(joystick); |
172 SDL_JoystickClose(joystick); | 170 SDL_JoystickClose(joystick); |
173 } | 171 } |
174 } | 172 } |
175 SDL_QuitSubSystem(SDL_INIT_VIDEO|SDL_INIT_JOYSTICK); | 173 SDL_QuitSubSystem(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK); |
176 | 174 |
177 return(0); | 175 return (0); |
178 } | 176 } |