1 // Copyright 2018 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 5 #ifndef DEVICE_GAMEPAD_XINPUT_HAPTIC_GAMEPAD_WIN_ 6 #define DEVICE_GAMEPAD_XINPUT_HAPTIC_GAMEPAD_WIN_ 7 8 #include <Unknwn.h> 9 #include <XInput.h> 10 11 #include "base/memory/weak_ptr.h" 12 #include "device/gamepad/abstract_haptic_gamepad.h" 13 14 namespace device { 15 16 class XInputHapticGamepadWin final : public AbstractHapticGamepad { 17 public: 18 typedef DWORD(WINAPI* XInputSetStateFunc)(DWORD dwUserIndex, 19 XINPUT_VIBRATION* pVibration); 20 21 XInputHapticGamepadWin(int pad_id, XInputSetStateFunc xinput_set_state); 22 ~XInputHapticGamepadWin() override; 23 24 // AbstractHapticGamepad implementation. 25 void SetVibration(double strong_magnitude, double weak_magnitude) override; 26 base::WeakPtr<AbstractHapticGamepad> GetWeakPtr() override; 27 28 private: 29 int pad_id_; 30 XInputSetStateFunc xinput_set_state_; 31 base::WeakPtrFactory<XInputHapticGamepadWin> weak_factory_{this}; 32 }; 33 34 } // namespace device 35 36 #endif // DEVICE_GAMEPAD_EVDEV_HAPTIC_GAMEPAD_WIN_ 37