Hi, Im just new to SDL and writing some codes to get my ps3 controller events, but the poll event loop always returns value with event_device_added once when run console app.
Other event never returns and I dont know why
The code in ControllerReader.cpp
void ControllerReader::ReceiveEvent(SDL_Event *cEvent) {
switch (cEvent->type) {
case SDL_CONTROLLERAXISMOTION: {
if (cEvent->caxis.which == SDL_JoystickInstanceID(SDL_GameControllerGetJoystick(Controller))) {
// we only care for right analog stick
// x axis-motion
if (cEvent->caxis.axis == SDL_CONTROLLER_AXIS_RIGHTX) {
std::cout<<“axis down \n”;
}
}
break;
}
case SDL_CONTROLLERDEVICEADDED: {
std::cout<<“added \n”;
break;
}
case SDL_CONTROLLERDEVICEREMOVED: {
std::cout<<“removed \n”;break; } }
//SDL_GameControllerClose(Controller);
//SDL_Quit();
}
The code in main.cpp, i tried copy above code directly to main.cpp but it still be
#include “ControllerReader.h”
ControllerReader ps3;
int main( int argc, char *argv[] )
{
bool quit = false;
SDL_Event cEvent;
ps3.Init();
while(!quit) {
while(SDL_PollEvent(&cEvent)) {
ps3.ReceiveEvent(&cEvent);
}
}
//ps3.GetState();
SDL_Quit();
return 0;
}
The init code in ControllerReader
void ControllerReader::Init() {
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER) < 0) {
printf(“SDL initialization failed. Error: %s\n”, SDL_GetError());
std::cout<<“Init failed \n”;
} else {
std::cout<<“Init done \n”;
}if (SDL_NumJoysticks() > 0) {
for (int i = 0; i < SDL_NumJoysticks(); ++i) {
Joy = SDL_JoystickOpen(0);
if (Joy) {
std::cout<<“Opened Joy \n”;
} else {
std::cout<<“Cant open Joy \n”;
}
if (SDL_IsGameController(i)) {
Controller = SDL_GameControllerOpen(i);
if (Controller) {
std::cout<<“Controller opened \n”;
break;
} else {
fprintf(stderr, “Could not open gamecontroller %i: %s\n”, i, SDL_GetError());
std::cout<<“Cant open controller \n”;
}
}
}
} else {
std::cout<<“No controller connected \n”;
}
//SDL_GameControllerEventState(SDL_IGNORE);
}