[HID] Implement events

This commit is contained in:
wheremyfoodat 2023-04-29 02:45:21 +03:00
parent 5465eb31c1
commit 6419098851
7 changed files with 34 additions and 15 deletions

View file

@ -41,12 +41,6 @@ namespace KernelHandles {
MinSharedMemHandle = GSPSharedMemHandle,
MaxSharedMemHandle = HIDSharedMemHandle,
HIDEvent0,
HIDEvent1,
HIDEvent2,
HIDEvent3,
HIDEvent4
};
// Returns whether "handle" belongs to one of the OS services

View file

@ -198,4 +198,5 @@ public:
void sendGPUInterrupt(GPUInterrupt type) { serviceManager.requestGPUInterrupt(type); }
void signalDSPEvents() { serviceManager.signalDSPEvents(); }
void updateInputs() { serviceManager.updateInputs(); }
};

View file

@ -1,17 +1,26 @@
#pragma once
#include <array>
#include <optional>
#include "helpers.hpp"
#include "kernel_types.hpp"
#include "logger.hpp"
#include "memory.hpp"
// Circular dependency because we need HID to spawn events
class Kernel;
class HIDService {
Handle handle = KernelHandles::HID;
Memory& mem;
Kernel& kernel;
u8* sharedMem = nullptr; // Pointer to HID shared memory
bool accelerometerEnabled;
bool eventsInitialized;
bool gyroEnabled;
std::array<std::optional<Handle>, 5> events;
MAKE_LOG_FUNCTION(log, hidLogger)
// Service commands
@ -22,9 +31,10 @@ class HIDService {
void getIPCHandles(u32 messagePointer);
public:
HIDService(Memory& mem) : mem(mem) {}
HIDService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {}
void reset();
void handleSyncRequest(u32 messagePointer);
void updateInputs();
void setSharedMem(u8* ptr) {
sharedMem = ptr;

View file

@ -82,4 +82,5 @@ public:
void setHIDSharedMem(u8* ptr) { hid.setSharedMem(ptr); }
void signalDSPEvents() { dsp.signalEvents(); }
void updateInputs() { hid.updateInputs(); }
};