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