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));
73 if (joystick.GetDeviceName(
i,
name) == B_OK) {
74 if (joystick.Open(
name) != B_ERROR) {
76 joystick.GetControllerName(&stick_name);
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;
132 stick =
new BJoystick;
136 if (stick->Open(SDL_joyport[device_index]) == B_ERROR) {
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 *)
167 static void HAIKU_JoystickUpdate(SDL_Joystick *
joystick)
169 static const Uint8 hat_map[9] = {
194 stick->GetAxisValues(
axes);
195 stick->GetHatValues(
hats);
196 buttons = stick->ButtonValues();
216 static void HAIKU_JoystickClose(SDL_Joystick *
joystick)
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,