2
1
Fork 0
mirror of https://github.com/yuzu-emu/yuzu.git synced 2024-07-04 23:31:19 +01:00

Stubbed IRS (#1349)

* Stubbed IRS

Currently we have no ideal way of implementing IRS. For the time being we should have the functions stubbed until we come up with a way to emulate IRS properly.

* Added IRS to logging backend

* Forward declared shared memory for irs
This commit is contained in:
David 2018-09-24 12:33:29 +10:00 committed by bunnei
parent f2c1fd08f9
commit 2513e086ab
4 changed files with 169 additions and 18 deletions

View file

@ -183,6 +183,7 @@ void FileBackend::Write(const Entry& entry) {
SUB(Service, FS) \ SUB(Service, FS) \
SUB(Service, GRC) \ SUB(Service, GRC) \
SUB(Service, HID) \ SUB(Service, HID) \
SUB(Service, IRS) \
SUB(Service, LBL) \ SUB(Service, LBL) \
SUB(Service, LDN) \ SUB(Service, LDN) \
SUB(Service, LDR) \ SUB(Service, LDR) \

View file

@ -70,6 +70,7 @@ enum class Class : ClassType {
Service_FS, ///< The FS (Filesystem) service Service_FS, ///< The FS (Filesystem) service
Service_GRC, ///< The game recording service Service_GRC, ///< The game recording service
Service_HID, ///< The HID (Human interface device) service Service_HID, ///< The HID (Human interface device) service
Service_IRS, ///< The IRS service
Service_LBL, ///< The LBL (LCD backlight) service Service_LBL, ///< The LBL (LCD backlight) service
Service_LDN, ///< The LDN (Local domain network) service Service_LDN, ///< The LDN (Local domain network) service
Service_LDR, ///< The loader service Service_LDR, ///< The loader service

View file

@ -2,6 +2,11 @@
// Licensed under GPLv2 or any later version // Licensed under GPLv2 or any later version
// Refer to the license.txt file included. // Refer to the license.txt file included.
#include "common/swap.h"
#include "core/core.h"
#include "core/core_timing.h"
#include "core/hle/ipc_helpers.h"
#include "core/hle/kernel/shared_memory.h"
#include "core/hle/service/hid/irs.h" #include "core/hle/service/hid/irs.h"
namespace Service::HID { namespace Service::HID {
@ -9,28 +14,145 @@ namespace Service::HID {
IRS::IRS() : ServiceFramework{"irs"} { IRS::IRS() : ServiceFramework{"irs"} {
// clang-format off // clang-format off
static const FunctionInfo functions[] = { static const FunctionInfo functions[] = {
{302, nullptr, "ActivateIrsensor"}, {302, &IRS::ActivateIrsensor, "ActivateIrsensor"},
{303, nullptr, "DeactivateIrsensor"}, {303, &IRS::DeactivateIrsensor, "DeactivateIrsensor"},
{304, nullptr, "GetIrsensorSharedMemoryHandle"}, {304, &IRS::GetIrsensorSharedMemoryHandle, "GetIrsensorSharedMemoryHandle"},
{305, nullptr, "StopImageProcessor"}, {305, &IRS::StopImageProcessor, "StopImageProcessor"},
{306, nullptr, "RunMomentProcessor"}, {306, &IRS::RunMomentProcessor, "RunMomentProcessor"},
{307, nullptr, "RunClusteringProcessor"}, {307, &IRS::RunClusteringProcessor, "RunClusteringProcessor"},
{308, nullptr, "RunImageTransferProcessor"}, {308, &IRS::RunImageTransferProcessor, "RunImageTransferProcessor"},
{309, nullptr, "GetImageTransferProcessorState"}, {309, &IRS::GetImageTransferProcessorState, "GetImageTransferProcessorState"},
{310, nullptr, "RunTeraPluginProcessor"}, {310, &IRS::RunTeraPluginProcessor, "RunTeraPluginProcessor"},
{311, nullptr, "GetNpadIrCameraHandle"}, {311, &IRS::GetNpadIrCameraHandle, "GetNpadIrCameraHandle"},
{312, nullptr, "RunPointingProcessor"}, {312, &IRS::RunPointingProcessor, "RunPointingProcessor"},
{313, nullptr, "SuspendImageProcessor"}, {313, &IRS::SuspendImageProcessor, "SuspendImageProcessor"},
{314, nullptr, "CheckFirmwareVersion"}, {314, &IRS::CheckFirmwareVersion, "CheckFirmwareVersion"},
{315, nullptr, "SetFunctionLevel"}, {315, &IRS::SetFunctionLevel, "SetFunctionLevel"},
{316, nullptr, "RunImageTransferExProcessor"}, {316, &IRS::RunImageTransferExProcessor, "RunImageTransferExProcessor"},
{317, nullptr, "RunIrLedProcessor"}, {317, &IRS::RunIrLedProcessor, "RunIrLedProcessor"},
{318, nullptr, "StopImageProcessorAsync"}, {318, &IRS::StopImageProcessorAsync, "StopImageProcessorAsync"},
{319, nullptr, "ActivateIrsensorWithFunctionLevel"}, {319, &IRS::ActivateIrsensorWithFunctionLevel, "ActivateIrsensorWithFunctionLevel"},
}; };
// clang-format on // clang-format on
RegisterHandlers(functions); RegisterHandlers(functions);
auto& kernel = Core::System::GetInstance().Kernel();
shared_mem = Kernel::SharedMemory::Create(
kernel, nullptr, 0x8000, Kernel::MemoryPermission::ReadWrite,
Kernel::MemoryPermission::Read, 0, Kernel::MemoryRegion::BASE, "IRS:SharedMemory");
}
void IRS::ActivateIrsensor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::DeactivateIrsensor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::GetIrsensorSharedMemoryHandle(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2, 1};
rb.Push(RESULT_SUCCESS);
rb.PushCopyObjects(shared_mem);
LOG_DEBUG(Service_IRS, "called");
}
void IRS::StopImageProcessor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::RunMomentProcessor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::RunClusteringProcessor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::RunImageTransferProcessor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::GetImageTransferProcessorState(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 5};
rb.Push(RESULT_SUCCESS);
rb.PushRaw<u64>(CoreTiming::GetTicks());
rb.PushRaw<u32>(0);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::RunTeraPluginProcessor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::GetNpadIrCameraHandle(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 3};
rb.Push(RESULT_SUCCESS);
rb.PushRaw<u32>(device_handle);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::RunPointingProcessor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::SuspendImageProcessor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::CheckFirmwareVersion(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::SetFunctionLevel(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::RunImageTransferExProcessor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::RunIrLedProcessor(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::StopImageProcessorAsync(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
}
void IRS::ActivateIrsensorWithFunctionLevel(Kernel::HLERequestContext& ctx) {
IPC::ResponseBuilder rb{ctx, 2};
rb.Push(RESULT_SUCCESS);
LOG_WARNING(Service_IRS, "(STUBBED) called");
} }
IRS::~IRS() = default; IRS::~IRS() = default;

View file

@ -4,14 +4,41 @@
#pragma once #pragma once
#include "core/hle/kernel/object.h"
#include "core/hle/service/service.h" #include "core/hle/service/service.h"
namespace Kernel {
class SharedMemory;
}
namespace Service::HID { namespace Service::HID {
class IRS final : public ServiceFramework<IRS> { class IRS final : public ServiceFramework<IRS> {
public: public:
explicit IRS(); explicit IRS();
~IRS() override; ~IRS() override;
private:
void ActivateIrsensor(Kernel::HLERequestContext& ctx);
void DeactivateIrsensor(Kernel::HLERequestContext& ctx);
void GetIrsensorSharedMemoryHandle(Kernel::HLERequestContext& ctx);
void StopImageProcessor(Kernel::HLERequestContext& ctx);
void RunMomentProcessor(Kernel::HLERequestContext& ctx);
void RunClusteringProcessor(Kernel::HLERequestContext& ctx);
void RunImageTransferProcessor(Kernel::HLERequestContext& ctx);
void GetImageTransferProcessorState(Kernel::HLERequestContext& ctx);
void RunTeraPluginProcessor(Kernel::HLERequestContext& ctx);
void GetNpadIrCameraHandle(Kernel::HLERequestContext& ctx);
void RunPointingProcessor(Kernel::HLERequestContext& ctx);
void SuspendImageProcessor(Kernel::HLERequestContext& ctx);
void CheckFirmwareVersion(Kernel::HLERequestContext& ctx);
void SetFunctionLevel(Kernel::HLERequestContext& ctx);
void RunImageTransferExProcessor(Kernel::HLERequestContext& ctx);
void RunIrLedProcessor(Kernel::HLERequestContext& ctx);
void StopImageProcessorAsync(Kernel::HLERequestContext& ctx);
void ActivateIrsensorWithFunctionLevel(Kernel::HLERequestContext& ctx);
Kernel::SharedPtr<Kernel::SharedMemory> shared_mem;
const u32 device_handle{0xABCD};
}; };
class IRS_SYS final : public ServiceFramework<IRS_SYS> { class IRS_SYS final : public ServiceFramework<IRS_SYS> {