hid_core.h 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
  2. // SPDX-License-Identifier: GPL-2.0-or-later
  3. #pragma once
  4. #include <memory>
  5. #include "common/common_funcs.h"
  6. #include "hid_core/hid_types.h"
  7. namespace Core::HID {
  8. class EmulatedConsole;
  9. class EmulatedController;
  10. class EmulatedDevices;
  11. } // namespace Core::HID
  12. namespace Core::HID {
  13. class HIDCore {
  14. public:
  15. explicit HIDCore();
  16. ~HIDCore();
  17. YUZU_NON_COPYABLE(HIDCore);
  18. YUZU_NON_MOVEABLE(HIDCore);
  19. EmulatedController* GetEmulatedController(NpadIdType npad_id_type);
  20. const EmulatedController* GetEmulatedController(NpadIdType npad_id_type) const;
  21. EmulatedController* GetEmulatedControllerByIndex(std::size_t index);
  22. const EmulatedController* GetEmulatedControllerByIndex(std::size_t index) const;
  23. EmulatedConsole* GetEmulatedConsole();
  24. const EmulatedConsole* GetEmulatedConsole() const;
  25. EmulatedDevices* GetEmulatedDevices();
  26. const EmulatedDevices* GetEmulatedDevices() const;
  27. void SetSupportedStyleTag(NpadStyleTag style_tag);
  28. NpadStyleTag GetSupportedStyleTag() const;
  29. /// Counts the connected players from P1-P8
  30. s8 GetPlayerCount() const;
  31. /// Returns the first connected npad id
  32. NpadIdType GetFirstNpadId() const;
  33. /// Returns the first disconnected npad id
  34. NpadIdType GetFirstDisconnectedNpadId() const;
  35. /// Sets the npad id of the last active controller
  36. void SetLastActiveController(NpadIdType npad_id);
  37. /// Returns the npad id of the last controller that pushed a button
  38. NpadIdType GetLastActiveController() const;
  39. /// Sets all emulated controllers into configuring mode.
  40. void EnableAllControllerConfiguration();
  41. /// Sets all emulated controllers into normal mode.
  42. void DisableAllControllerConfiguration();
  43. /// Reloads all input devices from settings
  44. void ReloadInputDevices();
  45. /// Removes all callbacks from input common
  46. void UnloadInputDevices();
  47. /// Number of emulated controllers
  48. static constexpr std::size_t available_controllers{10};
  49. private:
  50. std::unique_ptr<EmulatedController> player_1;
  51. std::unique_ptr<EmulatedController> player_2;
  52. std::unique_ptr<EmulatedController> player_3;
  53. std::unique_ptr<EmulatedController> player_4;
  54. std::unique_ptr<EmulatedController> player_5;
  55. std::unique_ptr<EmulatedController> player_6;
  56. std::unique_ptr<EmulatedController> player_7;
  57. std::unique_ptr<EmulatedController> player_8;
  58. std::unique_ptr<EmulatedController> other;
  59. std::unique_ptr<EmulatedController> handheld;
  60. std::unique_ptr<EmulatedConsole> console;
  61. std::unique_ptr<EmulatedDevices> devices;
  62. NpadStyleTag supported_style_tag{NpadStyleSet::All};
  63. NpadIdType last_active_controller{NpadIdType::Handheld};
  64. };
  65. } // namespace Core::HID