mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-07 14:45:41 +12:00
Add basic input
This commit is contained in:
parent
a44ac89c78
commit
a8334f1333
5 changed files with 56 additions and 1 deletions
|
@ -200,5 +200,10 @@ public:
|
|||
|
||||
void sendGPUInterrupt(GPUInterrupt type) { serviceManager.requestGPUInterrupt(type); }
|
||||
void signalDSPEvents() { serviceManager.signalDSPEvents(); }
|
||||
|
||||
void pressKey(u32 key) { serviceManager.pressKey(key); }
|
||||
void releaseKey(u32 key) { serviceManager.releaseKey(key); }
|
||||
void setCirclepadX(u16 x) { serviceManager.setCirclepadX(x); }
|
||||
void setCirclepadY(u16 y) { serviceManager.setCirclepadY(y); }
|
||||
void updateInputs() { serviceManager.updateInputs(); }
|
||||
};
|
|
@ -34,6 +34,11 @@ public:
|
|||
HIDService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {}
|
||||
void reset();
|
||||
void handleSyncRequest(u32 messagePointer);
|
||||
|
||||
void pressKey(u32 key);
|
||||
void releaseKey(u32 key);
|
||||
void setCirclepadX(u16 x);
|
||||
void setCirclepadY(u16 y);
|
||||
void updateInputs();
|
||||
|
||||
void setSharedMem(u8* ptr) {
|
||||
|
|
|
@ -82,5 +82,10 @@ public:
|
|||
void setHIDSharedMem(u8* ptr) { hid.setSharedMem(ptr); }
|
||||
|
||||
void signalDSPEvents() { dsp.signalEvents(); }
|
||||
|
||||
void pressKey(u32 key) { hid.pressKey(key); }
|
||||
void releaseKey(u32 key) { hid.releaseKey(key); }
|
||||
void setCirclepadX(u16 x) { hid.setCirclepadX(x); }
|
||||
void setCirclepadY(u16 y) { hid.setCirclepadY(y); }
|
||||
void updateInputs() { hid.updateInputs(); }
|
||||
};
|
|
@ -108,6 +108,11 @@ void HIDService::getIPCHandles(u32 messagePointer) {
|
|||
}
|
||||
}
|
||||
|
||||
void HIDService::pressKey(u32 key) { sharedMem[0]++; *(u32*)&sharedMem[0x28] |= key; }
|
||||
void HIDService::releaseKey(u32 key) { sharedMem[0]++; *(u32*)&sharedMem[0x28] &= ~key; }
|
||||
void HIDService::setCirclepadX(u16 x) { sharedMem[0]++; *(u16*)&sharedMem[0x28 + 0xC] = x; }
|
||||
void HIDService::setCirclepadY(u16 y) { sharedMem[0]++; *(u16*)&sharedMem[0x28 + 0xC + 2] = y; }
|
||||
|
||||
// TODO: We don't currently have inputs but we must at least try to signal the HID key input events now and then
|
||||
void HIDService::updateInputs() {
|
||||
// For some reason, the original developers decided to signal the HID events each time the OS rescanned inputs
|
||||
|
|
|
@ -36,10 +36,45 @@ void Emulator::run() {
|
|||
|
||||
SDL_Event event;
|
||||
while (SDL_PollEvent(&event)) {
|
||||
if (event.type == SDL_QUIT) {
|
||||
switch (event.type) {
|
||||
case SDL_QUIT:
|
||||
printf("Bye :(\n");
|
||||
running = false;
|
||||
return;
|
||||
case SDL_KEYDOWN:
|
||||
switch (event.key.keysym.sym) {
|
||||
case SDLK_z: kernel.pressKey(1 << 0); break;
|
||||
case SDLK_RIGHT: kernel.pressKey(1 << 4); break;
|
||||
case SDLK_LEFT: kernel.pressKey(1 << 5); break;
|
||||
case SDLK_UP: kernel.pressKey(1 << 6); break;
|
||||
case SDLK_DOWN: kernel.pressKey(1 << 7); break;
|
||||
case SDLK_w: kernel.setCirclepadY(0x9C); break;
|
||||
case SDLK_a: kernel.setCirclepadX(-0x9C); break;
|
||||
case SDLK_s: kernel.setCirclepadY(-0x9C); break;
|
||||
case SDLK_d: kernel.setCirclepadX(0x9C); break;
|
||||
case SDLK_j: kernel.pressKey(1 << 1); break;
|
||||
case SDLK_k: kernel.pressKey(1 << 10); break;
|
||||
case SDLK_l: kernel.pressKey(1 << 11); break;
|
||||
case SDLK_r: kernel.pressKey(1 << 8); break;
|
||||
}
|
||||
break;
|
||||
case SDL_KEYUP:
|
||||
switch (event.key.keysym.sym) {
|
||||
case SDLK_z: kernel.releaseKey(1 << 0); break;
|
||||
case SDLK_RIGHT: kernel.releaseKey(1 << 4); break;
|
||||
case SDLK_LEFT: kernel.releaseKey(1 << 5); break;
|
||||
case SDLK_UP: kernel.releaseKey(1 << 6); break;
|
||||
case SDLK_DOWN: kernel.releaseKey(1 << 7); break;
|
||||
case SDLK_w: kernel.setCirclepadY(0); break;
|
||||
case SDLK_a: kernel.setCirclepadX(0); break;
|
||||
case SDLK_s: kernel.setCirclepadY(0); break;
|
||||
case SDLK_d: kernel.setCirclepadX(0); break;
|
||||
case SDLK_j: kernel.releaseKey(1 << 1); break;
|
||||
case SDLK_k: kernel.releaseKey(1 << 10); break;
|
||||
case SDLK_l: kernel.releaseKey(1 << 11); break;
|
||||
case SDLK_r: kernel.releaseKey(1 << 8); break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue