frontend: Add frontend responder for controller applet

This commit is contained in:
Zach Hilman
2018-12-24 17:34:14 -05:00
parent 9d6059ba9f
commit c67bab2512
3 changed files with 89 additions and 0 deletions

View File

@@ -84,6 +84,8 @@ add_library(core STATIC
file_sys/vfs_vector.h
file_sys/xts_archive.cpp
file_sys/xts_archive.h
frontend/applets/controller.cpp
frontend/applets/controller.h
frontend/applets/profile_select.cpp
frontend/applets/profile_select.h
frontend/applets/software_keyboard.cpp
@@ -169,6 +171,8 @@ add_library(core STATIC
hle/service/am/applet_oe.h
hle/service/am/applets/applets.cpp
hle/service/am/applets/applets.h
hle/service/am/applets/controller.cpp
hle/service/am/applets/controller.h
hle/service/am/applets/profile_select.cpp
hle/service/am/applets/profile_select.h
hle/service/am/applets/software_keyboard.cpp

View File

@@ -0,0 +1,38 @@
// Copyright 2018 yuzu emulator team
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#include "core/core.h"
#include "core/frontend/applets/controller.h"
#include "core/hle/service/hid/controllers/npad.h"
#include "core/hle/service/hid/hid.h"
#include "core/hle/service/sm/sm.h"
namespace Core::Frontend {
ControllerApplet::~ControllerApplet() = default;
DefaultControllerApplet::~DefaultControllerApplet() = default;
void DefaultControllerApplet::ReconfigureControllers(std::function<void(bool)> completed,
ControllerParameters parameters) const {
LOG_WARNING(Service_HID, "(STUBBED) called, automatically setting controller types to best fit "
"in configuration, may be incorrect!");
const auto& npad =
Core::System::GetInstance()
.ServiceManager()
.GetService<Service::HID::Hid>("hid")
->GetAppletResource()
->GetController<Service::HID::Controller_NPad>(Service::HID::HidController::NPad);
for (auto& player : Settings::values.players) {
const auto prio = Service::HID::Controller_NPad::MapSettingsTypeToNPad(player.type);
player.type =
Service::HID::Controller_NPad::MapNPadTypeToSettings(npad.DecideBestController(prio));
}
completed(true);
}
} // namespace Core::Frontend

View File

@@ -0,0 +1,47 @@
// Copyright 2018 yuzu emulator team
// Licensed under GPLv2 or any later version
// Refer to the license.txt file included.
#pragma once
#include <functional>
#include <optional>
#include <string>
#include "common/bit_field.h"
#include "common/common_types.h"
namespace Core::Frontend {
struct ControllerParameters {
u8 min_players;
u8 max_players;
bool keep_current_connected;
bool merge_dual_joycons;
bool allowed_single_layout;
bool allowed_pro_controller;
bool allowed_handheld;
bool allowed_joycon_dual;
bool allowed_joycon_left;
bool allowed_joycon_right;
bool horizontal_single_joycons;
};
class ControllerApplet {
public:
virtual ~ControllerApplet();
virtual void ReconfigureControllers(std::function<void(bool)> completed,
ControllerParameters parameters) const = 0;
};
class DefaultControllerApplet final : public ControllerApplet {
public:
~DefaultControllerApplet() override;
void ReconfigureControllers(std::function<void(bool)> completed,
ControllerParameters parameters) const override;
};
} // namespace Core::Frontend