mirror of https://github.com/encounter/SDL.git
haiku: Patched to compile with new joystick interfaces.
This commit is contained in:
parent
e1ac643b32
commit
67a48ad13a
|
@ -64,6 +64,9 @@ static SDL_JoystickDriver *SDL_joystick_drivers[] = {
|
||||||
#ifdef SDL_JOYSTICK_EMSCRIPTEN
|
#ifdef SDL_JOYSTICK_EMSCRIPTEN
|
||||||
&SDL_EMSCRIPTEN_JoystickDriver,
|
&SDL_EMSCRIPTEN_JoystickDriver,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SDL_JOYSTICK_HAIKU
|
||||||
|
&SDL_HAIKU_JoystickDriver,
|
||||||
|
#endif
|
||||||
#ifdef SDL_JOYSTICK_USBHID /* !!! FIXME: "USBHID" is a generic name, and doubly-confusing with HIDAPI next to it. This is the *BSD interface, rename this. */
|
#ifdef SDL_JOYSTICK_USBHID /* !!! FIXME: "USBHID" is a generic name, and doubly-confusing with HIDAPI next to it. This is the *BSD interface, rename this. */
|
||||||
&SDL_BSD_JoystickDriver,
|
&SDL_BSD_JoystickDriver,
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -142,6 +142,7 @@ extern SDL_JoystickDriver SDL_BSD_JoystickDriver;
|
||||||
extern SDL_JoystickDriver SDL_DARWIN_JoystickDriver;
|
extern SDL_JoystickDriver SDL_DARWIN_JoystickDriver;
|
||||||
extern SDL_JoystickDriver SDL_DUMMY_JoystickDriver;
|
extern SDL_JoystickDriver SDL_DUMMY_JoystickDriver;
|
||||||
extern SDL_JoystickDriver SDL_EMSCRIPTEN_JoystickDriver;
|
extern SDL_JoystickDriver SDL_EMSCRIPTEN_JoystickDriver;
|
||||||
|
extern SDL_JoystickDriver SDL_HAIKU_JoystickDriver;
|
||||||
extern SDL_JoystickDriver SDL_HIDAPI_JoystickDriver;
|
extern SDL_JoystickDriver SDL_HIDAPI_JoystickDriver;
|
||||||
extern SDL_JoystickDriver SDL_IOS_JoystickDriver;
|
extern SDL_JoystickDriver SDL_IOS_JoystickDriver;
|
||||||
extern SDL_JoystickDriver SDL_LINUX_JoystickDriver;
|
extern SDL_JoystickDriver SDL_LINUX_JoystickDriver;
|
||||||
|
|
|
@ -50,13 +50,13 @@ extern "C"
|
||||||
int16 *new_axes;
|
int16 *new_axes;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int SDL_SYS_numjoysticks = 0;
|
static int numjoysticks = 0;
|
||||||
|
|
||||||
/* Function to scan the system for joysticks.
|
/* Function to scan the system for joysticks.
|
||||||
* Joystick 0 should be the system default joystick.
|
* Joystick 0 should be the system default joystick.
|
||||||
* It should return 0, or -1 on an unrecoverable fatal error.
|
* It should return 0, or -1 on an unrecoverable fatal error.
|
||||||
*/
|
*/
|
||||||
int SDL_SYS_JoystickInit(void)
|
static int HAIKU_JoystickInit(void)
|
||||||
{
|
{
|
||||||
BJoystick joystick;
|
BJoystick joystick;
|
||||||
int i;
|
int i;
|
||||||
|
@ -65,52 +65,54 @@ extern "C"
|
||||||
|
|
||||||
/* Search for attached joysticks */
|
/* Search for attached joysticks */
|
||||||
nports = joystick.CountDevices();
|
nports = joystick.CountDevices();
|
||||||
SDL_SYS_numjoysticks = 0;
|
numjoysticks = 0;
|
||||||
SDL_memset(SDL_joyport, 0, (sizeof SDL_joyport));
|
SDL_memset(SDL_joyport, 0, (sizeof SDL_joyport));
|
||||||
SDL_memset(SDL_joyname, 0, (sizeof SDL_joyname));
|
SDL_memset(SDL_joyname, 0, (sizeof SDL_joyname));
|
||||||
for (i = 0; (SDL_SYS_numjoysticks < MAX_JOYSTICKS) && (i < nports); ++i)
|
for (i = 0; (numjoysticks < MAX_JOYSTICKS) && (i < nports); ++i)
|
||||||
{
|
{
|
||||||
if (joystick.GetDeviceName(i, name) == B_OK) {
|
if (joystick.GetDeviceName(i, name) == B_OK) {
|
||||||
if (joystick.Open(name) != B_ERROR) {
|
if (joystick.Open(name) != B_ERROR) {
|
||||||
BString stick_name;
|
BString stick_name;
|
||||||
joystick.GetControllerName(&stick_name);
|
joystick.GetControllerName(&stick_name);
|
||||||
SDL_joyport[SDL_SYS_numjoysticks] = SDL_strdup(name);
|
SDL_joyport[numjoysticks] = SDL_strdup(name);
|
||||||
SDL_joyname[SDL_SYS_numjoysticks] = SDL_strdup(stick_name.String());
|
SDL_joyname[numjoysticks] = SDL_strdup(stick_name.String());
|
||||||
SDL_SYS_numjoysticks++;
|
numjoysticks++;
|
||||||
joystick.Close();
|
joystick.Close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return (SDL_SYS_numjoysticks);
|
return (numjoysticks);
|
||||||
}
|
}
|
||||||
|
|
||||||
int SDL_SYS_NumJoysticks(void)
|
static int HAIKU_JoystickGetCount(void)
|
||||||
{
|
{
|
||||||
return SDL_SYS_numjoysticks;
|
return numjoysticks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDL_SYS_JoystickDetect(void)
|
static void HAIKU_JoystickDetect(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to get the device-dependent name of a joystick */
|
/* Function to get the device-dependent name of a joystick */
|
||||||
const char *SDL_SYS_JoystickNameForDeviceIndex(int device_index)
|
static const char *HAIKU_JoystickGetDeviceName(int device_index)
|
||||||
{
|
{
|
||||||
return SDL_joyname[device_index];
|
return SDL_joyname[device_index];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to perform the mapping from device index to the instance id for this index */
|
/* Function to perform the mapping from device index to the instance id for this index */
|
||||||
SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index)
|
static SDL_JoystickID HAIKU_JoystickGetDeviceInstanceID(int device_index)
|
||||||
{
|
{
|
||||||
return device_index;
|
return device_index;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void HAIKU_JoystickClose(SDL_Joystick * joystick);
|
||||||
|
|
||||||
/* Function to open a joystick for use.
|
/* Function to open a joystick for use.
|
||||||
The joystick to open is specified by the device index.
|
The joystick to open is specified by the device index.
|
||||||
This should fill the nbuttons and naxes fields of the joystick structure.
|
This should fill the nbuttons and naxes fields of the joystick structure.
|
||||||
It returns 0, or -1 if there is an error.
|
It returns 0, or -1 if there is an error.
|
||||||
*/
|
*/
|
||||||
int SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index)
|
static int HAIKU_JoystickOpen(SDL_Joystick * joystick, int device_index)
|
||||||
{
|
{
|
||||||
BJoystick *stick;
|
BJoystick *stick;
|
||||||
|
|
||||||
|
@ -127,7 +129,7 @@ extern "C"
|
||||||
|
|
||||||
/* Open the requested joystick for use */
|
/* Open the requested joystick for use */
|
||||||
if (stick->Open(SDL_joyport[device_index]) == B_ERROR) {
|
if (stick->Open(SDL_joyport[device_index]) == B_ERROR) {
|
||||||
SDL_SYS_JoystickClose(joystick);
|
HAIKU_JoystickClose(joystick);
|
||||||
return SDL_SetError("Unable to open joystick");
|
return SDL_SetError("Unable to open joystick");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,12 +146,12 @@ extern "C"
|
||||||
joystick->hwdata->new_hats = (uint8 *)
|
joystick->hwdata->new_hats = (uint8 *)
|
||||||
SDL_malloc(joystick->nhats * sizeof(uint8));
|
SDL_malloc(joystick->nhats * sizeof(uint8));
|
||||||
if (!joystick->hwdata->new_hats || !joystick->hwdata->new_axes) {
|
if (!joystick->hwdata->new_hats || !joystick->hwdata->new_axes) {
|
||||||
SDL_SYS_JoystickClose(joystick);
|
HAIKU_JoystickClose(joystick);
|
||||||
return SDL_OutOfMemory();
|
return SDL_OutOfMemory();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* We're done! */
|
/* We're done! */
|
||||||
return (0);
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to update the state of a joystick - called as a device poll.
|
/* Function to update the state of a joystick - called as a device poll.
|
||||||
|
@ -157,7 +159,7 @@ extern "C"
|
||||||
* but instead should call SDL_PrivateJoystick*() to deliver events
|
* but instead should call SDL_PrivateJoystick*() to deliver events
|
||||||
* and update joystick device state.
|
* and update joystick device state.
|
||||||
*/
|
*/
|
||||||
void SDL_SYS_JoystickUpdate(SDL_Joystick * joystick)
|
static void HAIKU_JoystickUpdate(SDL_Joystick * joystick)
|
||||||
{
|
{
|
||||||
static const Uint8 hat_map[9] = {
|
static const Uint8 hat_map[9] = {
|
||||||
SDL_HAT_CENTERED,
|
SDL_HAT_CENTERED,
|
||||||
|
@ -206,7 +208,7 @@ extern "C"
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to close a joystick after use */
|
/* Function to close a joystick after use */
|
||||||
void SDL_SYS_JoystickClose(SDL_Joystick * joystick)
|
static void HAIKU_JoystickClose(SDL_Joystick * joystick)
|
||||||
{
|
{
|
||||||
if (joystick->hwdata) {
|
if (joystick->hwdata) {
|
||||||
joystick->hwdata->stick->Close();
|
joystick->hwdata->stick->Close();
|
||||||
|
@ -218,42 +220,52 @@ extern "C"
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to perform any system-specific joystick related cleanup */
|
/* Function to perform any system-specific joystick related cleanup */
|
||||||
void SDL_SYS_JoystickQuit(void)
|
static void HAIKU_JoystickQuit(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i = 0; i < SDL_SYS_numjoysticks; ++i) {
|
for (i = 0; i < numjoysticks; ++i) {
|
||||||
SDL_free(SDL_joyport[i]);
|
SDL_free(SDL_joyport[i]);
|
||||||
}
|
}
|
||||||
SDL_joyport[0] = NULL;
|
SDL_joyport[0] = NULL;
|
||||||
|
|
||||||
for (i = 0; i < SDL_SYS_numjoysticks; ++i) {
|
for (i = 0; i < numjoysticks; ++i) {
|
||||||
SDL_free(SDL_joyname[i]);
|
SDL_free(SDL_joyname[i]);
|
||||||
}
|
}
|
||||||
SDL_joyname[0] = NULL;
|
SDL_joyname[0] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID( int device_index )
|
static SDL_JoystickGUID HAIKU_JoystickGetDeviceGUID( int device_index )
|
||||||
{
|
{
|
||||||
SDL_JoystickGUID guid;
|
SDL_JoystickGUID guid;
|
||||||
/* the GUID is just the first 16 chars of the name for now */
|
/* the GUID is just the first 16 chars of the name for now */
|
||||||
const char *name = SDL_SYS_JoystickNameForDeviceIndex( device_index );
|
const char *name = HAIKU_JoystickGetDeviceName( device_index );
|
||||||
SDL_zero( guid );
|
SDL_zero( guid );
|
||||||
SDL_memcpy( &guid, name, SDL_min( sizeof(guid), SDL_strlen( name ) ) );
|
SDL_memcpy( &guid, name, SDL_min( sizeof(guid), SDL_strlen( name ) ) );
|
||||||
return guid;
|
return guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_JoystickGUID SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick)
|
static int HAIKU_JoystickRumble(SDL_Joystick * joystick, Uint16 low_frequency_rumble, Uint16 high_frequency_rumble, Uint32 duration_ms)
|
||||||
{
|
{
|
||||||
SDL_JoystickGUID guid;
|
return SDL_Unsupported();
|
||||||
/* the GUID is just the first 16 chars of the name for now */
|
|
||||||
const char *name = joystick->name;
|
|
||||||
SDL_zero( guid );
|
|
||||||
SDL_memcpy( &guid, name, SDL_min( sizeof(guid), SDL_strlen( name ) ) );
|
|
||||||
return guid;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}; // extern "C"
|
SDL_JoystickDriver SDL_HAIKU_JoystickDriver =
|
||||||
|
{
|
||||||
|
HAIKU_JoystickInit,
|
||||||
|
HAIKU_JoystickGetCount,
|
||||||
|
HAIKU_JoystickDetect,
|
||||||
|
HAIKU_JoystickGetDeviceName,
|
||||||
|
HAIKU_JoystickGetDeviceGUID,
|
||||||
|
HAIKU_JoystickGetDeviceInstanceID,
|
||||||
|
HAIKU_JoystickOpen,
|
||||||
|
HAIKU_JoystickRumble,
|
||||||
|
HAIKU_JoystickUpdate,
|
||||||
|
HAIKU_JoystickClose,
|
||||||
|
HAIKU_JoystickQuit,
|
||||||
|
};
|
||||||
|
|
||||||
|
} // extern "C"
|
||||||
|
|
||||||
#endif /* SDL_JOYSTICK_HAIKU */
|
#endif /* SDL_JOYSTICK_HAIKU */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue