1 // Copyright 2010 Dolphin Emulator Project
2 // Licensed under GPLv2+
3 // Refer to the license.txt file included.
4 
5 #pragma once
6 
7 #include <array>
8 #include <atomic>
9 
10 #include "Common/Common.h"
11 #include "Common/CommonTypes.h"
12 
13 class InputConfig;
14 class PointerWrap;
15 
16 namespace ControllerEmu
17 {
18 class ControlGroup;
19 }
20 
21 namespace WiimoteEmu
22 {
23 enum class WiimoteGroup;
24 enum class NunchukGroup;
25 enum class ClassicGroup;
26 enum class GuitarGroup;
27 enum class DrumsGroup;
28 enum class TurntableGroup;
29 enum class UDrawTabletGroup;
30 enum class DrawsomeTabletGroup;
31 enum class TaTaConGroup;
32 }  // namespace WiimoteEmu
33 
34 enum
35 {
36   WIIMOTE_CHAN_0 = 0,
37   WIIMOTE_CHAN_1,
38   WIIMOTE_CHAN_2,
39   WIIMOTE_CHAN_3,
40   WIIMOTE_BALANCE_BOARD,
41   MAX_WIIMOTES = WIIMOTE_BALANCE_BOARD,
42   MAX_BBMOTES = 5,
43 };
44 
45 #define WIIMOTE_INI_NAME "WiimoteNew"
46 
47 enum class WiimoteSource
48 {
49   None = 0,
50   Emulated = 1,
51   Real = 2,
52 };
53 
54 namespace WiimoteCommon
55 {
56 class HIDWiimote;
57 
58 WiimoteSource GetSource(unsigned int index);
59 void SetSource(unsigned int index, WiimoteSource source);
60 
61 // Used to reconnect WiimoteDevice instance to HID source.
62 // Must be run from CPU thread.
63 void UpdateSource(unsigned int index);
64 
65 HIDWiimote* GetHIDWiimoteSource(unsigned int index);
66 
67 }  // namespace WiimoteCommon
68 
69 namespace Wiimote
70 {
71 enum class InitializeMode
72 {
73   DO_WAIT_FOR_WIIMOTES,
74   DO_NOT_WAIT_FOR_WIIMOTES,
75 };
76 
77 // The Real Wii Remote sends report every ~5ms (200 Hz).
78 constexpr int UPDATE_FREQ = 200;
79 
80 void Shutdown();
81 void Initialize(InitializeMode init_mode);
82 void ResetAllWiimotes();
83 void LoadConfig();
84 void Resume();
85 void Pause();
86 
87 void DoState(PointerWrap& p);
88 InputConfig* GetConfig();
89 ControllerEmu::ControlGroup* GetWiimoteGroup(int number, WiimoteEmu::WiimoteGroup group);
90 ControllerEmu::ControlGroup* GetNunchukGroup(int number, WiimoteEmu::NunchukGroup group);
91 ControllerEmu::ControlGroup* GetClassicGroup(int number, WiimoteEmu::ClassicGroup group);
92 ControllerEmu::ControlGroup* GetGuitarGroup(int number, WiimoteEmu::GuitarGroup group);
93 ControllerEmu::ControlGroup* GetDrumsGroup(int number, WiimoteEmu::DrumsGroup group);
94 ControllerEmu::ControlGroup* GetTurntableGroup(int number, WiimoteEmu::TurntableGroup group);
95 ControllerEmu::ControlGroup* GetUDrawTabletGroup(int number, WiimoteEmu::UDrawTabletGroup group);
96 ControllerEmu::ControlGroup* GetDrawsomeTabletGroup(int number,
97                                                     WiimoteEmu::DrawsomeTabletGroup group);
98 ControllerEmu::ControlGroup* GetTaTaConGroup(int number, WiimoteEmu::TaTaConGroup group);
99 
100 bool NetPlay_GetButtonPress(int wiimote, bool pressed);
101 }  // namespace Wiimote
102 
103 namespace WiimoteReal
104 {
105 void Initialize(::Wiimote::InitializeMode init_mode);
106 void Stop();
107 void Shutdown();
108 void Resume();
109 void Pause();
110 void Refresh();
111 
112 void LoadSettings();
113 
114 }  // namespace WiimoteReal
115