test/testhotplug.c
author Sam Lantinga <slouken@libsdl.org>
Thu, 07 Dec 2017 16:08:09 -0800
changeset 11730 ac6c607e065c
parent 10737 3406a0f8b041
child 11811 5d94cb6b24d3
permissions -rw-r--r--
Enable building the Metal renderer by default, and weak link the Metal framework so the SDL library is safe to use on older Macs
Also generate iOS versions of the Metal shaders
     1 /*
     2   Copyright (C) 1997-2017 Sam Lantinga <slouken@libsdl.org>
     3 
     4   This software is provided 'as-is', without any express or implied
     5   warranty.  In no event will the authors be held liable for any damages
     6   arising from the use of this software.
     7 
     8   Permission is granted to anyone to use this software for any purpose,
     9   including commercial applications, and to alter it and redistribute it
    10   freely.
    11 */
    12 
    13 /* Simple program to test the SDL joystick hotplugging */
    14 
    15 #include <stdio.h>
    16 #include <stdlib.h>
    17 #include <string.h>
    18 
    19 #include "SDL.h"
    20 
    21 #if !defined SDL_JOYSTICK_DISABLED && !defined SDL_HAPTIC_DISABLED
    22 
    23 int
    24 main(int argc, char *argv[])
    25 {
    26     SDL_Joystick *joystick = NULL;
    27     SDL_Haptic *haptic = NULL;
    28     SDL_JoystickID instance = -1;
    29     SDL_bool keepGoing = SDL_TRUE;
    30     int i;
    31     SDL_bool enable_haptic = SDL_TRUE;
    32     Uint32 init_subsystems = SDL_INIT_VIDEO | SDL_INIT_JOYSTICK;
    33     
    34     for (i = 1; i < argc; ++i) {
    35         if (SDL_strcasecmp(argv[i], "--nohaptic") == 0) {
    36             enable_haptic = SDL_FALSE;
    37         }
    38     }
    39 
    40     if(enable_haptic) {
    41         init_subsystems |= SDL_INIT_HAPTIC;
    42     }
    43     
    44     /* Enable standard application logging */
    45     SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
    46 
    47     SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
    48 
    49     /* Initialize SDL (Note: video is required to start event loop) */
    50     if (SDL_Init(init_subsystems) < 0) {
    51         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
    52         exit(1);
    53     }
    54 
    55     /*
    56     //SDL_CreateWindow("Dummy", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 128, 128, 0);
    57     */
    58 
    59     SDL_Log("There are %d joysticks at startup\n", SDL_NumJoysticks());
    60     if (enable_haptic)
    61         SDL_Log("There are %d haptic devices at startup\n", SDL_NumHaptics());
    62 
    63     while(keepGoing)
    64     {
    65         SDL_Event event;
    66         while(SDL_PollEvent(&event))
    67         {
    68             switch(event.type)
    69             {
    70                 case SDL_QUIT:
    71                     keepGoing = SDL_FALSE;
    72                     break;
    73                 case SDL_JOYDEVICEADDED:
    74                     if (joystick != NULL)
    75                     {
    76                         SDL_Log("Only one joystick supported by this test\n");
    77                     }
    78                     else
    79                     {
    80                         joystick = SDL_JoystickOpen(event.jdevice.which);
    81                         instance = SDL_JoystickInstanceID(joystick);
    82                         SDL_Log("Joy Added  : %d : %s\n", event.jdevice.which, SDL_JoystickName(joystick));
    83                         if (enable_haptic)
    84                         {
    85                             if (SDL_JoystickIsHaptic(joystick))
    86                             {
    87                                 haptic = SDL_HapticOpenFromJoystick(joystick);
    88                                 if (haptic)
    89                                 {
    90                                     SDL_Log("Joy Haptic Opened\n");
    91                                     if (SDL_HapticRumbleInit( haptic ) != 0)
    92                                     {
    93                                         SDL_Log("Could not init Rumble!: %s\n", SDL_GetError());
    94                                         SDL_HapticClose(haptic);
    95                                         haptic = NULL;
    96                                     }
    97                                 } else {
    98                                     SDL_Log("Joy haptic open FAILED!: %s\n", SDL_GetError());
    99                                 }
   100                             }
   101                             else
   102                             {
   103                                 SDL_Log("No haptic found\n");
   104                             }
   105                         }
   106                     }
   107                     break;
   108                 case SDL_JOYDEVICEREMOVED:
   109                     if (instance == event.jdevice.which)
   110                     {
   111                         SDL_Log("Joy Removed: %d\n", event.jdevice.which);
   112                         instance = -1;
   113                         if(enable_haptic && haptic)
   114                         {
   115                             SDL_HapticClose(haptic);
   116                             haptic = NULL;
   117                         }
   118                         SDL_JoystickClose(joystick);
   119                         joystick = NULL;
   120                     } else {
   121                         SDL_Log("Unknown joystick diconnected\n");
   122                     }
   123                     break;
   124                 case SDL_JOYAXISMOTION:
   125 /*
   126 //                    SDL_Log("Axis Move: %d\n", event.jaxis.axis);
   127 */
   128                     if (enable_haptic)
   129                         SDL_HapticRumblePlay(haptic, 0.25, 250);
   130                     break;
   131                 case SDL_JOYBUTTONDOWN:
   132                     SDL_Log("Button Press: %d\n", event.jbutton.button);
   133                     if(enable_haptic && haptic)
   134                     {
   135                         SDL_HapticRumblePlay(haptic, 0.25, 250);
   136                     }
   137                     if (event.jbutton.button == 0) {
   138                         SDL_Log("Exiting due to button press of button 0\n");
   139                         keepGoing = SDL_FALSE;
   140                     }
   141                     break;
   142                 case SDL_JOYBUTTONUP:
   143                     SDL_Log("Button Release: %d\n", event.jbutton.button);
   144                     break;
   145             }
   146         }
   147     }
   148 
   149     SDL_Quit();
   150 
   151     return 0;
   152 }
   153 #else
   154 
   155 int
   156 main(int argc, char *argv[])
   157 {
   158     SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick and haptic support.\n");
   159     return 1;
   160 }
   161 
   162 #endif