mirror of https://git.suyu.dev/suyu/suyu
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:
parent
f2c1fd08f9
commit
2513e086ab
|
@ -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) \
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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> {
|
||||||
|
|
Loading…
Reference in New Issue