Fixed building with an older SDK and macOS target
parent
268aa45645
commit
62e39b5fa7
|
@ -147,6 +147,15 @@
|
||||||
#define SDL_JOYSTICK_MFI 1
|
#define SDL_JOYSTICK_MFI 1
|
||||||
#define SDL_HAPTIC_IOKIT 1
|
#define SDL_HAPTIC_IOKIT 1
|
||||||
|
|
||||||
|
/* The MFI controller support requires ARC Objective C runtime */
|
||||||
|
#if TARGET_OS_OSX
|
||||||
|
# if __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_8
|
||||||
|
# undef SDL_JOYSTICK_MFI
|
||||||
|
# elif defined(__i386__) && __MAC_OS_X_VERSION_MIN_REQUIRED < __MAC_10_12
|
||||||
|
# undef SDL_JOYSTICK_MFI
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Enable the dummy sensor driver */
|
/* Enable the dummy sensor driver */
|
||||||
#define SDL_SENSOR_DUMMY 1
|
#define SDL_SENSOR_DUMMY 1
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ static SDL_JoystickDriver *SDL_joystick_drivers[] = {
|
||||||
#ifdef SDL_JOYSTICK_IOKIT
|
#ifdef SDL_JOYSTICK_IOKIT
|
||||||
&SDL_DARWIN_JoystickDriver,
|
&SDL_DARWIN_JoystickDriver,
|
||||||
#endif
|
#endif
|
||||||
#if (defined(__IPHONEOS__) || defined(__TVOS__)) && !defined(SDL_JOYSTICK_DISABLED)
|
#if (defined(__MACOSX__) || defined(__IPHONEOS__) || defined(__TVOS__)) && !defined(SDL_JOYSTICK_DISABLED)
|
||||||
&SDL_IOS_JoystickDriver,
|
&SDL_IOS_JoystickDriver,
|
||||||
#endif
|
#endif
|
||||||
#ifdef SDL_JOYSTICK_ANDROID
|
#ifdef SDL_JOYSTICK_ANDROID
|
||||||
|
|
|
@ -42,7 +42,8 @@
|
||||||
#include "../../events/SDL_events_c.h"
|
#include "../../events/SDL_events_c.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !TARGET_OS_TV
|
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
||||||
|
#define SDL_JOYSTICK_iOS_ACCELEROMETER
|
||||||
#import <CoreMotion/CoreMotion.h>
|
#import <CoreMotion/CoreMotion.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -100,10 +101,10 @@ static id disconnectObserver = nil;
|
||||||
|
|
||||||
#endif /* SDL_JOYSTICK_MFI */
|
#endif /* SDL_JOYSTICK_MFI */
|
||||||
|
|
||||||
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
#ifdef SDL_JOYSTICK_iOS_ACCELEROMETER
|
||||||
static const char *accelerometerName = "iOS Accelerometer";
|
static const char *accelerometerName = "iOS Accelerometer";
|
||||||
static CMMotionManager *motionManager = nil;
|
static CMMotionManager *motionManager = nil;
|
||||||
#endif /* !TARGET_OS_TV */
|
#endif /* SDL_JOYSTICK_iOS_ACCELEROMETER */
|
||||||
|
|
||||||
static SDL_JoystickDeviceItem *deviceList = NULL;
|
static SDL_JoystickDeviceItem *deviceList = NULL;
|
||||||
|
|
||||||
|
@ -127,10 +128,10 @@ GetDeviceForIndex(int device_index)
|
||||||
return device;
|
return device;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef SDL_JOYSTICK_MFI
|
||||||
static void
|
static void
|
||||||
IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCController *controller)
|
IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCController *controller)
|
||||||
{
|
{
|
||||||
#ifdef SDL_JOYSTICK_MFI
|
|
||||||
Uint16 *guid16 = (Uint16 *)device->guid.data;
|
Uint16 *guid16 = (Uint16 *)device->guid.data;
|
||||||
Uint16 vendor = 0;
|
Uint16 vendor = 0;
|
||||||
Uint16 product = 0;
|
Uint16 product = 0;
|
||||||
|
@ -328,10 +329,10 @@ IOS_AddMFIJoystickDevice(SDL_JoystickDeviceItem *device, GCController *controlle
|
||||||
/* This will be set when the first button press of the controller is
|
/* This will be set when the first button press of the controller is
|
||||||
* detected. */
|
* detected. */
|
||||||
controller.playerIndex = -1;
|
controller.playerIndex = -1;
|
||||||
|
|
||||||
#endif /* SDL_JOYSTICK_MFI */
|
|
||||||
}
|
}
|
||||||
|
#endif /* SDL_JOYSTICK_MFI */
|
||||||
|
|
||||||
|
#if defined(SDL_JOYSTICK_iOS_ACCELEROMETER) || defined(SDL_JOYSTICK_MFI)
|
||||||
static void
|
static void
|
||||||
IOS_AddJoystickDevice(GCController *controller, SDL_bool accelerometer)
|
IOS_AddJoystickDevice(GCController *controller, SDL_bool accelerometer)
|
||||||
{
|
{
|
||||||
|
@ -362,10 +363,7 @@ IOS_AddJoystickDevice(GCController *controller, SDL_bool accelerometer)
|
||||||
device->instance_id = SDL_GetNextJoystickInstanceID();
|
device->instance_id = SDL_GetNextJoystickInstanceID();
|
||||||
|
|
||||||
if (accelerometer) {
|
if (accelerometer) {
|
||||||
#if TARGET_OS_TV || TARGET_OS_OSX
|
#ifdef SDL_JOYSTICK_iOS_ACCELEROMETER
|
||||||
SDL_free(device);
|
|
||||||
return;
|
|
||||||
#else
|
|
||||||
device->name = SDL_strdup(accelerometerName);
|
device->name = SDL_strdup(accelerometerName);
|
||||||
device->naxes = 3; /* Device acceleration in the x, y, and z axes. */
|
device->naxes = 3; /* Device acceleration in the x, y, and z axes. */
|
||||||
device->nhats = 0;
|
device->nhats = 0;
|
||||||
|
@ -373,9 +371,17 @@ IOS_AddJoystickDevice(GCController *controller, SDL_bool accelerometer)
|
||||||
|
|
||||||
/* Use the accelerometer name as a GUID. */
|
/* Use the accelerometer name as a GUID. */
|
||||||
SDL_memcpy(&device->guid.data, device->name, SDL_min(sizeof(SDL_JoystickGUID), SDL_strlen(device->name)));
|
SDL_memcpy(&device->guid.data, device->name, SDL_min(sizeof(SDL_JoystickGUID), SDL_strlen(device->name)));
|
||||||
#endif /* TARGET_OS_TV */
|
#else
|
||||||
|
SDL_free(device);
|
||||||
|
return;
|
||||||
|
#endif /* SDL_JOYSTICK_iOS_ACCELEROMETER */
|
||||||
} else if (controller) {
|
} else if (controller) {
|
||||||
|
#ifdef SDL_JOYSTICK_MFI
|
||||||
IOS_AddMFIJoystickDevice(device, controller);
|
IOS_AddMFIJoystickDevice(device, controller);
|
||||||
|
#else
|
||||||
|
SDL_free(device);
|
||||||
|
return;
|
||||||
|
#endif /* SDL_JOYSTICK_MFI */
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deviceList == NULL) {
|
if (deviceList == NULL) {
|
||||||
|
@ -392,6 +398,7 @@ IOS_AddJoystickDevice(GCController *controller, SDL_bool accelerometer)
|
||||||
|
|
||||||
SDL_PrivateJoystickAdded(device->instance_id);
|
SDL_PrivateJoystickAdded(device->instance_id);
|
||||||
}
|
}
|
||||||
|
#endif /* SDL_JOYSTICK_iOS_ACCELEROMETER || SDL_JOYSTICK_MFI */
|
||||||
|
|
||||||
static SDL_JoystickDeviceItem *
|
static SDL_JoystickDeviceItem *
|
||||||
IOS_RemoveJoystickDevice(SDL_JoystickDeviceItem *device)
|
IOS_RemoveJoystickDevice(SDL_JoystickDeviceItem *device)
|
||||||
|
@ -467,12 +474,12 @@ static int
|
||||||
IOS_JoystickInit(void)
|
IOS_JoystickInit(void)
|
||||||
{
|
{
|
||||||
if (@available(macos 11.0, *)) @autoreleasepool {
|
if (@available(macos 11.0, *)) @autoreleasepool {
|
||||||
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
#ifdef SDL_JOYSTICK_iOS_ACCELEROMETER
|
||||||
if (SDL_GetHintBoolean(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_TRUE)) {
|
if (SDL_GetHintBoolean(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_TRUE)) {
|
||||||
/* Default behavior, accelerometer as joystick */
|
/* Default behavior, accelerometer as joystick */
|
||||||
IOS_AddJoystickDevice(nil, SDL_TRUE);
|
IOS_AddJoystickDevice(nil, SDL_TRUE);
|
||||||
}
|
}
|
||||||
#endif /* !TARGET_OS_TV */
|
#endif
|
||||||
|
|
||||||
#ifdef SDL_JOYSTICK_MFI
|
#ifdef SDL_JOYSTICK_MFI
|
||||||
/* GameController.framework was added in iOS 7. */
|
/* GameController.framework was added in iOS 7. */
|
||||||
|
@ -606,7 +613,7 @@ IOS_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
||||||
|
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
if (device->accelerometer) {
|
if (device->accelerometer) {
|
||||||
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
#ifdef SDL_JOYSTICK_iOS_ACCELEROMETER
|
||||||
if (motionManager == nil) {
|
if (motionManager == nil) {
|
||||||
motionManager = [[CMMotionManager alloc] init];
|
motionManager = [[CMMotionManager alloc] init];
|
||||||
}
|
}
|
||||||
|
@ -614,7 +621,7 @@ IOS_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
||||||
/* Shorter times between updates can significantly increase CPU usage. */
|
/* Shorter times between updates can significantly increase CPU usage. */
|
||||||
motionManager.accelerometerUpdateInterval = 0.1;
|
motionManager.accelerometerUpdateInterval = 0.1;
|
||||||
[motionManager startAccelerometerUpdates];
|
[motionManager startAccelerometerUpdates];
|
||||||
#endif /* !TARGET_OS_TV */
|
#endif
|
||||||
} else {
|
} else {
|
||||||
#ifdef SDL_JOYSTICK_MFI
|
#ifdef SDL_JOYSTICK_MFI
|
||||||
if (device->uses_pause_handler) {
|
if (device->uses_pause_handler) {
|
||||||
|
@ -652,7 +659,7 @@ IOS_JoystickOpen(SDL_Joystick *joystick, int device_index)
|
||||||
static void
|
static void
|
||||||
IOS_AccelerometerUpdate(SDL_Joystick *joystick)
|
IOS_AccelerometerUpdate(SDL_Joystick *joystick)
|
||||||
{
|
{
|
||||||
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
#ifdef SDL_JOYSTICK_iOS_ACCELEROMETER
|
||||||
const float maxgforce = SDL_IPHONE_MAX_GFORCE;
|
const float maxgforce = SDL_IPHONE_MAX_GFORCE;
|
||||||
const SInt16 maxsint16 = 0x7FFF;
|
const SInt16 maxsint16 = 0x7FFF;
|
||||||
CMAcceleration accel;
|
CMAcceleration accel;
|
||||||
|
@ -690,7 +697,7 @@ IOS_AccelerometerUpdate(SDL_Joystick *joystick)
|
||||||
SDL_PrivateJoystickAxis(joystick, 0, (accel.x / maxgforce) * maxsint16);
|
SDL_PrivateJoystickAxis(joystick, 0, (accel.x / maxgforce) * maxsint16);
|
||||||
SDL_PrivateJoystickAxis(joystick, 1, -(accel.y / maxgforce) * maxsint16);
|
SDL_PrivateJoystickAxis(joystick, 1, -(accel.y / maxgforce) * maxsint16);
|
||||||
SDL_PrivateJoystickAxis(joystick, 2, (accel.z / maxgforce) * maxsint16);
|
SDL_PrivateJoystickAxis(joystick, 2, (accel.z / maxgforce) * maxsint16);
|
||||||
#endif /* !TARGET_OS_TV */
|
#endif /* SDL_JOYSTICK_iOS_ACCELEROMETER */
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef SDL_JOYSTICK_MFI
|
#ifdef SDL_JOYSTICK_MFI
|
||||||
|
@ -1306,9 +1313,9 @@ IOS_JoystickClose(SDL_Joystick *joystick)
|
||||||
#endif /* ENABLE_MFI_RUMBLE */
|
#endif /* ENABLE_MFI_RUMBLE */
|
||||||
|
|
||||||
if (device->accelerometer) {
|
if (device->accelerometer) {
|
||||||
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
#ifdef SDL_JOYSTICK_iOS_ACCELEROMETER
|
||||||
[motionManager stopAccelerometerUpdates];
|
[motionManager stopAccelerometerUpdates];
|
||||||
#endif /* !TARGET_OS_TV */
|
#endif
|
||||||
} else if (device->controller) {
|
} else if (device->controller) {
|
||||||
#ifdef SDL_JOYSTICK_MFI
|
#ifdef SDL_JOYSTICK_MFI
|
||||||
GCController *controller = device->controller;
|
GCController *controller = device->controller;
|
||||||
|
@ -1349,9 +1356,9 @@ IOS_JoystickQuit(void)
|
||||||
IOS_RemoveJoystickDevice(deviceList);
|
IOS_RemoveJoystickDevice(deviceList);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !TARGET_OS_TV && !TARGET_OS_OSX
|
#ifdef SDL_JOYSTICK_iOS_ACCELEROMETER
|
||||||
motionManager = nil;
|
motionManager = nil;
|
||||||
#endif /* !TARGET_OS_TV */
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
numjoysticks = 0;
|
numjoysticks = 0;
|
||||||
|
@ -1367,11 +1374,12 @@ IOS_JoystickGetGamepadMapping(int device_index, SDL_GamepadMapping *out)
|
||||||
extern SDL_bool IOS_SupportedHIDDevice(IOHIDDeviceRef device);
|
extern SDL_bool IOS_SupportedHIDDevice(IOHIDDeviceRef device);
|
||||||
SDL_bool IOS_SupportedHIDDevice(IOHIDDeviceRef device)
|
SDL_bool IOS_SupportedHIDDevice(IOHIDDeviceRef device)
|
||||||
{
|
{
|
||||||
|
#ifdef SDL_JOYSTICK_MFI
|
||||||
if (@available(macOS 11.0, *)) {
|
if (@available(macOS 11.0, *)) {
|
||||||
return [GCController supportsHIDDevice:device] ? SDL_TRUE : SDL_FALSE;
|
return [GCController supportsHIDDevice:device] ? SDL_TRUE : SDL_FALSE;
|
||||||
} else {
|
|
||||||
return SDL_FALSE;
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
return SDL_FALSE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue