mirror of https://github.com/encounter/SDL.git
emscripten: Patched to compile with new joystick interfaces.
This commit is contained in:
parent
941f8ecffd
commit
b692c35237
|
@ -61,6 +61,9 @@ static SDL_JoystickDriver *SDL_joystick_drivers[] = {
|
||||||
#ifdef SDL_JOYSTICK_ANDROID
|
#ifdef SDL_JOYSTICK_ANDROID
|
||||||
&SDL_ANDROID_JoystickDriver,
|
&SDL_ANDROID_JoystickDriver,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef SDL_JOYSTICK_EMSCRIPTEN
|
||||||
|
&SDL_EMSCRIPTEN_JoystickDriver,
|
||||||
|
#endif
|
||||||
#ifdef SDL_JOYSTICK_HIDAPI
|
#ifdef SDL_JOYSTICK_HIDAPI
|
||||||
&SDL_HIDAPI_JoystickDriver,
|
&SDL_HIDAPI_JoystickDriver,
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -140,6 +140,7 @@ typedef struct _SDL_JoystickDriver
|
||||||
extern SDL_JoystickDriver SDL_ANDROID_JoystickDriver;
|
extern SDL_JoystickDriver SDL_ANDROID_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_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;
|
||||||
|
|
|
@ -156,11 +156,34 @@ Emscripten_JoyStickDisconnected(int eventType, const EmscriptenGamepadEvent *gam
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Function to perform any system-specific joystick related cleanup */
|
||||||
|
static void
|
||||||
|
EMSCRIPTEN_JoystickQuit(void)
|
||||||
|
{
|
||||||
|
SDL_joylist_item *item = NULL;
|
||||||
|
SDL_joylist_item *next = NULL;
|
||||||
|
|
||||||
|
for (item = SDL_joylist; item; item = next) {
|
||||||
|
next = item->next;
|
||||||
|
SDL_free(item->mapping);
|
||||||
|
SDL_free(item->name);
|
||||||
|
SDL_free(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_joylist = SDL_joylist_tail = NULL;
|
||||||
|
|
||||||
|
numjoysticks = 0;
|
||||||
|
instance_counter = 0;
|
||||||
|
|
||||||
|
emscripten_set_gamepadconnected_callback(NULL, 0, NULL);
|
||||||
|
emscripten_set_gamepaddisconnected_callback(NULL, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/* Function to scan the system for joysticks.
|
/* Function to scan the system for joysticks.
|
||||||
* It should return 0, or -1 on an unrecoverable fatal error.
|
* It should return 0, or -1 on an unrecoverable fatal error.
|
||||||
*/
|
*/
|
||||||
int
|
static int
|
||||||
SDL_SYS_JoystickInit(void)
|
EMSCRIPTEN_JoystickInit(void)
|
||||||
{
|
{
|
||||||
int retval, i, numjs;
|
int retval, i, numjs;
|
||||||
EmscriptenGamepadEvent gamepadState;
|
EmscriptenGamepadEvent gamepadState;
|
||||||
|
@ -190,7 +213,7 @@ SDL_SYS_JoystickInit(void)
|
||||||
Emscripten_JoyStickConnected);
|
Emscripten_JoyStickConnected);
|
||||||
|
|
||||||
if(retval != EMSCRIPTEN_RESULT_SUCCESS) {
|
if(retval != EMSCRIPTEN_RESULT_SUCCESS) {
|
||||||
SDL_SYS_JoystickQuit();
|
EMSCRIPTEN_JoystickQuit();
|
||||||
return SDL_SetError("Could not set gamepad connect callback");
|
return SDL_SetError("Could not set gamepad connect callback");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -198,7 +221,7 @@ SDL_SYS_JoystickInit(void)
|
||||||
0,
|
0,
|
||||||
Emscripten_JoyStickDisconnected);
|
Emscripten_JoyStickDisconnected);
|
||||||
if(retval != EMSCRIPTEN_RESULT_SUCCESS) {
|
if(retval != EMSCRIPTEN_RESULT_SUCCESS) {
|
||||||
SDL_SYS_JoystickQuit();
|
EMSCRIPTEN_JoystickQuit();
|
||||||
return SDL_SetError("Could not set gamepad disconnect callback");
|
return SDL_SetError("Could not set gamepad disconnect callback");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -239,26 +262,25 @@ JoystickByIndex(int index)
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
static int
|
||||||
SDL_SYS_NumJoysticks(void)
|
EMSCRIPTEN_JoystickGetCount(void)
|
||||||
{
|
{
|
||||||
return numjoysticks;
|
return numjoysticks;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
SDL_SYS_JoystickDetect(void)
|
EMSCRIPTEN_JoystickDetect(void)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to get the device-dependent name of a joystick */
|
static const char *
|
||||||
const char *
|
EMSCRIPTEN_JoystickGetDeviceName(int device_index)
|
||||||
SDL_SYS_JoystickNameForDeviceIndex(int device_index)
|
|
||||||
{
|
{
|
||||||
return JoystickByDeviceIndex(device_index)->name;
|
return JoystickByDeviceIndex(device_index)->name;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to perform the mapping from device index to the instance id for this index */
|
static SDL_JoystickID
|
||||||
SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int device_index)
|
EMSCRIPTEN_JoystickGetDeviceInstanceID(int device_index)
|
||||||
{
|
{
|
||||||
return JoystickByDeviceIndex(device_index)->device_instance;
|
return JoystickByDeviceIndex(device_index)->device_instance;
|
||||||
}
|
}
|
||||||
|
@ -268,8 +290,8 @@ SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex(int 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
|
static int
|
||||||
SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index)
|
EMSCRIPTEN_JoystickOpen(SDL_Joystick * joystick, int device_index)
|
||||||
{
|
{
|
||||||
SDL_joylist_item *item = JoystickByDeviceIndex(device_index);
|
SDL_joylist_item *item = JoystickByDeviceIndex(device_index);
|
||||||
|
|
||||||
|
@ -300,8 +322,8 @@ SDL_SYS_JoystickOpen(SDL_Joystick * joystick, int device_index)
|
||||||
* 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
|
static void
|
||||||
SDL_SYS_JoystickUpdate(SDL_Joystick * joystick)
|
EMSCRIPTEN_JoystickUpdate(SDL_Joystick * joystick)
|
||||||
{
|
{
|
||||||
EmscriptenGamepadEvent gamepadState;
|
EmscriptenGamepadEvent gamepadState;
|
||||||
SDL_joylist_item *item = (SDL_joylist_item *) joystick->hwdata;
|
SDL_joylist_item *item = (SDL_joylist_item *) joystick->hwdata;
|
||||||
|
@ -340,8 +362,8 @@ SDL_SYS_JoystickUpdate(SDL_Joystick * joystick)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to close a joystick after use */
|
/* Function to close a joystick after use */
|
||||||
void
|
static void
|
||||||
SDL_SYS_JoystickClose(SDL_Joystick * joystick)
|
EMSCRIPTEN_JoystickClose(SDL_Joystick * joystick)
|
||||||
{
|
{
|
||||||
SDL_joylist_item *item = (SDL_joylist_item *) joystick->hwdata;
|
SDL_joylist_item *item = (SDL_joylist_item *) joystick->hwdata;
|
||||||
if (item) {
|
if (item) {
|
||||||
|
@ -349,49 +371,36 @@ SDL_SYS_JoystickClose(SDL_Joystick * joystick)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Function to perform any system-specific joystick related cleanup */
|
static SDL_JoystickGUID
|
||||||
void
|
EMSCRIPTEN_JoystickGetDeviceGUID(int device_index)
|
||||||
SDL_SYS_JoystickQuit(void)
|
|
||||||
{
|
|
||||||
SDL_joylist_item *item = NULL;
|
|
||||||
SDL_joylist_item *next = NULL;
|
|
||||||
|
|
||||||
for (item = SDL_joylist; item; item = next) {
|
|
||||||
next = item->next;
|
|
||||||
SDL_free(item->mapping);
|
|
||||||
SDL_free(item->name);
|
|
||||||
SDL_free(item);
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_joylist = SDL_joylist_tail = NULL;
|
|
||||||
|
|
||||||
numjoysticks = 0;
|
|
||||||
instance_counter = 0;
|
|
||||||
|
|
||||||
emscripten_set_gamepadconnected_callback(NULL, 0, NULL);
|
|
||||||
emscripten_set_gamepaddisconnected_callback(NULL, 0, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_JoystickGUID
|
|
||||||
SDL_SYS_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 = EMSCRIPTEN_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
|
static int
|
||||||
SDL_SYS_JoystickGetGUID(SDL_Joystick * joystick)
|
EMSCRIPTEN_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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SDL_JoystickDriver SDL_EMSCRIPTEN_JoystickDriver =
|
||||||
|
{
|
||||||
|
EMSCRIPTEN_JoystickInit,
|
||||||
|
EMSCRIPTEN_JoystickGetCount,
|
||||||
|
EMSCRIPTEN_JoystickDetect,
|
||||||
|
EMSCRIPTEN_JoystickGetDeviceName,
|
||||||
|
EMSCRIPTEN_JoystickGetDeviceGUID,
|
||||||
|
EMSCRIPTEN_JoystickGetDeviceInstanceID,
|
||||||
|
EMSCRIPTEN_JoystickOpen,
|
||||||
|
EMSCRIPTEN_JoystickRumble,
|
||||||
|
EMSCRIPTEN_JoystickUpdate,
|
||||||
|
EMSCRIPTEN_JoystickClose,
|
||||||
|
EMSCRIPTEN_JoystickQuit,
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* SDL_JOYSTICK_EMSCRIPTEN */
|
#endif /* SDL_JOYSTICK_EMSCRIPTEN */
|
||||||
|
|
Loading…
Reference in New Issue