mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-07-08 00:02:58 +12:00
Initial accelerometer support
This commit is contained in:
parent
ff7e0f9ca8
commit
c772b1c702
4 changed files with 45 additions and 3 deletions
|
@ -35,6 +35,7 @@ void HIDService::reset() {
|
|||
circlePadX = circlePadY = 0;
|
||||
touchScreenX = touchScreenY = 0;
|
||||
roll = pitch = yaw = 0;
|
||||
accelX = accelY = accelZ = 0;
|
||||
}
|
||||
|
||||
void HIDService::handleSyncRequest(u32 messagePointer) {
|
||||
|
@ -189,6 +190,20 @@ void HIDService::updateInputs(u64 currentTick) {
|
|||
writeSharedMem<u64>(0x108, currentTick); // Write new tick count
|
||||
}
|
||||
writeSharedMem<u32>(0x118, nextAccelerometerIndex); // Index last updated by the HID module
|
||||
const size_t accelEntryOffset = 0x128 + (nextAccelerometerIndex * 6); // Offset in the array of 8 accelerometer entries
|
||||
|
||||
// Raw data of current accelerometer entry
|
||||
// TODO: How is the "raw" data actually calculated?
|
||||
s16* accelerometerDataRaw = getSharedMemPointer<s16>(0x120);
|
||||
accelerometerDataRaw[0] = accelX;
|
||||
accelerometerDataRaw[1] = accelY;
|
||||
accelerometerDataRaw[2] = accelZ;
|
||||
|
||||
// Accelerometer entry in entry table
|
||||
s16* accelerometerData = getSharedMemPointer<s16>(accelEntryOffset);
|
||||
accelerometerData[0] = accelX;
|
||||
accelerometerData[1] = accelY;
|
||||
accelerometerData[2] = accelZ;
|
||||
nextAccelerometerIndex = (nextAccelerometerIndex + 1) % 8; // Move to next entry
|
||||
|
||||
// Next, update gyro state
|
||||
|
@ -197,9 +212,10 @@ void HIDService::updateInputs(u64 currentTick) {
|
|||
writeSharedMem<u64>(0x158, currentTick); // Write new tick count
|
||||
}
|
||||
const size_t gyroEntryOffset = 0x178 + (nextGyroIndex * 6); // Offset in the array of 8 touchscreen entries
|
||||
writeSharedMem<u16>(gyroEntryOffset, pitch);
|
||||
writeSharedMem<u16>(gyroEntryOffset + 2, yaw);
|
||||
writeSharedMem<u16>(gyroEntryOffset + 4, roll);
|
||||
s16* gyroData = getSharedMemPointer<s16>(gyroEntryOffset);
|
||||
gyroData[0] = pitch;
|
||||
gyroData[1] = yaw;
|
||||
gyroData[2] = roll;
|
||||
|
||||
// Since gyroscope euler angles are relative, we zero them out here and the frontend will update them again when we receive a new rotation
|
||||
roll = pitch = yaw = 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue