[APT] Implement new 3DS check, [OS] Fix mem allog bug & impl more of HID

This commit is contained in:
wheremyfoodat 2022-09-25 03:35:40 +03:00
parent c4cb20f846
commit 0aaf1c317d
14 changed files with 143 additions and 60 deletions

View file

@ -2,7 +2,15 @@
namespace APTCommands {
enum : u32 {
GetLockHandle = 0x00010040
GetLockHandle = 0x00010040,
CheckNew3DS = 0x01020000
};
}
namespace Model {
enum : u8 {
Old3DS = 0,
New3DS = 1
};
}
@ -18,11 +26,17 @@ void APTService::reset() {}
void APTService::handleSyncRequest(u32 messagePointer) {
const u32 command = mem.read32(messagePointer);
switch (command) {
case APTCommands::CheckNew3DS: checkNew3DS(messagePointer); break;
case APTCommands::GetLockHandle: getLockHandle(messagePointer); break;
default: Helpers::panic("APT service requested. Command: %08X\n", command);
}
}
void APTService::checkNew3DS(u32 messagePointer) {
mem.write32(messagePointer + 4, Result::Success);
mem.write8(messagePointer + 8, Model::Old3DS); // u8, Status (0 = Old 3DS, 1 = New 3DS)
}
void APTService::getLockHandle(u32 messagePointer) {
log("APT::GetLockHandle (Failure)\n");
mem.write32(messagePointer + 4, Result::Failure); // Result code

View file

@ -10,7 +10,7 @@ namespace FSCommands {
namespace Result {
enum : u32 {
Success = 0,
Failure = 0xFFFF'FFFF
Failure = 0xFFFFFFFF
};
}

View file

@ -13,7 +13,9 @@ namespace Result {
};
}
void HIDService::reset() {}
void HIDService::reset() {
sharedMem = nullptr;
}
void HIDService::handleSyncRequest(u32 messagePointer) {
const u32 command = mem.read32(messagePointer);
@ -24,7 +26,15 @@ void HIDService::handleSyncRequest(u32 messagePointer) {
}
void HIDService::getIPCHandles(u32 messagePointer) {
log("HID::GetIPCHandles (Failure)\n");
mem.write32(messagePointer + 4, Result::Failure); // Result code
log("HID::GetIPCHandles\n");
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);
}