mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-20 12:39:13 +12:00
[HID] Implement events
This commit is contained in:
parent
5465eb31c1
commit
6419098851
7 changed files with 34 additions and 15 deletions
|
@ -1,5 +1,6 @@
|
|||
#include "services/hid.hpp"
|
||||
#include "ipc.hpp"
|
||||
#include "kernel.hpp"
|
||||
#include <bit>
|
||||
|
||||
namespace HIDCommands {
|
||||
|
@ -80,15 +81,23 @@ void HIDService::getGyroscopeCoefficient(u32 messagePointer) {
|
|||
|
||||
void HIDService::getIPCHandles(u32 messagePointer) {
|
||||
log("HID::GetIPCHandles\n");
|
||||
|
||||
// Initialize HID events
|
||||
if (!eventsInitialized) {
|
||||
eventsInitialized = true;
|
||||
|
||||
for (auto& e : events) {
|
||||
e = kernel.makeEvent(ResetType::OneShot);
|
||||
}
|
||||
}
|
||||
|
||||
mem.write32(messagePointer, IPC::responseHeader(0xA, 1, 7));
|
||||
mem.write32(messagePointer + 4, Result::Success); // Result code
|
||||
mem.write32(messagePointer + 8, 0x14000000); // Translation descriptor
|
||||
mem.write32(messagePointer + 12, KernelHandles::HIDSharedMemHandle); // Shared memory handle
|
||||
|
||||
// HID event handles
|
||||
mem.write32(messagePointer + 16, KernelHandles::HIDEvent0);
|
||||
mem.write32(messagePointer + 20, KernelHandles::HIDEvent1);
|
||||
mem.write32(messagePointer + 24, KernelHandles::HIDEvent2);
|
||||
mem.write32(messagePointer + 28, KernelHandles::HIDEvent3);
|
||||
mem.write32(messagePointer + 32, KernelHandles::HIDEvent4);
|
||||
// Write HID event handles
|
||||
for (int i = 0; i < events.size(); i++) {
|
||||
mem.write32(messagePointer + 16 + sizeof(Handle) * i, events[i].value());
|
||||
}
|
||||
}
|
|
@ -5,8 +5,9 @@
|
|||
|
||||
ServiceManager::ServiceManager(std::array<u32, 16>& regs, Memory& mem, GPU& gpu, u32& currentPID, Kernel& kernel)
|
||||
: regs(regs), mem(mem), kernel(kernel), ac(mem), am(mem), boss(mem), act(mem), apt(mem, kernel), cam(mem),
|
||||
cecd(mem, kernel), cfg(mem), dsp(mem, kernel), hid(mem), frd(mem), fs(mem, kernel), gsp_gpu(mem, gpu, kernel, currentPID), gsp_lcd(mem),
|
||||
ldr(mem), mic(mem), nfc(mem, kernel), nim(mem), ndm(mem), ptm(mem), y2r(mem, kernel) {}
|
||||
cecd(mem, kernel), cfg(mem), dsp(mem, kernel), hid(mem, kernel), frd(mem), fs(mem, kernel),
|
||||
gsp_gpu(mem, gpu, kernel, currentPID), gsp_lcd(mem), ldr(mem), mic(mem), nfc(mem, kernel), nim(mem), ndm(mem),
|
||||
ptm(mem), y2r(mem, kernel) {}
|
||||
|
||||
static constexpr int MAX_NOTIFICATION_COUNT = 16;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue