diff options
author | bunnei <bunneidev@gmail.com> | 2021-04-30 07:06:57 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-30 07:06:57 +0200 |
commit | 922b0d9933951a97879707e038f24f0ba2b3ef95 (patch) | |
tree | 0dee932da2a54352f20958a5357c6a7915e143a8 /src/core/hle/service/hid/controllers/console_sixaxis.h | |
parent | Merge pull request #6258 from Morph1984/config-conv (diff) | |
parent | address comments (diff) | |
download | yuzu-922b0d9933951a97879707e038f24f0ba2b3ef95.tar yuzu-922b0d9933951a97879707e038f24f0ba2b3ef95.tar.gz yuzu-922b0d9933951a97879707e038f24f0ba2b3ef95.tar.bz2 yuzu-922b0d9933951a97879707e038f24f0ba2b3ef95.tar.lz yuzu-922b0d9933951a97879707e038f24f0ba2b3ef95.tar.xz yuzu-922b0d9933951a97879707e038f24f0ba2b3ef95.tar.zst yuzu-922b0d9933951a97879707e038f24f0ba2b3ef95.zip |
Diffstat (limited to 'src/core/hle/service/hid/controllers/console_sixaxis.h')
-rw-r--r-- | src/core/hle/service/hid/controllers/console_sixaxis.h | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/core/hle/service/hid/controllers/console_sixaxis.h b/src/core/hle/service/hid/controllers/console_sixaxis.h new file mode 100644 index 000000000..1fae98e94 --- /dev/null +++ b/src/core/hle/service/hid/controllers/console_sixaxis.h @@ -0,0 +1,80 @@ +// Copyright 2021 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include <array> +#include "common/bit_field.h" +#include "common/common_types.h" +#include "common/quaternion.h" +#include "core/frontend/input.h" +#include "core/hle/service/hid/controllers/controller_base.h" + +namespace Service::HID { +class Controller_ConsoleSixAxis final : public ControllerBase { +public: + explicit Controller_ConsoleSixAxis(Core::System& system); + ~Controller_ConsoleSixAxis() override; + + // Called when the controller is initialized + void OnInit() override; + + // When the controller is released + void OnRelease() override; + + // When the controller is requesting an update for the shared memory + void OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, size_t size) override; + + // Called when input devices should be loaded + void OnLoadInputDevices() override; + + // Called on InitializeSevenSixAxisSensor + void SetTransferMemoryPointer(u8* t_mem); + + // Called on ResetSevenSixAxisSensorTimestamp + void ResetTimestamp(); + +private: + struct SevenSixAxisState { + INSERT_PADDING_WORDS(4); // unused + s64_le sampling_number{}; + s64_le sampling_number2{}; + u64 unknown{}; + Common::Vec3f accel{}; + Common::Vec3f gyro{}; + Common::Quaternion<f32> quaternion{}; + }; + static_assert(sizeof(SevenSixAxisState) == 0x50, "SevenSixAxisState is an invalid size"); + + struct SevenSixAxisMemory { + CommonHeader header{}; + std::array<SevenSixAxisState, 0x21> sevensixaxis_states{}; + }; + static_assert(sizeof(SevenSixAxisMemory) == 0xA70, "SevenSixAxisMemory is an invalid size"); + + struct ConsoleSharedMemory { + u64_le sampling_number{}; + bool is_seven_six_axis_sensor_at_rest{}; + f32 verticalization_error{}; + Common::Vec3f gyro_bias{}; + }; + static_assert(sizeof(ConsoleSharedMemory) == 0x20, "ConsoleSharedMemory is an invalid size"); + + struct MotionDevice { + Common::Vec3f accel; + Common::Vec3f gyro; + Common::Vec3f rotation; + std::array<Common::Vec3f, 3> orientation; + Common::Quaternion<f32> quaternion; + }; + + using MotionArray = + std::array<std::unique_ptr<Input::MotionDevice>, Settings::NativeMotion::NUM_MOTIONS_HID>; + MotionArray motions; + u8* transfer_memory = nullptr; + bool is_transfer_memory_set = false; + ConsoleSharedMemory console_six_axis{}; + SevenSixAxisMemory seven_six_axis{}; +}; +} // namespace Service::HID |