keyboard.h 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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/common_funcs.h"
  7. #include "common/common_types.h"
  8. #include "common/swap.h"
  9. #include "core/frontend/input.h"
  10. #include "core/hle/service/hid/controllers/controller_base.h"
  11. #include "core/settings.h"
  12. namespace Service::HID {
  13. class Controller_Keyboard final : public ControllerBase {
  14. public:
  15. explicit Controller_Keyboard(Core::System& system);
  16. ~Controller_Keyboard() 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 KeyboardState {
  27. s64_le sampling_number;
  28. s64_le sampling_number2;
  29. s32_le modifier;
  30. s32_le attribute;
  31. std::array<u8, 32> key;
  32. };
  33. static_assert(sizeof(KeyboardState) == 0x38, "KeyboardState is an invalid size");
  34. struct SharedMemory {
  35. CommonHeader header;
  36. std::array<KeyboardState, 17> pad_states;
  37. INSERT_PADDING_BYTES(0x28);
  38. };
  39. static_assert(sizeof(SharedMemory) == 0x400, "SharedMemory is an invalid size");
  40. SharedMemory shared_memory{};
  41. std::array<std::unique_ptr<Input::ButtonDevice>, Settings::NativeKeyboard::NumKeyboardKeys>
  42. keyboard_keys;
  43. std::array<std::unique_ptr<Input::ButtonDevice>, Settings::NativeKeyboard::NumKeyboardMods>
  44. keyboard_mods;
  45. Core::System& system;
  46. };
  47. } // namespace Service::HID