[HID] Implement DisableAccelerometer/DisableGyroscopeLow

This commit is contained in:
wheremyfoodat 2023-07-03 19:50:42 +03:00
parent f262cf2836
commit 14356902ab
2 changed files with 22 additions and 0 deletions

View file

@ -63,6 +63,8 @@ class HIDService {
MAKE_LOG_FUNCTION(log, hidLogger)
// Service commands
void disableAccelerometer(u32 messagePointer);
void disableGyroscopeLow(u32 messagePointer);
void enableAccelerometer(u32 messagePointer);
void enableGyroscopeLow(u32 messagePointer);
void getGyroscopeLowCalibrateParam(u32 messagePointer);

View file

@ -7,7 +7,9 @@ namespace HIDCommands {
enum : u32 {
GetIPCHandles = 0x000A0000,
EnableAccelerometer = 0x00110000,
DisableAccelerometer = 0x00120000,
EnableGyroscopeLow = 0x00130000,
DisableGyroscopeLow = 0x00140000,
GetGyroscopeLowRawToDpsCoefficient = 0x00150000,
GetGyroscopeLowCalibrateParam = 0x00160000
};
@ -36,6 +38,8 @@ void HIDService::reset() {
void HIDService::handleSyncRequest(u32 messagePointer) {
const u32 command = mem.read32(messagePointer);
switch (command) {
case HIDCommands::DisableAccelerometer: disableAccelerometer(messagePointer); break;
case HIDCommands::DisableGyroscopeLow: disableGyroscopeLow(messagePointer); break;
case HIDCommands::EnableAccelerometer: enableAccelerometer(messagePointer); break;
case HIDCommands::EnableGyroscopeLow: enableGyroscopeLow(messagePointer); break;
case HIDCommands::GetGyroscopeLowCalibrateParam: getGyroscopeLowCalibrateParam(messagePointer); break;
@ -53,6 +57,14 @@ void HIDService::enableAccelerometer(u32 messagePointer) {
mem.write32(messagePointer + 4, Result::Success);
}
void HIDService::disableAccelerometer(u32 messagePointer) {
log("HID::DisableAccelerometer\n");
accelerometerEnabled = false;
mem.write32(messagePointer, IPC::responseHeader(0x12, 1, 0));
mem.write32(messagePointer + 4, Result::Success);
}
void HIDService::enableGyroscopeLow(u32 messagePointer) {
log("HID::EnableGyroscopeLow\n");
gyroEnabled = true;
@ -61,6 +73,14 @@ void HIDService::enableGyroscopeLow(u32 messagePointer) {
mem.write32(messagePointer + 4, Result::Success);
}
void HIDService::disableGyroscopeLow(u32 messagePointer) {
log("HID::DisableGyroscopeLow\n");
gyroEnabled = false;
mem.write32(messagePointer, IPC::responseHeader(0x14, 1, 0));
mem.write32(messagePointer + 4, Result::Success);
}
void HIDService::getGyroscopeLowCalibrateParam(u32 messagePointer) {
log("HID::GetGyroscopeLowCalibrateParam\n");
constexpr s16 unit = 6700; // Approximately from Citra which took it from hardware