I have no Windows dev-environment setup (or any experience with windows
at all for that matter xD)
Your code looks to be correct…
maybe this test program shows, what’s going on…
If you plug in your device, you should see some diagnostics printed
This program does not open any devices and does the maximum amount of
error checking/reporting
Warning: code might be ugly 
???
/*
- main.c*
- Created on: 07.08.2014
-
Author: Robotic-Brain
*/
#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>
void quit(int code) attribute((noreturn));
void quit(int code) {
SDL_Quit();
exit(code);
}
int initSDL() {
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
printf(“SDL_Init Error: %s\n”, SDL_GetError());
return 0;
}
if (SDL_VideoInit(SDL_GetVideoDriver(0)) != 0) {
printf("SDL_VideoInit Error: %s\n", SDL_GetError());
return 0;
}
return 1;
}
void printVideoDrivers() {
int num = SDL_GetNumVideoDrivers();
if (num <= 0) {
printf(“SDL_GetNumVideoDrivers Error: %s\n”, SDL_GetError());
} else {
printf(“Video Driver List:\n”);
for (int i = 0; i < num; ++i) {
printf("%d/%d\t%s\n", i + 1, num, SDL_GetVideoDriver(i));
}
}
const char* tmp = SDL_GetCurrentVideoDriver();
if (!tmp) {
tmp = "NULL";
}
printf("Active Video Driver: %s\n", tmp);
}
void enableEvents() {
if (SDL_JoystickEventState(SDL_ENABLE) < 0) {
printf(“SDL_JoystickEventState Error: %s\n”, SDL_GetError());
}
SDL_GameControllerEventState(SDL_ENABLE);
}
/****************************************************************************************/
/**
- Pulled in from src/test/SDL_test_common.c
*/
static const char *
ControllerAxisName(const SDL_GameControllerAxis axis)
{
switch (axis)
{
#define AXIS_CASE(ax) case SDL_CONTROLLER_AXIS_##ax: return #ax
AXIS_CASE(INVALID);
AXIS_CASE(LEFTX);
AXIS_CASE(LEFTY);
AXIS_CASE(RIGHTX);
AXIS_CASE(RIGHTY);
AXIS_CASE(TRIGGERLEFT);
AXIS_CASE(TRIGGERRIGHT);
#undef AXIS_CASE
default: return “???”;
}
}
static const char *
ControllerButtonName(const SDL_GameControllerButton button)
{
switch (button)
{
#define BUTTON_CASE(btn) case SDL_CONTROLLER_BUTTON_##btn: return #btn
BUTTON_CASE(INVALID);
BUTTON_CASE(A);
BUTTON_CASE(B);
BUTTON_CASE(X);
BUTTON_CASE(Y);
BUTTON_CASE(BACK);
BUTTON_CASE(GUIDE);
BUTTON_CASE(START);
BUTTON_CASE(LEFTSTICK);
BUTTON_CASE(RIGHTSTICK);
BUTTON_CASE(LEFTSHOULDER);
BUTTON_CASE(RIGHTSHOULDER);
BUTTON_CASE(DPAD_UP);
BUTTON_CASE(DPAD_DOWN);
BUTTON_CASE(DPAD_LEFT);
BUTTON_CASE(DPAD_RIGHT);
#undef BUTTON_CASE
default: return “???”;
}
}
static void SDLTest_PrintEvent(SDL_Event * event) {
if ((event->type == SDL_MOUSEMOTION) || (event->type ==
SDL_FINGERMOTION)) {
/* Mouse and finger motion are really spammy */
return;
}
switch (event->type) {
case SDL_WINDOWEVENT:
switch (event->window.event) {
case SDL_WINDOWEVENT_SHOWN:
SDL_Log("SDL EVENT: Window %d shown",
event->window.windowID);
break;
case SDL_WINDOWEVENT_HIDDEN:
SDL_Log("SDL EVENT: Window %d hidden",
event->window.windowID);
break;
case SDL_WINDOWEVENT_EXPOSED:
SDL_Log("SDL EVENT: Window %d exposed",
event->window.windowID);
break;
case SDL_WINDOWEVENT_MOVED:
SDL_Log("SDL EVENT: Window %d moved to %d,%d",
event->window.windowID, event->window.data1,
event->window.data2);
break;
case SDL_WINDOWEVENT_RESIZED:
SDL_Log("SDL EVENT: Window %d resized to %dx%d",
event->window.windowID, event->window.data1,
event->window.data2);
break;
case SDL_WINDOWEVENT_SIZE_CHANGED:
SDL_Log("SDL EVENT: Window %d changed size to %dx%d",
event->window.windowID, event->window.data1,
event->window.data2);
break;
case SDL_WINDOWEVENT_MINIMIZED:
SDL_Log("SDL EVENT: Window %d minimized",
event->window.windowID);
break;
case SDL_WINDOWEVENT_MAXIMIZED:
SDL_Log("SDL EVENT: Window %d maximized",
event->window.windowID);
break;
case SDL_WINDOWEVENT_RESTORED:
SDL_Log("SDL EVENT: Window %d restored",
event->window.windowID);
break;
case SDL_WINDOWEVENT_ENTER:
SDL_Log("SDL EVENT: Mouse entered window %d",
event->window.windowID);
break;
case SDL_WINDOWEVENT_LEAVE:
SDL_Log("SDL EVENT: Mouse left window %d",
event->window.windowID);
break;
case SDL_WINDOWEVENT_FOCUS_GAINED:
SDL_Log("SDL EVENT: Window %d gained keyboard focus",
event->window.windowID);
break;
case SDL_WINDOWEVENT_FOCUS_LOST:
SDL_Log("SDL EVENT: Window %d lost keyboard focus",
event->window.windowID);
break;
case SDL_WINDOWEVENT_CLOSE:
SDL_Log("SDL EVENT: Window %d closed",
event->window.windowID);
break;
default:
SDL_Log("SDL EVENT: Window %d got unknown event %d",
event->window.windowID, event->window.event);
break;
}
break;
case SDL_KEYDOWN:
SDL_Log(
"SDL EVENT: Keyboard: key pressed in window %d: scancode 0x%08X =
%s, keycode 0x%08X = %s",
event->key.windowID, event->key.keysym.scancode,
SDL_GetScancodeName(event->key.keysym.scancode),
event->key.keysym.sym,
SDL_GetKeyName(event->key.keysym.sym));
break;
case SDL_KEYUP:
SDL_Log(
“SDL EVENT: Keyboard: key released in window %d: scancode 0x%08X =
%s, keycode 0x%08X = %s”,
event->key.windowID, event->key.keysym.scancode,
SDL_GetScancodeName(event->key.keysym.scancode),
event->key.keysym.sym,
SDL_GetKeyName(event->key.keysym.sym));
break;
case SDL_TEXTINPUT:
SDL_Log(“SDL EVENT: Keyboard: text input “%s” in window %d”,
event->text.text, event->text.windowID);
break;
/* MOUSE EVENTS REMOVED */
case SDL_JOYDEVICEADDED:
SDL_Log("SDL EVENT: Joystick index %d attached",
event->jdevice.which);
break;
case SDL_JOYDEVICEREMOVED:
SDL_Log("SDL EVENT: Joystick %d removed", event->jdevice.which);
break;
case SDL_JOYBALLMOTION:
SDL_Log("SDL EVENT: Joystick %d: ball %d moved by %d,%d",
event->jball.which, event->jball.ball, event->jball.xrel,
event->jball.yrel);
break;
case SDL_JOYHATMOTION: {
const char *position = "UNKNOWN";
switch (event->jhat.value) {
case SDL_HAT_CENTERED:
position = "CENTER";
break;
case SDL_HAT_UP:
position = "UP";
break;
case SDL_HAT_RIGHTUP:
position = "RIGHTUP";
break;
case SDL_HAT_RIGHT:
position = "RIGHT";
break;
case SDL_HAT_RIGHTDOWN:
position = "RIGHTDOWN";
break;
case SDL_HAT_DOWN:
position = "DOWN";
break;
case SDL_HAT_LEFTDOWN:
position = "LEFTDOWN";
break;
case SDL_HAT_LEFT:
position = "LEFT";
break;
case SDL_HAT_LEFTUP:
position = "LEFTUP";
break;
}
SDL_Log("SDL EVENT: Joystick %d: hat %d moved to %s",
event->jhat.which, event->jhat.hat, position);
}
break;
case SDL_JOYBUTTONDOWN:
SDL_Log("SDL EVENT: Joystick %d: button %d pressed",
event->jbutton.which, event->jbutton.button);
break;
case SDL_JOYBUTTONUP:
SDL_Log("SDL EVENT: Joystick %d: button %d released",
event->jbutton.which, event->jbutton.button);
break;
case SDL_CONTROLLERDEVICEADDED:
SDL_Log("SDL EVENT: Controller index %d attached",
event->cdevice.which);
break;
case SDL_CONTROLLERDEVICEREMOVED:
SDL_Log("SDL EVENT: Controller %d removed", event->cdevice.which);
break;
case SDL_CONTROLLERAXISMOTION:
SDL_Log("SDL EVENT: Controller %d axis %d ('%s') value: %d",
event->caxis.which, event->caxis.axis,
ControllerAxisName(
(SDL_GameControllerAxis) event->caxis.axis),
event->caxis.value);
break;
case SDL_CONTROLLERBUTTONDOWN:
SDL_Log("SDL EVENT: Controller %d button %d ('%s') down",
event->cbutton.which, event->cbutton.button,
ControllerButtonName(
(SDL_GameControllerButton) event->cbutton.button));
break;
case SDL_CONTROLLERBUTTONUP:
SDL_Log("SDL EVENT: Controller %d button %d ('%s') up",
event->cbutton.which, event->cbutton.button,
ControllerButtonName(
(SDL_GameControllerButton) event->cbutton.button));
break;
case SDL_CLIPBOARDUPDATE:
SDL_Log("SDL EVENT: Clipboard updated");
break;
case SDL_FINGERDOWN:
case SDL_FINGERUP:
SDL_Log(
"SDL EVENT: Finger: %s touch=%ld, finger=%ld, x=%f, y=%f, dx=%f,
dy=%f, pressure=%f",
(event->type == SDL_FINGERDOWN) ? “down” : “up”,
(long) event->tfinger.touchId,
(long) event->tfinger.fingerId, event->tfinger.x,
event->tfinger.y, event->tfinger.dx, event->tfinger.dy,
event->tfinger.pressure);
break;
/* CODE REMOVED */
case SDL_QUIT:
SDL_Log("SDL EVENT: Quit requested");
break;
case SDL_USEREVENT:
SDL_Log("SDL EVENT: User event %d", event->user.code);
break;
default:
SDL_Log("Unknown event %d", event->type);
break;
}
}
/****************************************************************************************/
#define BUFF_LEN 128
void diagnoseJoyDevice(Sint32 index) {
int numj = SDL_NumJoysticks();
printf(“Diagnosing JoyDevice with index: %d Num: %d:\n”, index, numj);
if (numj < 0) {
printf("\t\tSDL_NumJoysticks Error: %s\n", SDL_GetError());
}
{
/* DeviceGUID */
char buff[BUFF_LEN];
SDL_memset(buff, 0, BUFF_LEN);
SDL_ClearError();
SDL_JoystickGetGUIDString(SDL_JoystickGetDeviceGUID(index), buff,
BUFF_LEN);
printf("\tGUID: %s\n\t\tError?: %s\n", buff, SDL_GetError());
}
{
/* Device Name */
const char* tmp = SDL_JoystickNameForIndex(index);
printf("\tJoystick Name: ");
if (!tmp) {
printf("\n\t\tERROR: %s\n", SDL_GetError());
} else {
printf("%s\n", tmp);
}
}
{
/* GameController supported? */
printf("\tIsGameController?: %s\n", (SDL_IsGameController(index) ?
“TRUE” : “FALSE”));
if (SDL_IsGameController(index)) {
/* GameController Name /
const char tmp = SDL_GameControllerNameForIndex(index);
printf("\tController Name: %s\n", (tmp ? tmp : “NULL”));
}
}
}
void doLoop() {
int done = 0;
SDL_Event e;
while (!done) {
if (SDL_WaitEvent(&e)) {
SDLTest_PrintEvent(&e);
switch (e.type) {
case SDL_QUIT:
done = 1;
break;
case SDL_JOYDEVICEADDED:
printf("-> SDL_JOYDEVICEADDED\n");
diagnoseJoyDevice(e.jdevice.which);
break;
case SDL_CONTROLLERDEVICEADDED:
printf("-> SDL_CONTROLLERDEVICEADDED\n");
diagnoseJoyDevice(e.cdevice.which);
break;
case SDL_CONTROLLERDEVICEREMAPPED:
printf("<-> SDL_CONTROLLERDEVICEREMAPPED\n");
diagnoseJoyDevice(e.cdevice.which);
break;
case SDL_JOYDEVICEREMOVED:
printf("<- SDL_JOYDEVICEREMOVED\n");
break;
case SDL_CONTROLLERDEVICEREMOVED:
printf("<- SDL_CONTROLLERDEVICEREMOVED\n");
break;
}
} else {
printf("SDL_WaitEvent Error: %s\n", SDL_GetError());
}
}
}
int main(int argc, char** argv) {
if (!initSDL()) {
quit(EXIT_FAILURE);
}
//SDL_LogSetAllPriority(SDL_LOG_PRIORITY_WARN);
SDL_Window* wnd = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_OPENGL);
if (!wnd) {
printf("Window creation failed: %s", SDL_GetError());
quit(EXIT_FAILURE);
}
printVideoDrivers();
enableEvents();
doLoop();
SDL_DestroyWindow(wnd);
quit(EXIT_SUCCESS);
}