mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-08 07:05:40 +12:00
Make HID::GetIPCHandles fail to skip hidInit
This commit is contained in:
parent
340e0c9266
commit
083a0d04d7
3 changed files with 14 additions and 3 deletions
|
@ -7,6 +7,9 @@ class HIDService {
|
||||||
Handle handle = KernelHandles::HID;
|
Handle handle = KernelHandles::HID;
|
||||||
Memory& mem;
|
Memory& mem;
|
||||||
|
|
||||||
|
// Service commands
|
||||||
|
void getIPCHandles(u32 messagePointer);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HIDService(Memory& mem) : mem(mem) {}
|
HIDService(Memory& mem) : mem(mem) {}
|
||||||
void reset();
|
void reset();
|
||||||
|
|
|
@ -2,13 +2,14 @@
|
||||||
|
|
||||||
namespace HIDCommands {
|
namespace HIDCommands {
|
||||||
enum : u32 {
|
enum : u32 {
|
||||||
|
GetIPCHandles = 0x000A0000
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Result {
|
namespace Result {
|
||||||
enum : u32 {
|
enum : u32 {
|
||||||
Success = 0,
|
Success = 0,
|
||||||
|
Failure = 0xFFFFFFFF
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,6 +18,13 @@ void HIDService::reset() {}
|
||||||
void HIDService::handleSyncRequest(u32 messagePointer) {
|
void HIDService::handleSyncRequest(u32 messagePointer) {
|
||||||
const u32 command = mem.read32(messagePointer);
|
const u32 command = mem.read32(messagePointer);
|
||||||
switch (command) {
|
switch (command) {
|
||||||
|
case HIDCommands::GetIPCHandles: getIPCHandles(messagePointer); break;
|
||||||
default: Helpers::panic("HID service requested. Command: %08X\n", command);
|
default: Helpers::panic("HID service requested. Command: %08X\n", command);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HIDService::getIPCHandles(u32 messagePointer) {
|
||||||
|
printf("HID: getIPCHandles (Failure)\n");
|
||||||
|
mem.write32(messagePointer + 4, Result::Failure); // Result code
|
||||||
|
mem.write32(messagePointer + 8, 0x14000000); // Translation descriptor
|
||||||
}
|
}
|
|
@ -64,7 +64,7 @@ void ServiceManager::getServiceHandle(u32 messagePointer) {
|
||||||
if (service == "APT:S") {
|
if (service == "APT:S") {
|
||||||
handle = KernelHandles::APT;
|
handle = KernelHandles::APT;
|
||||||
} else if (service == "hid:USER") {
|
} else if (service == "hid:USER") {
|
||||||
handle = KernelHandles::HID;
|
handle = KernelHandles::HID;
|
||||||
} else {
|
} else {
|
||||||
Helpers::panic("srv: GetServiceHandle with unknown service %s", service.c_str());
|
Helpers::panic("srv: GetServiceHandle with unknown service %s", service.c_str());
|
||||||
}
|
}
|
||||||
|
@ -77,6 +77,6 @@ void ServiceManager::sendCommandToService(u32 messagePointer, Handle handle) {
|
||||||
switch (handle) {
|
switch (handle) {
|
||||||
case KernelHandles::APT: apt.handleSyncRequest(messagePointer); break;
|
case KernelHandles::APT: apt.handleSyncRequest(messagePointer); break;
|
||||||
case KernelHandles::HID: hid.handleSyncRequest(messagePointer); break;
|
case KernelHandles::HID: hid.handleSyncRequest(messagePointer); break;
|
||||||
default: Helpers::panic("Sent IPC message to unknown service %08X\n", handle);
|
default: Helpers::panic("Sent IPC message to unknown service %08X\n Command: %08X", handle, mem.read32(messagePointer));
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Add table
Reference in a new issue