fake_igamepad.cc 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "device/gamepad/test_support/fake_igamepad.h"
  5. #include "base/containers/flat_map.h"
  6. #include "base/notreached.h"
  7. #include "device/gamepad/test_support/fake_winrt_wgi_environment.h"
  8. using ABI::Windows::Foundation::ITypedEventHandler;
  9. using ABI::Windows::Gaming::Input::GameControllerButtonLabel;
  10. using ABI::Windows::Gaming::Input::GamepadButtons;
  11. using ABI::Windows::Gaming::Input::Headset;
  12. using ABI::Windows::Gaming::Input::IGameController;
  13. using ABI::Windows::Gaming::Input::IHeadset;
  14. using ABI::Windows::System::IUser;
  15. using ABI::Windows::System::UserChangedEventArgs;
  16. namespace device {
  17. FakeIGamepad::FakeIGamepad() = default;
  18. FakeIGamepad::~FakeIGamepad() = default;
  19. HRESULT WINAPI FakeIGamepad::get_Vibration(
  20. ABI::Windows::Gaming::Input::GamepadVibration* gamepad_vibration) {
  21. gamepad_vibration->LeftMotor = fake_gamepad_vibration_.LeftMotor;
  22. gamepad_vibration->LeftTrigger = fake_gamepad_vibration_.LeftTrigger;
  23. gamepad_vibration->RightMotor = fake_gamepad_vibration_.RightMotor;
  24. gamepad_vibration->RightTrigger = fake_gamepad_vibration_.RightTrigger;
  25. return S_OK;
  26. }
  27. HRESULT WINAPI FakeIGamepad::put_Vibration(
  28. ABI::Windows::Gaming::Input::GamepadVibration gamepad_vibration) {
  29. fake_gamepad_vibration_ = gamepad_vibration;
  30. return S_OK;
  31. }
  32. HRESULT WINAPI FakeIGamepad::GetCurrentReading(
  33. ABI::Windows::Gaming::Input::GamepadReading* gamepad_reading) {
  34. if (FakeWinrtWgiEnvironment::GetError() ==
  35. ErrorCode::kErrorWgiGamepadGetCurrentReadingFailed) {
  36. return E_FAIL;
  37. }
  38. gamepad_reading->Buttons = fake_gamepad_reading_.Buttons;
  39. gamepad_reading->LeftThumbstickX = fake_gamepad_reading_.LeftThumbstickX;
  40. gamepad_reading->LeftThumbstickY = fake_gamepad_reading_.LeftThumbstickY;
  41. gamepad_reading->RightThumbstickX = fake_gamepad_reading_.RightThumbstickX;
  42. gamepad_reading->RightThumbstickY = fake_gamepad_reading_.RightThumbstickY;
  43. gamepad_reading->LeftTrigger = fake_gamepad_reading_.LeftTrigger;
  44. gamepad_reading->RightTrigger = fake_gamepad_reading_.RightTrigger;
  45. return S_OK;
  46. }
  47. HRESULT WINAPI FakeIGamepad::GetButtonLabel(
  48. ABI::Windows::Gaming::Input::GamepadButtons button,
  49. ABI::Windows::Gaming::Input::GameControllerButtonLabel* value) {
  50. if (FakeWinrtWgiEnvironment::GetError() ==
  51. ErrorCode::kErrorWgiGamepadGetButtonLabelFailed) {
  52. return E_FAIL;
  53. }
  54. // We only need to simulate this functionality for paddle buttons.
  55. static const base::flat_map<GamepadButtons, GameControllerButtonLabel>
  56. button_label_mapping = {
  57. {GamepadButtons::GamepadButtons_Paddle1,
  58. GameControllerButtonLabel::GameControllerButtonLabel_Paddle1},
  59. {GamepadButtons::GamepadButtons_Paddle2,
  60. GameControllerButtonLabel::GameControllerButtonLabel_Paddle2},
  61. {GamepadButtons::GamepadButtons_Paddle3,
  62. GameControllerButtonLabel::GameControllerButtonLabel_Paddle3},
  63. {GamepadButtons::GamepadButtons_Paddle4,
  64. GameControllerButtonLabel::GameControllerButtonLabel_Paddle4}};
  65. auto it = button_label_mapping.find(button);
  66. if (!has_paddles_ || it == button_label_mapping.end()) {
  67. *value = ABI::Windows::Gaming::Input::GameControllerButtonLabel::
  68. GameControllerButtonLabel_None;
  69. } else {
  70. *value = it->second;
  71. }
  72. return S_OK;
  73. }
  74. HRESULT WINAPI FakeIGamepad::add_HeadsetConnected(
  75. ITypedEventHandler<IGameController*, Headset*>* value,
  76. EventRegistrationToken* token) {
  77. NOTIMPLEMENTED();
  78. return S_OK;
  79. }
  80. HRESULT WINAPI
  81. FakeIGamepad::remove_HeadsetConnected(EventRegistrationToken token) {
  82. NOTIMPLEMENTED();
  83. return S_OK;
  84. }
  85. HRESULT WINAPI FakeIGamepad::add_HeadsetDisconnected(
  86. ITypedEventHandler<IGameController*, Headset*>* value,
  87. EventRegistrationToken* token) {
  88. NOTIMPLEMENTED();
  89. return S_OK;
  90. }
  91. HRESULT WINAPI
  92. FakeIGamepad::remove_HeadsetDisconnected(EventRegistrationToken token) {
  93. NOTIMPLEMENTED();
  94. return S_OK;
  95. }
  96. HRESULT WINAPI FakeIGamepad::add_UserChanged(
  97. ITypedEventHandler<IGameController*, UserChangedEventArgs*>* value,
  98. EventRegistrationToken* token) {
  99. NOTIMPLEMENTED();
  100. return S_OK;
  101. }
  102. HRESULT WINAPI FakeIGamepad::remove_UserChanged(EventRegistrationToken token) {
  103. NOTIMPLEMENTED();
  104. return S_OK;
  105. }
  106. HRESULT WINAPI FakeIGamepad::get_Headset(IHeadset** value) {
  107. NOTIMPLEMENTED();
  108. return S_OK;
  109. }
  110. HRESULT WINAPI FakeIGamepad::get_IsWireless(boolean* value) {
  111. NOTIMPLEMENTED();
  112. return S_OK;
  113. }
  114. HRESULT WINAPI FakeIGamepad::get_User(IUser** value) {
  115. NOTIMPLEMENTED();
  116. return S_OK;
  117. }
  118. void FakeIGamepad::SetCurrentReading(
  119. const ABI::Windows::Gaming::Input::GamepadReading& gamepad_reading) {
  120. fake_gamepad_reading_.Buttons = gamepad_reading.Buttons;
  121. fake_gamepad_reading_.LeftThumbstickX = gamepad_reading.LeftThumbstickX;
  122. fake_gamepad_reading_.LeftThumbstickY = gamepad_reading.LeftThumbstickY;
  123. fake_gamepad_reading_.RightThumbstickX = gamepad_reading.RightThumbstickX;
  124. fake_gamepad_reading_.RightThumbstickY = gamepad_reading.RightThumbstickY;
  125. fake_gamepad_reading_.LeftTrigger = gamepad_reading.LeftTrigger;
  126. fake_gamepad_reading_.RightTrigger = gamepad_reading.RightTrigger;
  127. }
  128. } // namespace device