SDL
2.0
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
testhotplug.c
Go to the documentation of this file.
1
/*
2
Copyright (C) 1997-2018 Sam Lantinga <slouken@libsdl.org>
3
4
This software is provided 'as-is', without any express or implied
5
warranty. In no event will the authors be held liable for any damages
6
arising from the use of this software.
7
8
Permission is granted to anyone to use this software for any purpose,
9
including commercial applications, and to alter it and redistribute it
10
freely.
11
*/
12
13
/* Simple program to test the SDL joystick hotplugging */
14
15
#include <stdio.h>
16
#include <stdlib.h>
17
#include <string.h>
18
19
#include "
SDL.h
"
20
21
#if !defined SDL_JOYSTICK_DISABLED && !defined SDL_HAPTIC_DISABLED
22
23
int
24
main
(
int
argc,
char
*argv[])
25
{
26
SDL_Joystick *joystick =
NULL
;
27
SDL_Haptic *
haptic
=
NULL
;
28
SDL_JoystickID
instance = -1;
29
SDL_bool
keepGoing =
SDL_TRUE
;
30
int
i
;
31
SDL_bool
enable_haptic =
SDL_TRUE
;
32
Uint32
init_subsystems =
SDL_INIT_VIDEO
|
SDL_INIT_JOYSTICK
;
33
34
for
(i = 1; i < argc; ++
i
) {
35
if
(
SDL_strcasecmp
(argv[i],
"--nohaptic"
) == 0) {
36
enable_haptic =
SDL_FALSE
;
37
}
38
}
39
40
if
(enable_haptic) {
41
init_subsystems |=
SDL_INIT_HAPTIC
;
42
}
43
44
/* Enable standard application logging */
45
SDL_LogSetPriority
(
SDL_LOG_CATEGORY_APPLICATION
,
SDL_LOG_PRIORITY_INFO
);
46
47
SDL_SetHint
(
SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS
,
"1"
);
48
49
/* Initialize SDL (Note: video is required to start event loop) */
50
if
(
SDL_Init
(init_subsystems) < 0) {
51
SDL_LogError
(
SDL_LOG_CATEGORY_APPLICATION
,
"Couldn't initialize SDL: %s\n"
,
SDL_GetError
());
52
exit(1);
53
}
54
55
/*
56
//SDL_CreateWindow("Dummy", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 128, 128, 0);
57
*/
58
59
SDL_Log
(
"There are %d joysticks at startup\n"
,
SDL_NumJoysticks
());
60
if
(enable_haptic)
61
SDL_Log
(
"There are %d haptic devices at startup\n"
,
SDL_NumHaptics
());
62
63
while
(keepGoing)
64
{
65
SDL_Event
event
;
66
while
(
SDL_PollEvent
(&event))
67
{
68
switch
(event.
type
)
69
{
70
case
SDL_QUIT
:
71
keepGoing =
SDL_FALSE
;
72
break
;
73
case
SDL_JOYDEVICEADDED
:
74
if
(joystick !=
NULL
)
75
{
76
SDL_Log
(
"Only one joystick supported by this test\n"
);
77
}
78
else
79
{
80
joystick =
SDL_JoystickOpen
(event.
jdevice
.
which
);
81
instance =
SDL_JoystickInstanceID
(joystick);
82
SDL_Log
(
"Joy Added : %d : %s\n"
, event.
jdevice
.
which
,
SDL_JoystickName
(joystick));
83
if
(enable_haptic)
84
{
85
if
(
SDL_JoystickIsHaptic
(joystick))
86
{
87
haptic =
SDL_HapticOpenFromJoystick
(joystick);
88
if
(haptic)
89
{
90
SDL_Log
(
"Joy Haptic Opened\n"
);
91
if
(
SDL_HapticRumbleInit
( haptic ) != 0)
92
{
93
SDL_Log
(
"Could not init Rumble!: %s\n"
,
SDL_GetError
());
94
SDL_HapticClose
(haptic);
95
haptic =
NULL
;
96
}
97
}
else
{
98
SDL_Log
(
"Joy haptic open FAILED!: %s\n"
,
SDL_GetError
());
99
}
100
}
101
else
102
{
103
SDL_Log
(
"No haptic found\n"
);
104
}
105
}
106
}
107
break
;
108
case
SDL_JOYDEVICEREMOVED
:
109
if
(instance == event.
jdevice
.
which
)
110
{
111
SDL_Log
(
"Joy Removed: %d\n"
, event.
jdevice
.
which
);
112
instance = -1;
113
if
(enable_haptic && haptic)
114
{
115
SDL_HapticClose
(haptic);
116
haptic =
NULL
;
117
}
118
SDL_JoystickClose
(joystick);
119
joystick =
NULL
;
120
}
else
{
121
SDL_Log
(
"Unknown joystick diconnected\n"
);
122
}
123
break
;
124
case
SDL_JOYAXISMOTION
:
125
/*
126
// SDL_Log("Axis Move: %d\n", event.jaxis.axis);
127
*/
128
if
(enable_haptic)
129
SDL_HapticRumblePlay
(haptic, 0.25, 250);
130
break
;
131
case
SDL_JOYBUTTONDOWN
:
132
SDL_Log
(
"Button Press: %d\n"
, event.
jbutton
.
button
);
133
if
(enable_haptic && haptic)
134
{
135
SDL_HapticRumblePlay
(haptic, 0.25, 250);
136
}
137
if
(event.
jbutton
.
button
== 0) {
138
SDL_Log
(
"Exiting due to button press of button 0\n"
);
139
keepGoing =
SDL_FALSE
;
140
}
141
break
;
142
case
SDL_JOYBUTTONUP
:
143
SDL_Log
(
"Button Release: %d\n"
, event.
jbutton
.
button
);
144
break
;
145
}
146
}
147
}
148
149
SDL_Quit
();
150
151
return
0;
152
}
153
#else
154
155
int
156
main
(
int
argc,
char
*argv[])
157
{
158
SDL_LogError
(
SDL_LOG_CATEGORY_APPLICATION
,
"SDL compiled without Joystick and haptic support.\n"
);
159
return
1;
160
}
161
162
#endif
test
testhotplug.c
Generated on Sun Jun 26 2022 23:07:20 for SDL by
1.8.1.2