mirror of https://github.com/encounter/SDL.git
SWITCH: bitmask joystick buttons to fit HidControllerKeys
SWITCH: improve and comment test
This commit is contained in:
parent
25454343e2
commit
42c8e7e175
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue