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 }