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++) {
if (changed & pad_mapping[i]) {
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_HEIGHT 720
SDL_Renderer *renderer = NULL;
int done = 0;
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);
stdout = stderr;
SDL_Window *window;
if (SDL_CreateWindowAndRenderer(WINDOW_WIDTH, WINDOW_HEIGHT, 0, &window, &renderer) < 0) {
printf("SDL_CreateWindowAndRenderer: %s\n", SDL_GetError());
// mandatory at least on switch, else gfx is not properly closed
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_JOYSTICK) < 0) {
printf("SDL_Init: %s\n", SDL_GetError());
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 (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;
}
}
@ -50,14 +64,17 @@ int main(int argc, char *argv[])
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
// R
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);
SDL_Rect r = {0, 0, 64, 64};
SDL_RenderFillRect(renderer, &r);
// G
SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
SDL_Rect g = {64, 0, 64, 64};
SDL_RenderFillRect(renderer, &g);
// B
SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255);
SDL_Rect b = {128, 0, 64, 64};
SDL_RenderFillRect(renderer, &b);
@ -65,5 +82,7 @@ int main(int argc, char *argv[])
SDL_RenderPresent(renderer);
}
SDL_Quit();
return 0;
}