2022-04-23 01:59:50 -07:00
|
|
|
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
2021-09-20 17:43:16 -07:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
2022-02-02 09:12:22 -08:00
|
|
|
#include "common/common_funcs.h"
|
2021-11-01 13:17:53 -07:00
|
|
|
#include "core/hid/hid_types.h"
|
|
|
|
|
|
|
|
namespace Core::HID {
|
|
|
|
class EmulatedConsole;
|
|
|
|
class EmulatedController;
|
|
|
|
class EmulatedDevices;
|
|
|
|
} // namespace Core::HID
|
2021-09-20 17:43:16 -07:00
|
|
|
|
|
|
|
namespace Core::HID {
|
|
|
|
|
|
|
|
class HIDCore {
|
|
|
|
public:
|
|
|
|
explicit HIDCore();
|
|
|
|
~HIDCore();
|
|
|
|
|
|
|
|
YUZU_NON_COPYABLE(HIDCore);
|
|
|
|
YUZU_NON_MOVEABLE(HIDCore);
|
|
|
|
|
|
|
|
EmulatedController* GetEmulatedController(NpadIdType npad_id_type);
|
|
|
|
const EmulatedController* GetEmulatedController(NpadIdType npad_id_type) const;
|
|
|
|
|
|
|
|
EmulatedController* GetEmulatedControllerByIndex(std::size_t index);
|
|
|
|
const EmulatedController* GetEmulatedControllerByIndex(std::size_t index) const;
|
|
|
|
|
|
|
|
EmulatedConsole* GetEmulatedConsole();
|
|
|
|
const EmulatedConsole* GetEmulatedConsole() const;
|
|
|
|
|
|
|
|
EmulatedDevices* GetEmulatedDevices();
|
|
|
|
const EmulatedDevices* GetEmulatedDevices() const;
|
|
|
|
|
|
|
|
void SetSupportedStyleTag(NpadStyleTag style_tag);
|
|
|
|
NpadStyleTag GetSupportedStyleTag() const;
|
|
|
|
|
2021-10-20 15:53:14 -07:00
|
|
|
/// Counts the connected players from P1-P8
|
|
|
|
s8 GetPlayerCount() const;
|
|
|
|
|
|
|
|
/// Returns the first connected npad id
|
|
|
|
NpadIdType GetFirstNpadId() const;
|
|
|
|
|
2021-12-05 14:17:52 -08:00
|
|
|
/// Returns the first disconnected npad id
|
|
|
|
NpadIdType GetFirstDisconnectedNpadId() const;
|
|
|
|
|
2021-11-29 14:59:58 -08:00
|
|
|
/// Sets all emulated controllers into configuring mode.
|
|
|
|
void EnableAllControllerConfiguration();
|
|
|
|
|
|
|
|
/// Sets all emulated controllers into normal mode.
|
|
|
|
void DisableAllControllerConfiguration();
|
|
|
|
|
2021-10-20 15:53:14 -07:00
|
|
|
/// Reloads all input devices from settings
|
2021-09-20 17:43:16 -07:00
|
|
|
void ReloadInputDevices();
|
|
|
|
|
2021-10-20 15:53:14 -07:00
|
|
|
/// Removes all callbacks from input common
|
2021-09-20 17:43:16 -07:00
|
|
|
void UnloadInputDevices();
|
|
|
|
|
2021-10-21 11:56:52 -07:00
|
|
|
/// Number of emulated controllers
|
2021-11-19 08:56:52 -08:00
|
|
|
static constexpr std::size_t available_controllers{10};
|
2021-10-21 11:56:52 -07:00
|
|
|
|
2021-09-20 17:43:16 -07:00
|
|
|
private:
|
|
|
|
std::unique_ptr<EmulatedController> player_1;
|
|
|
|
std::unique_ptr<EmulatedController> player_2;
|
|
|
|
std::unique_ptr<EmulatedController> player_3;
|
|
|
|
std::unique_ptr<EmulatedController> player_4;
|
|
|
|
std::unique_ptr<EmulatedController> player_5;
|
|
|
|
std::unique_ptr<EmulatedController> player_6;
|
|
|
|
std::unique_ptr<EmulatedController> player_7;
|
|
|
|
std::unique_ptr<EmulatedController> player_8;
|
|
|
|
std::unique_ptr<EmulatedController> other;
|
|
|
|
std::unique_ptr<EmulatedController> handheld;
|
|
|
|
std::unique_ptr<EmulatedConsole> console;
|
|
|
|
std::unique_ptr<EmulatedDevices> devices;
|
2021-12-04 17:37:03 -08:00
|
|
|
NpadStyleTag supported_style_tag{NpadStyleSet::All};
|
2021-09-20 17:43:16 -07:00
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace Core::HID
|