SWITCH: bitmask joystick buttons to fit HidControllerKeys

SWITCH: improve and comment test
This commit is contained in:
cpasjuste 2018-03-16 19:19:48 +01:00 committed by Dave Murphy
parent 25454343e2
commit 42c8e7e175
2 changed files with 32 additions and 12 deletions

View File

@ -181,7 +181,8 @@ SDL_SYS_JoystickUpdate(SDL_Joystick *joystick)
for (int i = 0; i < sizeof(pad_mapping) / sizeof(*pad_mapping); i++) { for (int i = 0; i < sizeof(pad_mapping) / sizeof(*pad_mapping); i++) {
if (changed & pad_mapping[i]) { if (changed & pad_mapping[i]) {
SDL_PrivateJoystickButton( SDL_PrivateJoystickButton(
joystick, (Uint8) i, (Uint8) ((pad[index].buttons & pad_mapping[i]) ? SDL_PRESSED : SDL_RELEASED)); joystick, (Uint8) BIT(i),
(Uint8) ((pad[index].buttons & pad_mapping[i]) ? SDL_PRESSED : SDL_RELEASED));
} }
} }
} }

View File

@ -19,30 +19,44 @@
#define WINDOW_WIDTH 1280 #define WINDOW_WIDTH 1280
#define WINDOW_HEIGHT 720 #define WINDOW_HEIGHT 720
SDL_Renderer *renderer = NULL;
int done = 0;
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
SDL_Event event;
SDL_Window *window;
SDL_Renderer *renderer;
int done = 0;
// redirect stdout to emulators
consoleDebugInit(debugDevice_SVC); consoleDebugInit(debugDevice_SVC);
stdout = stderr; stdout = stderr;
SDL_Window *window; // mandatory at least on switch, else gfx is not properly closed
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) {
if (SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_HEIGHT, 0, &window, &renderer) < 0) { printf("SDL_Init: %s\n", SDL_GetError());
printf("SDL_CreateWindowAndRenderer: %s\n", SDL_GetError());
return -1; return -1;
} }
SDL_Event event; // switch only support software renderer for now
if (SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_HEIGHT, 0, &window, &renderer) < 0) {
printf("SDL_CreateWindowAndRenderer: %s\n", SDL_GetError());
SDL_Quit();
return -1;
}
printf("entering main loop\n"); // open CONTROLLER_P1_AUTO
// https://github.com/devkitPro/SDL/blob/switch-sdl2/src/joystick/switch/SDL_sysjoystick.c#L45
if (SDL_JoystickOpen(0) == NULL) {
printf("SDL_JoystickOpen: %s\n", SDL_GetError());
SDL_Quit();
return -1;
}
while (!done) { while (!done) {
while (SDL_PollEvent(&event)) { while (SDL_PollEvent(&event)) {
if (event.type == SDL_QUIT || event.type == SDL_KEYDOWN) { // seek for (B) button press
// https://github.com/devkitPro/SDL/blob/switch-sdl2/src/joystick/switch/SDL_sysjoystick.c#L51
if (event.type == SDL_JOYBUTTONDOWN && event.jbutton.button == KEY_B) {
done = 1; done = 1;
} }
} }
@ -50,14 +64,17 @@ int main(int argc, char *argv[])
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
// R
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
SDL_Rect r = {0, 0, 64, 64}; SDL_Rect r = {0, 0, 64, 64};
SDL_RenderFillRect(renderer, &r); SDL_RenderFillRect(renderer, &r);
// G
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255); SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
SDL_Rect g = {64, 0, 64, 64}; SDL_Rect g = {64, 0, 64, 64};
SDL_RenderFillRect(renderer, &g); SDL_RenderFillRect(renderer, &g);
// B
SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255); SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
SDL_Rect b = {128, 0, 64, 64}; SDL_Rect b = {128, 0, 64, 64};
SDL_RenderFillRect(renderer, &b); SDL_RenderFillRect(renderer, &b);
@ -65,5 +82,7 @@ int main(int argc, char *argv[])
SDL_RenderPresent(renderer); SDL_RenderPresent(renderer);
} }
SDL_Quit();
return 0; return 0;
} }