Atlas - testhotplug.c

Home / ext / SDL2 / test Lines: 17 | Size: 5564 bytes [Download] [Show on GitHub] [Search similar files] [Raw] [Raw (proxy)]
[FILE BEGIN]
1/* 2 Copyright (C) 1997-2018 Sam Lantinga <[email protected]> 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 23int 24main(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 155int 156main(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 163
[FILE END]
(C) 2025 0x4248 (C) 2025 4248 Media and 4248 Systems, All part of 0x4248 See LICENCE files for more information. Not all files are by 0x4248 always check Licencing.