mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-11 00:25:41 +12:00
[HID] Remap keys
This commit is contained in:
parent
0c0e7a4cb9
commit
629e00251c
2 changed files with 70 additions and 29 deletions
|
@ -6,6 +6,31 @@
|
||||||
#include "logger.hpp"
|
#include "logger.hpp"
|
||||||
#include "memory.hpp"
|
#include "memory.hpp"
|
||||||
|
|
||||||
|
namespace HID::Keys {
|
||||||
|
enum : u32 {
|
||||||
|
A = 1 << 0,
|
||||||
|
B = 1 << 1,
|
||||||
|
Select = 1 << 2,
|
||||||
|
Start = 1 << 3,
|
||||||
|
Right = 1 << 4,
|
||||||
|
Left = 1 << 5,
|
||||||
|
Up = 1 << 6,
|
||||||
|
Down = 1 << 7,
|
||||||
|
R = 1 << 8,
|
||||||
|
L = 1 << 9,
|
||||||
|
X = 1 << 10,
|
||||||
|
Y = 1 << 11,
|
||||||
|
|
||||||
|
GPIO0Inv = 1 << 12, // Inverted value of GPIO bit 0
|
||||||
|
GPIO14Inv = 1 << 13, // Inverted value of GPIO bit 14
|
||||||
|
|
||||||
|
CirclePadRight = 1 << 28, // X >= 41
|
||||||
|
CirclePadLeft = 1 << 29, // X <= -41
|
||||||
|
CirclePadUp = 1 << 30, // Y >= 41
|
||||||
|
CirclePadDown = 1 << 31 // Y <= -41
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// Circular dependency because we need HID to spawn events
|
// Circular dependency because we need HID to spawn events
|
||||||
class Kernel;
|
class Kernel;
|
||||||
|
|
||||||
|
|
|
@ -33,11 +33,10 @@ void Emulator::run() {
|
||||||
srv.sendGPUInterrupt(GPUInterrupt::VBlank0);
|
srv.sendGPUInterrupt(GPUInterrupt::VBlank0);
|
||||||
srv.sendGPUInterrupt(GPUInterrupt::VBlank1);
|
srv.sendGPUInterrupt(GPUInterrupt::VBlank1);
|
||||||
|
|
||||||
// Update inputs in the HID module
|
|
||||||
srv.updateInputs();
|
|
||||||
|
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
while (SDL_PollEvent(&event)) {
|
while (SDL_PollEvent(&event)) {
|
||||||
|
namespace Keys = HID::Keys;
|
||||||
|
|
||||||
switch (event.type) {
|
switch (event.type) {
|
||||||
case SDL_QUIT:
|
case SDL_QUIT:
|
||||||
printf("Bye :(\n");
|
printf("Bye :(\n");
|
||||||
|
@ -45,41 +44,58 @@ void Emulator::run() {
|
||||||
return;
|
return;
|
||||||
case SDL_KEYDOWN:
|
case SDL_KEYDOWN:
|
||||||
switch (event.key.keysym.sym) {
|
switch (event.key.keysym.sym) {
|
||||||
case SDLK_z: srv.pressKey(1 << 0); break;
|
case SDLK_l: srv.pressKey(Keys::A); break;
|
||||||
case SDLK_RIGHT: srv.pressKey(1 << 4); break;
|
case SDLK_k: srv.pressKey(Keys::B); break;
|
||||||
case SDLK_LEFT: srv.pressKey(1 << 5); break;
|
case SDLK_o: srv.pressKey(Keys::X); break;
|
||||||
case SDLK_UP: srv.pressKey(1 << 6); break;
|
case SDLK_i: srv.pressKey(Keys::Y); break;
|
||||||
case SDLK_DOWN: srv.pressKey(1 << 7); break;
|
|
||||||
case SDLK_w: srv.setCirclepadY(0x9C); break;
|
case SDLK_q: srv.pressKey(Keys::L); break;
|
||||||
case SDLK_a: srv.setCirclepadX(-0x9C); break;
|
case SDLK_p: srv.pressKey(Keys::R); break;
|
||||||
case SDLK_s: srv.setCirclepadY(-0x9C); break;
|
|
||||||
case SDLK_d: srv.setCirclepadX(0x9C); break;
|
case SDLK_RIGHT: srv.pressKey(Keys::Right); break;
|
||||||
case SDLK_j: srv.pressKey(1 << 1); break;
|
case SDLK_LEFT: srv.pressKey(Keys::Left); break;
|
||||||
case SDLK_k: srv.pressKey(1 << 10); break;
|
case SDLK_UP: srv.pressKey(Keys::Up); break;
|
||||||
case SDLK_l: srv.pressKey(1 << 11); break;
|
case SDLK_DOWN: srv.pressKey(Keys::Down); break;
|
||||||
case SDLK_r: srv.pressKey(1 << 8); break;
|
|
||||||
|
case SDLK_w: srv.setCirclepadY(0x9C); break;
|
||||||
|
case SDLK_a: srv.setCirclepadX(-0x9C); break;
|
||||||
|
case SDLK_s: srv.setCirclepadY(-0x9C); break;
|
||||||
|
case SDLK_d: srv.setCirclepadX(0x9C); break;
|
||||||
|
|
||||||
|
case SDLK_RETURN: srv.pressKey(Keys::Start); break;
|
||||||
|
case SDLK_BACKSPACE: srv.pressKey(Keys::Select); break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SDL_KEYUP:
|
case SDL_KEYUP:
|
||||||
switch (event.key.keysym.sym) {
|
switch (event.key.keysym.sym) {
|
||||||
case SDLK_z: srv.releaseKey(1 << 0); break;
|
case SDLK_l: srv.releaseKey(Keys::A); break;
|
||||||
case SDLK_RIGHT: srv.releaseKey(1 << 4); break;
|
case SDLK_k: srv.releaseKey(Keys::B); break;
|
||||||
case SDLK_LEFT: srv.releaseKey(1 << 5); break;
|
case SDLK_o: srv.releaseKey(Keys::X); break;
|
||||||
case SDLK_UP: srv.releaseKey(1 << 6); break;
|
case SDLK_i: srv.releaseKey(Keys::Y); break;
|
||||||
case SDLK_DOWN: srv.releaseKey(1 << 7); break;
|
|
||||||
case SDLK_w: srv.setCirclepadY(0); break;
|
case SDLK_q: srv.releaseKey(Keys::L); break;
|
||||||
case SDLK_a: srv.setCirclepadX(0); break;
|
case SDLK_p: srv.releaseKey(Keys::R); break;
|
||||||
case SDLK_s: srv.setCirclepadY(0); break;
|
|
||||||
case SDLK_d: srv.setCirclepadX(0); break;
|
case SDLK_RIGHT: srv.releaseKey(Keys::Right); break;
|
||||||
case SDLK_j: srv.releaseKey(1 << 1); break;
|
case SDLK_LEFT: srv.releaseKey(Keys::Left); break;
|
||||||
case SDLK_k: srv.releaseKey(1 << 10); break;
|
case SDLK_UP: srv.releaseKey(Keys::Up); break;
|
||||||
case SDLK_l: srv.releaseKey(1 << 11); break;
|
case SDLK_DOWN: srv.releaseKey(Keys::Down); break;
|
||||||
case SDLK_r: srv.releaseKey(1 << 8); break;
|
|
||||||
|
// Err this is probably not ideal
|
||||||
|
case SDLK_w: srv.setCirclepadY(0); break;
|
||||||
|
case SDLK_a: srv.setCirclepadX(0); break;
|
||||||
|
case SDLK_s: srv.setCirclepadY(0); break;
|
||||||
|
case SDLK_d: srv.setCirclepadX(0); break;
|
||||||
|
|
||||||
|
case SDLK_RETURN: srv.releaseKey(Keys::Start); break;
|
||||||
|
case SDLK_BACKSPACE: srv.releaseKey(Keys::Select); break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Update inputs in the HID module
|
||||||
|
srv.updateInputs();
|
||||||
SDL_GL_SwapWindow(window);
|
SDL_GL_SwapWindow(window);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue