From 85b7ebae6f536bc0cd427d49142c4140514f84be Mon Sep 17 00:00:00 2001 From: wheremyfoodat Date: Tue, 11 Oct 2022 23:49:55 +0300 Subject: [PATCH] [HID] Stub more gyroscope calls --- include/services/hid.hpp | 2 ++ include/services/ndm.hpp | 1 + src/core/services/hid.cpp | 23 ++++++++++++++++++++++- src/core/services/ndm.cpp | 9 ++++++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/include/services/hid.hpp b/include/services/hid.hpp index b092220f..7629da3b 100644 --- a/include/services/hid.hpp +++ b/include/services/hid.hpp @@ -17,6 +17,8 @@ class HIDService { // Service commands void enableAccelerometer(u32 messagePointer); void enableGyroscopeLow(u32 messagePointer); + void getGyroscopeLowCalibrateParam(u32 messagePointer); + void getGyroscopeCoefficient(u32 messagePointer); void getIPCHandles(u32 messagePointer); public: diff --git a/include/services/ndm.hpp b/include/services/ndm.hpp index 004722e3..fd0b1973 100644 --- a/include/services/ndm.hpp +++ b/include/services/ndm.hpp @@ -12,6 +12,7 @@ class NDMService { // Service commands void overrideDefaultDaemons(u32 messagePointer); void suspendDaemons(u32 messagePointer); + void suspendScheduler(u32 messagePointer); public: NDMService(Memory& mem) : mem(mem) {} diff --git a/src/core/services/hid.cpp b/src/core/services/hid.cpp index d8a7df74..740b5650 100644 --- a/src/core/services/hid.cpp +++ b/src/core/services/hid.cpp @@ -4,7 +4,9 @@ namespace HIDCommands { enum : u32 { GetIPCHandles = 0x000A0000, EnableAccelerometer = 0x00110000, - EnableGyroscopeLow = 0x00130000 + EnableGyroscopeLow = 0x00130000, + GetGyroscopeLowRawToDpsCoefficient = 0x00150000, + GetGyroscopeLowCalibrateParam = 0x00160000 }; } @@ -26,6 +28,8 @@ void HIDService::handleSyncRequest(u32 messagePointer) { switch (command) { case HIDCommands::EnableAccelerometer: enableAccelerometer(messagePointer); break; case HIDCommands::EnableGyroscopeLow: enableGyroscopeLow(messagePointer); break; + case HIDCommands::GetGyroscopeLowCalibrateParam: getGyroscopeLowCalibrateParam(messagePointer); break; + case HIDCommands::GetGyroscopeLowRawToDpsCoefficient: getGyroscopeCoefficient(messagePointer); break; case HIDCommands::GetIPCHandles: getIPCHandles(messagePointer); break; default: Helpers::panic("HID service requested. Command: %08X\n", command); } @@ -43,6 +47,23 @@ void HIDService::enableGyroscopeLow(u32 messagePointer) { gyroEnabled = true; } +void HIDService::getGyroscopeLowCalibrateParam(u32 messagePointer) { + log("HID::GetGyroscopeLowCalibrateParam\n"); + + mem.write32(messagePointer + 4, Result::Success); + // Fill calibration data with 0s since we don't have gyro + for (int i = 0; i < 5; i++) { + mem.write32(messagePointer + 8 + i * 4, 0); + } +} + +void HIDService::getGyroscopeCoefficient(u32 messagePointer) { + log("HID::GetGyroscopeLowRawToDpsCoefficient\n"); + + mem.write32(messagePointer + 4, Result::Success); + // This should write a coeff value here but we don't have gyro so +} + void HIDService::getIPCHandles(u32 messagePointer) { log("HID::GetIPCHandles\n"); mem.write32(messagePointer + 4, Result::Success); // Result code diff --git a/src/core/services/ndm.cpp b/src/core/services/ndm.cpp index f171d0a4..2803b4a2 100644 --- a/src/core/services/ndm.cpp +++ b/src/core/services/ndm.cpp @@ -3,7 +3,8 @@ namespace NDMCommands { enum : u32 { OverrideDefaultDaemons = 0x00140040, - SuspendDaemons = 0x00060040 + SuspendDaemons = 0x00060040, + SuspendScheduler = 0x00080040 }; } @@ -20,6 +21,7 @@ void NDMService::handleSyncRequest(u32 messagePointer) { switch (command) { case NDMCommands::OverrideDefaultDaemons: overrideDefaultDaemons(messagePointer); break; case NDMCommands::SuspendDaemons: suspendDaemons(messagePointer); break; + case NDMCommands::SuspendScheduler: suspendScheduler(messagePointer); break; default: Helpers::panic("NDM service requested. Command: %08X\n", command); } } @@ -32,4 +34,9 @@ void NDMService::overrideDefaultDaemons(u32 messagePointer) { void NDMService::suspendDaemons(u32 messagePointer) { log("NDM::SuspendDaemons(stubbed)\n"); mem.write32(messagePointer + 4, Result::Success); +} + +void NDMService::suspendScheduler(u32 messagePointer) { + log("NDM::SuspendScheduler(stubbed)\n"); + mem.write32(messagePointer + 4, Result::Success); } \ No newline at end of file