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