|
|
@@ -2,6 +2,11 @@
|
|
|
// Licensed under GPLv2 or any later version
|
|
|
// 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"
|
|
|
|
|
|
namespace Service::HID {
|
|
|
@@ -9,28 +14,145 @@ namespace Service::HID {
|
|
|
IRS::IRS() : ServiceFramework{"irs"} {
|
|
|
// clang-format off
|
|
|
static const FunctionInfo functions[] = {
|
|
|
- {302, nullptr, "ActivateIrsensor"},
|
|
|
- {303, nullptr, "DeactivateIrsensor"},
|
|
|
- {304, nullptr, "GetIrsensorSharedMemoryHandle"},
|
|
|
- {305, nullptr, "StopImageProcessor"},
|
|
|
- {306, nullptr, "RunMomentProcessor"},
|
|
|
- {307, nullptr, "RunClusteringProcessor"},
|
|
|
- {308, nullptr, "RunImageTransferProcessor"},
|
|
|
- {309, nullptr, "GetImageTransferProcessorState"},
|
|
|
- {310, nullptr, "RunTeraPluginProcessor"},
|
|
|
- {311, nullptr, "GetNpadIrCameraHandle"},
|
|
|
- {312, nullptr, "RunPointingProcessor"},
|
|
|
- {313, nullptr, "SuspendImageProcessor"},
|
|
|
- {314, nullptr, "CheckFirmwareVersion"},
|
|
|
- {315, nullptr, "SetFunctionLevel"},
|
|
|
- {316, nullptr, "RunImageTransferExProcessor"},
|
|
|
- {317, nullptr, "RunIrLedProcessor"},
|
|
|
- {318, nullptr, "StopImageProcessorAsync"},
|
|
|
- {319, nullptr, "ActivateIrsensorWithFunctionLevel"},
|
|
|
+ {302, &IRS::ActivateIrsensor, "ActivateIrsensor"},
|
|
|
+ {303, &IRS::DeactivateIrsensor, "DeactivateIrsensor"},
|
|
|
+ {304, &IRS::GetIrsensorSharedMemoryHandle, "GetIrsensorSharedMemoryHandle"},
|
|
|
+ {305, &IRS::StopImageProcessor, "StopImageProcessor"},
|
|
|
+ {306, &IRS::RunMomentProcessor, "RunMomentProcessor"},
|
|
|
+ {307, &IRS::RunClusteringProcessor, "RunClusteringProcessor"},
|
|
|
+ {308, &IRS::RunImageTransferProcessor, "RunImageTransferProcessor"},
|
|
|
+ {309, &IRS::GetImageTransferProcessorState, "GetImageTransferProcessorState"},
|
|
|
+ {310, &IRS::RunTeraPluginProcessor, "RunTeraPluginProcessor"},
|
|
|
+ {311, &IRS::GetNpadIrCameraHandle, "GetNpadIrCameraHandle"},
|
|
|
+ {312, &IRS::RunPointingProcessor, "RunPointingProcessor"},
|
|
|
+ {313, &IRS::SuspendImageProcessor, "SuspendImageProcessor"},
|
|
|
+ {314, &IRS::CheckFirmwareVersion, "CheckFirmwareVersion"},
|
|
|
+ {315, &IRS::SetFunctionLevel, "SetFunctionLevel"},
|
|
|
+ {316, &IRS::RunImageTransferExProcessor, "RunImageTransferExProcessor"},
|
|
|
+ {317, &IRS::RunIrLedProcessor, "RunIrLedProcessor"},
|
|
|
+ {318, &IRS::StopImageProcessorAsync, "StopImageProcessorAsync"},
|
|
|
+ {319, &IRS::ActivateIrsensorWithFunctionLevel, "ActivateIrsensorWithFunctionLevel"},
|
|
|
};
|
|
|
// clang-format on
|
|
|
|
|
|
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;
|