Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
176 lines (158 loc) · 5.68 KB

testjoystick.c

File metadata and controls

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