test/testhotplug.c
author Alex Baines <alex@abaines.me.uk>
Tue, 19 Aug 2014 23:31:50 +0100
changeset 9097 56d712662a82
parent 8778 d67a044fbec6
child 9356 e87d6e1e812a
permissions -rw-r--r--
Add a SDL_IM_INTERNAL_EDITING event to make IMs like iBus render editing text in its own UI instead of sending TEXTEDITING events.
This is useful for applications that handle TEXTINPUT events but not TEXTEDITING events.
     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 #include "SDL_haptic.h"
    21 
    22 #if !defined SDL_JOYSTICK_DISABLED && !defined SDL_HAPTIC_DISABLED
    23 
    24 int
    25 main(int argc, char *argv[])
    26 {
    27     SDL_Joystick *joystick = NULL;
    28     SDL_Haptic *haptic = NULL;
    29     SDL_JoystickID instance = -1;
    30     SDL_bool keepGoing = SDL_TRUE;
    31     int i;
    32     SDL_bool enable_haptic = SDL_TRUE;
    33     Uint32 init_subsystems = SDL_INIT_VIDEO | SDL_INIT_JOYSTICK;
    34     
    35     for (i = 1; i < argc; ++i) {
    36         if (SDL_strcasecmp(argv[i], "--nohaptic") == 0) {
    37             enable_haptic = SDL_FALSE;
    38         }
    39     }
    40 
    41     if(enable_haptic) {
    42         init_subsystems |= SDL_INIT_HAPTIC;
    43     }
    44     
    45     /* Enable standard application logging */
    46     SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);	
    47 
    48     SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, "1");
    49 
    50     /* Initialize SDL (Note: video is required to start event loop) */
    51     if (SDL_Init(init_subsystems) < 0) {
    52         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL: %s\n", SDL_GetError());
    53         exit(1);
    54     }
    55 
    56     /*
    57     //SDL_CreateWindow("Dummy", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 128, 128, 0);
    58     */
    59 
    60     SDL_Log("There are %d joysticks at startup\n", SDL_NumJoysticks());
    61     if (enable_haptic)
    62         SDL_Log("There are %d haptic devices at startup\n", SDL_NumHaptics());
    63 
    64     while(keepGoing)
    65     {
    66         SDL_Event event;
    67         while(SDL_PollEvent(&event))
    68         {
    69             switch(event.type)
    70             {
    71                 case SDL_QUIT:
    72                     keepGoing = SDL_FALSE;
    73                     break;
    74                 case SDL_JOYDEVICEADDED:
    75                     if (joystick != NULL)
    76                     {
    77                         SDL_Log("Only one joystick supported by this test\n");
    78                     }
    79                     else
    80                     {
    81                         joystick = SDL_JoystickOpen(event.jdevice.which);
    82                         instance = SDL_JoystickInstanceID(joystick);
    83                         SDL_Log("Joy Added  : %d : %s\n", event.jdevice.which, SDL_JoystickName(joystick));
    84                         if (enable_haptic)
    85                         {
    86                             if (SDL_JoystickIsHaptic(joystick))
    87                             {
    88                                 haptic = SDL_HapticOpenFromJoystick(joystick);
    89                                 if (haptic)
    90                                 {
    91                                     SDL_Log("Joy Haptic Opened\n");
    92                                     if (SDL_HapticRumbleInit( haptic ) != 0)
    93                                     {
    94                                         SDL_Log("Could not init Rumble!: %s\n", SDL_GetError());
    95                                         SDL_HapticClose(haptic);
    96                                         haptic = NULL;
    97                                     }
    98                                 } else {
    99                                     SDL_Log("Joy haptic open FAILED!: %s\n", SDL_GetError());
   100                                 }
   101                             }
   102                             else
   103                             {
   104                                 SDL_Log("No haptic found\n");
   105                             }
   106                         }
   107                     }
   108                     break;
   109                 case SDL_JOYDEVICEREMOVED:
   110                     if (instance == event.jdevice.which)
   111                     {
   112                         SDL_Log("Joy Removed: %d\n", event.jdevice.which);
   113                         instance = -1;
   114                         if(enable_haptic && haptic)
   115                         {
   116                             SDL_HapticClose(haptic);
   117                             haptic = NULL;
   118                         }
   119                         SDL_JoystickClose(joystick);
   120                         joystick = NULL;
   121                     } else {
   122                         SDL_Log("Unknown joystick diconnected\n");
   123                     }
   124                     break;
   125                 case SDL_JOYAXISMOTION:
   126 /*
   127 //                    SDL_Log("Axis Move: %d\n", event.jaxis.axis);
   128 */
   129                     if (enable_haptic)
   130                         SDL_HapticRumblePlay(haptic, 0.25, 250);
   131                     break;
   132                 case SDL_JOYBUTTONDOWN:
   133                     SDL_Log("Button Press: %d\n", event.jbutton.button);
   134                     if(enable_haptic && haptic)
   135                     {
   136                         SDL_HapticRumblePlay(haptic, 0.25, 250);
   137                     }
   138 					if (event.jbutton.button == 0) {
   139 						SDL_Log("Exiting due to button press of button 0\n");
   140 						keepGoing = SDL_FALSE;
   141 					}
   142                     break;
   143                 case SDL_JOYBUTTONUP:
   144                     SDL_Log("Button Release: %d\n", event.jbutton.button);
   145                     break;
   146             }
   147         }
   148     }
   149 
   150     SDL_Quit();
   151 
   152     return 0;
   153 }
   154 #else
   155 
   156 int
   157 main(int argc, char *argv[])
   158 {
   159     SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "SDL compiled without Joystick and haptic support.\n");
   160     return 1;
   161 }
   162 
   163 #endif