mouse.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // Copyright 2018 yuzu emulator team
  2. // Licensed under GPLv2 or any later version
  3. // Refer to the license.txt file included.
  4. #pragma once
  5. #include <array>
  6. #include "common/bit_field.h"
  7. #include "common/common_types.h"
  8. #include "common/settings.h"
  9. #include "common/swap.h"
  10. #include "core/frontend/input.h"
  11. #include "core/hle/service/hid/controllers/controller_base.h"
  12. namespace Service::HID {
  13. class Controller_Mouse final : public ControllerBase {
  14. public:
  15. explicit Controller_Mouse(Core::System& system);
  16. ~Controller_Mouse() override;
  17. // Called when the controller is initialized
  18. void OnInit() override;
  19. // When the controller is released
  20. void OnRelease() override;
  21. // When the controller is requesting an update for the shared memory
  22. void OnUpdate(const Core::Timing::CoreTiming& core_timing, u8* data, std::size_t size) override;
  23. // Called when input devices should be loaded
  24. void OnLoadInputDevices() override;
  25. private:
  26. struct Buttons {
  27. union {
  28. u32_le raw{};
  29. BitField<0, 1, u32> left;
  30. BitField<1, 1, u32> right;
  31. BitField<2, 1, u32> middle;
  32. BitField<3, 1, u32> forward;
  33. BitField<4, 1, u32> back;
  34. };
  35. };
  36. static_assert(sizeof(Buttons) == 0x4, "Buttons is an invalid size");
  37. struct Attributes {
  38. union {
  39. u32_le raw{};
  40. BitField<0, 1, u32> transferable;
  41. BitField<1, 1, u32> is_connected;
  42. };
  43. };
  44. static_assert(sizeof(Attributes) == 0x4, "Attributes is an invalid size");
  45. struct MouseState {
  46. s64_le sampling_number;
  47. s64_le sampling_number2;
  48. s32_le x;
  49. s32_le y;
  50. s32_le delta_x;
  51. s32_le delta_y;
  52. s32_le mouse_wheel_x;
  53. s32_le mouse_wheel_y;
  54. Buttons button;
  55. Attributes attribute;
  56. };
  57. static_assert(sizeof(MouseState) == 0x30, "MouseState is an invalid size");
  58. struct SharedMemory {
  59. CommonHeader header;
  60. std::array<MouseState, 17> mouse_states;
  61. };
  62. SharedMemory shared_memory{};
  63. std::unique_ptr<Input::MouseDevice> mouse_device;
  64. std::array<std::unique_ptr<Input::ButtonDevice>, Settings::NativeMouseButton::NumMouseButtons>
  65. mouse_button_devices;
  66. };
  67. } // namespace Service::HID