SDL  2.0
SDL_sysjoystick.h File Reference
#include "../SDL_internal.h"
#include "SDL_joystick.h"
#include "SDL_joystick_c.h"
+ Include dependency graph for SDL_sysjoystick.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  SDL_JoystickAxisInfo
 
struct  SDL_Joystick
 
struct  SDL_Joystick::balldelta
 

Macros

#define MAKE_VIDPID(VID, PID)   (((Uint32)(VID))<<16|(PID))
 

Functions

int SDL_SYS_JoystickInit (void)
 
int SDL_SYS_NumJoysticks (void)
 
void SDL_SYS_JoystickDetect (void)
 
const char * SDL_SYS_JoystickNameForDeviceIndex (int device_index)
 
SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex (int device_index)
 
int SDL_SYS_JoystickOpen (SDL_Joystick *joystick, int device_index)
 
SDL_bool SDL_SYS_JoystickAttached (SDL_Joystick *joystick)
 
void SDL_SYS_JoystickUpdate (SDL_Joystick *joystick)
 
void SDL_SYS_JoystickClose (SDL_Joystick *joystick)
 
void SDL_SYS_JoystickQuit (void)
 
SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID (int device_index)
 
SDL_JoystickGUID SDL_SYS_JoystickGetGUID (SDL_Joystick *joystick)
 

Macro Definition Documentation

◆ MAKE_VIDPID

Function Documentation

◆ SDL_SYS_GetInstanceIdOfDeviceIndex()

SDL_JoystickID SDL_SYS_GetInstanceIdOfDeviceIndex ( int  device_index)

Definition at line 349 of file SDL_sysjoystick.m.

References device, GetDeviceForIndex(), and recDevice::instance_id.

Referenced by SDL_GameControllerOpen(), and SDL_JoystickGetDeviceInstanceID().

350 {
352  return device ? device->instance_id : 0;
353 }
static SDL_JoystickDeviceItem * GetDeviceForIndex(int device_index)
static SDL_AudioDeviceID device
Definition: loopwave.c:37

◆ SDL_SYS_JoystickAttached()

SDL_bool SDL_SYS_JoystickAttached ( SDL_Joystick *  joystick)

Definition at line 406 of file SDL_sysjoystick.m.

References NULL.

Referenced by SDL_JoystickGetAttached().

407 {
408  return joystick->hwdata != NULL;
409 }
#define NULL
Definition: begin_code.h:164

◆ SDL_SYS_JoystickClose()

void SDL_SYS_JoystickClose ( SDL_Joystick *  joystick)

Definition at line 641 of file SDL_sysjoystick.m.

References recDevice::accelerometer, recDevice::controller, device, recDevice::joystick, and NULL.

Referenced by SDL_JoystickClose().

642 {
643  SDL_JoystickDeviceItem *device = joystick->hwdata;
644 
645  if (device == NULL) {
646  return;
647  }
648 
649  device->joystick = NULL;
650 
651  @autoreleasepool {
652  if (device->accelerometer) {
653 #if !TARGET_OS_TV
654  [motionManager stopAccelerometerUpdates];
655 #endif /* !TARGET_OS_TV */
656  } else if (device->controller) {
657 #ifdef SDL_JOYSTICK_MFI
658  GCController *controller = device->controller;
659  controller.controllerPausedHandler = nil;
660  controller.playerIndex = -1;
661 #endif
662  }
663  }
664 }
SDL_Joystick * joystick
static SDL_AudioDeviceID device
Definition: loopwave.c:37
#define NULL
Definition: begin_code.h:164
GCController __unsafe_unretained * controller
static CMMotionManager * motionManager

◆ SDL_SYS_JoystickDetect()

void SDL_SYS_JoystickDetect ( void  )

Definition at line 336 of file SDL_sysjoystick.m.

Referenced by SDL_JoystickUpdate().

337 {
338 }

◆ SDL_SYS_JoystickGetDeviceGUID()

SDL_JoystickGUID SDL_SYS_JoystickGetDeviceGUID ( int  device_index)

Definition at line 703 of file SDL_sysjoystick.m.

References device, GetDeviceForIndex(), recDevice::guid, and SDL_zero.

Referenced by SDL_JoystickGetDeviceGUID().

704 {
706  SDL_JoystickGUID guid;
707  if (device) {
708  guid = device->guid;
709  } else {
710  SDL_zero(guid);
711  }
712  return guid;
713 }
SDL_JoystickGUID guid
static SDL_JoystickDeviceItem * GetDeviceForIndex(int device_index)
static SDL_AudioDeviceID device
Definition: loopwave.c:37
#define SDL_zero(x)
Definition: SDL_stdinc.h:385

◆ SDL_SYS_JoystickGetGUID()

