test/testhotplug.c
author Philipp Wiesemann <philipp.wiesemann@arcor.de>
Wed, 18 Feb 2015 21:31:21 +0100
changeset 9356 e87d6e1e812a
parent 8778 d67a044fbec6
child 9619 b94b6d0bff0f
permissions -rw-r--r--
Removed redundant include statements from test programs.

The needed header files are already included with SDL.h. Still including them in
the test programs is confusing because it somehow suggests they would be needed.
     1 /*
     2   Copyright (C) 1997-2014 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