21 #include "../../SDL_internal.h"
23 #ifdef SDL_JOYSTICK_HAIKU
27 #include <support/String.h>
28 #include <device/Joystick.h>
34 #include "../SDL_sysjoystick.h"
35 #include "../SDL_joystick_c.h"
39 #define MAX_JOYSTICKS 16
42 static char *SDL_joyport[MAX_JOYSTICKS];
43 static char *SDL_joyname[MAX_JOYSTICKS];
59 static int HAIKU_JoystickInit(
void)
64 char name[B_OS_NAME_LENGTH];
67 nports = joystick.CountDevices();
69 SDL_memset(SDL_joyport, 0, (
sizeof SDL_joyport));
70 SDL_memset(SDL_joyname, 0, (
sizeof SDL_joyname));
71 for (i = 0; (numjoysticks < MAX_JOYSTICKS) && (i < nports); ++
i)
73 if (joystick.GetDeviceName(i, name) == B_OK) {
74 if (joystick.Open(name) != B_ERROR) {
76 joystick.GetControllerName(&stick_name);
84 return (numjoysticks);
87 static int HAIKU_JoystickGetCount(
void)
92 static void HAIKU_JoystickDetect(
void)
97 static const char *HAIKU_JoystickGetDeviceName(
int device_index)
99 return SDL_joyname[device_index];
102 static int HAIKU_JoystickGetDevicePlayerIndex(
int device_index)
108 static SDL_JoystickID HAIKU_JoystickGetDeviceInstanceID(
int device_index)
113 static void HAIKU_JoystickClose(SDL_Joystick * joystick);
120 static int HAIKU_JoystickOpen(SDL_Joystick * joystick,
int device_index)
125 joystick->instance_id = device_index;
128 if (joystick->hwdata ==
NULL) {
131 SDL_memset(joystick->hwdata, 0,
sizeof(*joystick->hwdata));
132 stick =
new BJoystick;
133 joystick->hwdata->stick = stick;
136 if (stick->Open(SDL_joyport[device_index]) == B_ERROR) {
137 HAIKU_JoystickClose(joystick);
142 stick->EnableCalibration();
145 joystick->nbuttons = stick->CountButtons();
146 joystick->naxes = stick->CountAxes();
147 joystick->nhats = stick->CountHats();
149 joystick->hwdata->new_axes = (int16 *)
151 joystick->hwdata->new_hats = (uint8 *)
153 if (!joystick->hwdata->new_hats || !joystick->hwdata->new_axes) {
154 HAIKU_JoystickClose(joystick);
167 static void HAIKU_JoystickUpdate(SDL_Joystick * joystick)
169 static const Uint8 hat_map[9] = {
188 stick = joystick->hwdata->stick;
189 axes = joystick->hwdata->new_axes;
190 hats = joystick->hwdata->new_hats;
194 stick->GetAxisValues(axes);
195 stick->GetHatValues(hats);
196 buttons = stick->ButtonValues();
199 for (i = 0; i < joystick->naxes; ++
i) {
204 for (i = 0; i < joystick->nhats; ++
i) {
209 for (i = 0; i < joystick->nbuttons; ++
i) {
216 static void HAIKU_JoystickClose(SDL_Joystick * joystick)
218 if (joystick->hwdata) {
219 joystick->hwdata->stick->Close();
220 delete joystick->hwdata->stick;
221 SDL_free(joystick->hwdata->new_hats);
222 SDL_free(joystick->hwdata->new_axes);
228 static void HAIKU_JoystickQuit(
void)
235 SDL_joyport[0] =
NULL;
240 SDL_joyname[0] =
NULL;
247 const char *name = HAIKU_JoystickGetDeviceName( device_index );
253 static int HAIKU_JoystickRumble(SDL_Joystick * joystick,
Uint16 low_frequency_rumble,
Uint16 high_frequency_rumble,
Uint32 duration_ms)
261 HAIKU_JoystickGetCount,
262 HAIKU_JoystickDetect,
263 HAIKU_JoystickGetDeviceName,
264 HAIKU_JoystickGetDevicePlayerIndex,
265 HAIKU_JoystickGetDeviceGUID,
266 HAIKU_JoystickGetDeviceInstanceID,
268 HAIKU_JoystickRumble,
269 HAIKU_JoystickUpdate,
int SDL_PrivateJoystickHat(SDL_Joystick *joystick, Uint8 hat, Uint8 value)
int SDL_PrivateJoystickButton(SDL_Joystick *joystick, Uint8 button, Uint8 state)
int SDL_PrivateJoystickAxis(SDL_Joystick *joystick, Uint8 axis, Sint16 value)
GLuint const GLchar * name
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
#define SDL_HAT_RIGHTDOWN
#define SDL_OutOfMemory()
SDL_JoystickDriver SDL_HAIKU_JoystickDriver
#define SDL_Unsupported()