SDL_JoystickGUID SDL_SYS_JoystickGetGUID ( SDL_Joystick *  joystick)

Definition at line 716 of file SDL_sysjoystick.m.

References recDevice::guid, and SDL_zero.

Referenced by SDL_JoystickGetGUID().

717 {
718  SDL_JoystickGUID guid;
719  if (joystick->hwdata) {
720  guid = joystick->hwdata->guid;
721  } else {
722  SDL_zero(guid);
723  }
724  return guid;
725 }
#define SDL_zero(x)
Definition: SDL_stdinc.h:385

◆ SDL_SYS_JoystickInit()

int SDL_SYS_JoystickInit ( void  )

Definition at line 274 of file SDL_sysjoystick.m.

References recDevice::controller, sort_controllers::controllers, NULL, numjoysticks, SDL_AddHintCallback, SDL_FALSE, SDL_GetHintBoolean, SDL_HINT_ACCELEROMETER_AS_JOYSTICK, SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION, SDL_SYS_AddJoystickDevice(), and SDL_TRUE.

Referenced by SDL_JoystickInit().

275 {
276  @autoreleasepool {
277  NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
278 
279 #if !TARGET_OS_TV
281  /* Default behavior, accelerometer as joystick */
283  }
284 #endif /* !TARGET_OS_TV */
285 
286 #ifdef SDL_JOYSTICK_MFI
287  /* GameController.framework was added in iOS 7. */
288  if (![GCController class]) {
289  return numjoysticks;
290  }
291 
292  for (GCController *controller in [GCController controllers]) {
294  }
295 
296 #if TARGET_OS_TV
298  SDL_AppleTVRemoteRotationHintChanged, NULL);
299 #endif /* TARGET_OS_TV */
300 
301  connectObserver = [center addObserverForName:GCControllerDidConnectNotification
302  object:nil
303  queue:nil
304  usingBlock:^(NSNotification *note) {
305  GCController *controller = note.object;
307  }];
308 
309  disconnectObserver = [center addObserverForName:GCControllerDidDisconnectNotification
310  object:nil
311  queue:nil
312  usingBlock:^(NSNotification *note) {
313  GCController *controller = note.object;
315  while (device != NULL) {
316  if (device->controller == controller) {
318  break;
319  }
320  device = device->next;
321  }
322  }];
323 #endif /* SDL_JOYSTICK_MFI */
324  }
325 
326  return numjoysticks;
327 }
static SDL_JoystickDeviceItem * deviceList
#define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION
A variable controlling whether the Apple TV remote&#39;s joystick axes will automatically match the rotat...
Definition: SDL_hints.h:355
struct joystick_hwdata * next
#define SDL_GetHintBoolean
static SDL_AudioDeviceID device
Definition: loopwave.c:37
#define SDL_HINT_ACCELEROMETER_AS_JOYSTICK
A variable controlling whether the Android / iOS built-in accelerometer should be listed as a joystic...
Definition: SDL_hints.h:366
#define NULL
Definition: begin_code.h:164
#define SDL_AddHintCallback
static SDL_JoystickDeviceItem * SDL_SYS_RemoveJoystickDevice(SDL_JoystickDeviceItem *device)
static int numjoysticks
GLuint in
static void SDL_SYS_AddJoystickDevice(GCController *controller, SDL_bool accelerometer)
GCController __unsafe_unretained * controller
GLuint object

◆ SDL_SYS_JoystickNameForDeviceIndex()

const char* SDL_SYS_JoystickNameForDeviceIndex ( int  device_index)

Definition at line 342 of file SDL_sysjoystick.m.

References device, GetDeviceForIndex(), and recDevice::name.

Referenced by SDL_JoystickNameForIndex(), and SDL_JoystickOpen().

343 {
345  return device ? device->name : "Unknown";
346 }
static SDL_JoystickDeviceItem * GetDeviceForIndex(int device_index)
static SDL_AudioDeviceID device
Definition: loopwave.c:37

◆ SDL_SYS_JoystickOpen()

int SDL_SYS_JoystickOpen ( SDL_Joystick *  joystick,
int  device_index 
)

Definition at line 361 of file SDL_sysjoystick.m.

References recDevice::accelerometer, recDevice::controller, device, GetDeviceForIndex(), recDevice::instance_id, recDevice::joystick, motionManager, recDevice::naxes, recDevice::nbuttons, recDevice::nhats, NULL, and SDL_SetError.

Referenced by SDL_JoystickOpen().

362 {
364  if (device == NULL) {
365  return SDL_SetError("Could not open Joystick: no hardware device for the specified index");
366  }
367 
368  joystick->hwdata = device;
369  joystick->instance_id = device->instance_id;
370 
371  joystick->naxes = device->naxes;
372  joystick->nhats = device->nhats;
373  joystick->nbuttons = device->nbuttons;
374  joystick->nballs = 0;
375 
376  device->joystick = joystick;
377 
378  @autoreleasepool {
379  if (device->accelerometer) {
380 #if !TARGET_OS_TV
381  if (motionManager == nil) {
382  motionManager = [[CMMotionManager alloc] init];
383  }
384 
385  /* Shorter times between updates can significantly increase CPU usage. */
386  motionManager.accelerometerUpdateInterval = 0.1;
387  [motionManager startAccelerometerUpdates];
388 #endif /* !TARGET_OS_TV */
389  } else {
390 #ifdef SDL_JOYSTICK_MFI
391  GCController *controller = device->controller;
392  controller.controllerPausedHandler = ^(GCController *c) {
393  if (joystick->hwdata) {
394  ++joystick->hwdata->num_pause_presses;
395  }
396  };
397 #endif /* SDL_JOYSTICK_MFI */
398  }
399  }
400 
401  return 0;
402 }
SDL_Joystick * joystick
static SDL_JoystickDeviceItem * GetDeviceForIndex(int device_index)
static SDL_AudioDeviceID device
Definition: loopwave.c:37
const GLubyte * c
#define NULL
Definition: begin_code.h:164
#define SDL_SetError
GCController __unsafe_unretained * controller
static CMMotionManager * motionManager

◆ SDL_SYS_JoystickQuit()

void SDL_SYS_JoystickQuit ( void  )

Definition at line 668 of file SDL_sysjoystick.m.

References motionManager, NULL, numjoysticks, SDL_DelHintCallback, SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION, and SDL_SYS_RemoveJoystickDevice().

Referenced by SDL_JoystickQuit().

669 {
670  @autoreleasepool {
671 #ifdef SDL_JOYSTICK_MFI
672  NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
673 
674  if (connectObserver) {
675  [center removeObserver:connectObserver name:GCControllerDidConnectNotification object:nil];
676  connectObserver = nil;
677  }
678 
679  if (disconnectObserver) {
680  [center removeObserver:disconnectObserver name:GCControllerDidDisconnectNotification object:nil];
681  disconnectObserver = nil;
682  }
683 
684 #if TARGET_OS_TV
686  SDL_AppleTVRemoteRotationHintChanged, NULL);
687 #endif /* TARGET_OS_TV */
688 #endif /* SDL_JOYSTICK_MFI */
689 
690  while (deviceList != NULL) {
692  }
693 
694 #if !TARGET_OS_TV
695  motionManager = nil;
696 #endif /* !TARGET_OS_TV */
697  }
698 
699  numjoysticks = 0;
700 }
static SDL_JoystickDeviceItem * deviceList
#define SDL_HINT_APPLE_TV_REMOTE_ALLOW_ROTATION
A variable controlling whether the Apple TV remote&#39;s joystick axes will automatically match the rotat...
Definition: SDL_hints.h:355
GLuint const GLchar * name
#define NULL
Definition: begin_code.h:164
#define SDL_DelHintCallback
static SDL_JoystickDeviceItem * SDL_SYS_RemoveJoystickDevice(SDL_JoystickDeviceItem *device)
static int numjoysticks
GLuint object
static CMMotionManager * motionManager

◆ SDL_SYS_JoystickUpdate()

void SDL_SYS_JoystickUpdate ( SDL_Joystick *  joystick)

Definition at line 624 of file SDL_sysjoystick.m.

References recDevice::accelerometer, recDevice::controller, device, NULL, SDL_SYS_AccelerometerUpdate(), and SDL_SYS_MFIJoystickUpdate().

Referenced by SDL_JoystickOpen(), and SDL_JoystickUpdate().

625 {
626  SDL_JoystickDeviceItem *device = joystick->hwdata;
627 
628  if (device == NULL) {
629  return;
630  }
631 
632  if (device->accelerometer) {
633  SDL_SYS_AccelerometerUpdate(joystick);
634  } else if (device->controller) {
635  SDL_SYS_MFIJoystickUpdate(joystick);
636  }
637 }
static void SDL_SYS_MFIJoystickUpdate(SDL_Joystick *joystick)
static SDL_AudioDeviceID device
Definition: loopwave.c:37
#define NULL
Definition: begin_code.h:164
static void SDL_SYS_AccelerometerUpdate(SDL_Joystick *joystick)
GCController __unsafe_unretained * controller

◆ SDL_SYS_NumJoysticks()

int SDL_SYS_NumJoysticks ( void  )

Definition at line 330 of file SDL_sysjoystick.m.

References numjoysticks.

Referenced by SDL_NumJoysticks().

331 {
332  return numjoysticks;
333 }
static int numjoysticks