diff options
Diffstat (limited to '')
21 files changed, 95 insertions, 75 deletions
diff --git a/src/core/hle/service/am/am.cpp b/src/core/hle/service/am/am.cpp index 26af499d2..9a7316e27 100644 --- a/src/core/hle/service/am/am.cpp +++ b/src/core/hle/service/am/am.cpp | |||
| @@ -1264,9 +1264,8 @@ void ILibraryAppletCreator::CreateTransferMemoryStorage(Kernel::HLERequestContex | |||
| 1264 | return; | 1264 | return; |
| 1265 | } | 1265 | } |
| 1266 | 1266 | ||
| 1267 | const u8* const mem_begin = system.Memory().GetPointer(transfer_mem->GetSourceAddress()); | 1267 | std::vector<u8> memory(transfer_mem->GetSize()); |
| 1268 | const u8* const mem_end = mem_begin + transfer_mem->GetSize(); | 1268 | system.Memory().ReadBlock(transfer_mem->GetSourceAddress(), memory.data(), memory.size()); |
| 1269 | std::vector<u8> memory{mem_begin, mem_end}; | ||
| 1270 | 1269 | ||
| 1271 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 1270 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 1272 | rb.Push(ResultSuccess); | 1271 | rb.Push(ResultSuccess); |
| @@ -1298,9 +1297,8 @@ void ILibraryAppletCreator::CreateHandleStorage(Kernel::HLERequestContext& ctx) | |||
| 1298 | return; | 1297 | return; |
| 1299 | } | 1298 | } |
| 1300 | 1299 | ||
| 1301 | const u8* const mem_begin = system.Memory().GetPointer(transfer_mem->GetSourceAddress()); | 1300 | std::vector<u8> memory(transfer_mem->GetSize()); |
| 1302 | const u8* const mem_end = mem_begin + transfer_mem->GetSize(); | 1301 | system.Memory().ReadBlock(transfer_mem->GetSourceAddress(), memory.data(), memory.size()); |
| 1303 | std::vector<u8> memory{mem_begin, mem_end}; | ||
| 1304 | 1302 | ||
| 1305 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; | 1303 | IPC::ResponseBuilder rb{ctx, 2, 0, 1}; |
| 1306 | rb.Push(ResultSuccess); | 1304 | rb.Push(ResultSuccess); |
diff --git a/src/core/hle/service/hid/controllers/console_sixaxis.cpp b/src/core/hle/service/hid/controllers/console_sixaxis.cpp index bb3cba910..478d38590 100644 --- a/src/core/hle/service/hid/controllers/console_sixaxis.cpp +++ b/src/core/hle/service/hid/controllers/console_sixaxis.cpp | |||
| @@ -1,17 +1,18 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project | 1 | // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project |
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | 3 | ||
| 4 | #include "core/core.h" | ||
| 4 | #include "core/core_timing.h" | 5 | #include "core/core_timing.h" |
| 5 | #include "core/hid/emulated_console.h" | 6 | #include "core/hid/emulated_console.h" |
| 6 | #include "core/hid/hid_core.h" | 7 | #include "core/hid/hid_core.h" |
| 7 | #include "core/hle/service/hid/controllers/console_sixaxis.h" | 8 | #include "core/hle/service/hid/controllers/console_sixaxis.h" |
| 9 | #include "core/memory.h" | ||
| 8 | 10 | ||
| 9 | namespace Service::HID { | 11 | namespace Service::HID { |
| 10 | constexpr std::size_t SHARED_MEMORY_OFFSET = 0x3C200; | 12 | constexpr std::size_t SHARED_MEMORY_OFFSET = 0x3C200; |
| 11 | 13 | ||
| 12 | Controller_ConsoleSixAxis::Controller_ConsoleSixAxis(Core::HID::HIDCore& hid_core_, | 14 | Controller_ConsoleSixAxis::Controller_ConsoleSixAxis(Core::System& system_, u8* raw_shared_memory_) |
| 13 | u8* raw_shared_memory_) | 15 | : ControllerBase{system_.HIDCore()}, system{system_} { |
| 14 | : ControllerBase{hid_core_} { | ||
| 15 | console = hid_core.GetEmulatedConsole(); | 16 | console = hid_core.GetEmulatedConsole(); |
| 16 | static_assert(SHARED_MEMORY_OFFSET + sizeof(ConsoleSharedMemory) < shared_memory_size, | 17 | static_assert(SHARED_MEMORY_OFFSET + sizeof(ConsoleSharedMemory) < shared_memory_size, |
| 17 | "ConsoleSharedMemory is bigger than the shared memory"); | 18 | "ConsoleSharedMemory is bigger than the shared memory"); |
| @@ -26,7 +27,7 @@ void Controller_ConsoleSixAxis::OnInit() {} | |||
| 26 | void Controller_ConsoleSixAxis::OnRelease() {} | 27 | void Controller_ConsoleSixAxis::OnRelease() {} |
| 27 | 28 | ||
| 28 | void Controller_ConsoleSixAxis::OnUpdate(const Core::Timing::CoreTiming& core_timing) { | 29 | void Controller_ConsoleSixAxis::OnUpdate(const Core::Timing::CoreTiming& core_timing) { |
| 29 | if (!IsControllerActivated() || !is_transfer_memory_set) { | 30 | if (!IsControllerActivated() || transfer_memory == 0) { |
| 30 | seven_sixaxis_lifo.buffer_count = 0; | 31 | seven_sixaxis_lifo.buffer_count = 0; |
| 31 | seven_sixaxis_lifo.buffer_tail = 0; | 32 | seven_sixaxis_lifo.buffer_tail = 0; |
| 32 | return; | 33 | return; |
| @@ -59,11 +60,10 @@ void Controller_ConsoleSixAxis::OnUpdate(const Core::Timing::CoreTiming& core_ti | |||
| 59 | 60 | ||
| 60 | // Update seven six axis transfer memory | 61 | // Update seven six axis transfer memory |
| 61 | seven_sixaxis_lifo.WriteNextEntry(next_seven_sixaxis_state); | 62 | seven_sixaxis_lifo.WriteNextEntry(next_seven_sixaxis_state); |
| 62 | std::memcpy(transfer_memory, &seven_sixaxis_lifo, sizeof(seven_sixaxis_lifo)); | 63 | system.Memory().WriteBlock(transfer_memory, &seven_sixaxis_lifo, sizeof(seven_sixaxis_lifo)); |
| 63 | } | 64 | } |
| 64 | 65 | ||
| 65 | void Controller_ConsoleSixAxis::SetTransferMemoryPointer(u8* t_mem) { | 66 | void Controller_ConsoleSixAxis::SetTransferMemoryAddress(VAddr t_mem) { |
| 66 | is_transfer_memory_set = true; | ||
| 67 | transfer_memory = t_mem; | 67 | transfer_memory = t_mem; |
| 68 | } | 68 | } |
| 69 | 69 | ||
diff --git a/src/core/hle/service/hid/controllers/console_sixaxis.h b/src/core/hle/service/hid/controllers/console_sixaxis.h index 2fd11538f..8d3e4081b 100644 --- a/src/core/hle/service/hid/controllers/console_sixaxis.h +++ b/src/core/hle/service/hid/controllers/console_sixaxis.h | |||
| @@ -10,6 +10,10 @@ | |||
| 10 | #include "core/hle/service/hid/controllers/controller_base.h" | 10 | #include "core/hle/service/hid/controllers/controller_base.h" |
| 11 | #include "core/hle/service/hid/ring_lifo.h" | 11 | #include "core/hle/service/hid/ring_lifo.h" |
| 12 | 12 | ||
| 13 | namespace Core { | ||
| 14 | class System; | ||
| 15 | } // namespace Core | ||
| 16 | |||
| 13 | namespace Core::HID { | 17 | namespace Core::HID { |
| 14 | class EmulatedConsole; | 18 | class EmulatedConsole; |
| 15 | } // namespace Core::HID | 19 | } // namespace Core::HID |
| @@ -17,7 +21,7 @@ class EmulatedConsole; | |||
| 17 | namespace Service::HID { | 21 | namespace Service::HID { |
| 18 | class Controller_ConsoleSixAxis final : public ControllerBase { | 22 | class Controller_ConsoleSixAxis final : public ControllerBase { |
| 19 | public: | 23 | public: |
| 20 | explicit Controller_ConsoleSixAxis(Core::HID::HIDCore& hid_core_, u8* raw_shared_memory_); | 24 | explicit Controller_ConsoleSixAxis(Core::System& system_, u8* raw_shared_memory_); |
| 21 | ~Controller_ConsoleSixAxis() override; | 25 | ~Controller_ConsoleSixAxis() override; |
| 22 | 26 | ||
| 23 | // Called when the controller is initialized | 27 | // Called when the controller is initialized |
| @@ -30,7 +34,7 @@ public: | |||
| 30 | void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; | 34 | void OnUpdate(const Core::Timing::CoreTiming& core_timing) override; |
| 31 | 35 | ||
| 32 | // Called on InitializeSevenSixAxisSensor | 36 | // Called on InitializeSevenSixAxisSensor |
| 33 | void SetTransferMemoryPointer(u8* t_mem); | 37 | void SetTransferMemoryAddress(VAddr t_mem); |
| 34 | 38 | ||
| 35 | // Called on ResetSevenSixAxisSensorTimestamp | 39 | // Called on ResetSevenSixAxisSensorTimestamp |
| 36 | void ResetTimestamp(); | 40 | void ResetTimestamp(); |
| @@ -62,12 +66,13 @@ private: | |||
| 62 | static_assert(sizeof(seven_sixaxis_lifo) == 0xA70, "SevenSixAxisState is an invalid size"); | 66 | static_assert(sizeof(seven_sixaxis_lifo) == 0xA70, "SevenSixAxisState is an invalid size"); |
| 63 | 67 | ||
| 64 | SevenSixAxisState next_seven_sixaxis_state{}; | 68 | SevenSixAxisState next_seven_sixaxis_state{}; |
| 65 | u8* transfer_memory = nullptr; | 69 | VAddr transfer_memory{}; |
| 66 | ConsoleSharedMemory* shared_memory = nullptr; | 70 | ConsoleSharedMemory* shared_memory = nullptr; |
| 67 | Core::HID::EmulatedConsole* console = nullptr; | 71 | Core::HID::EmulatedConsole* console = nullptr; |
| 68 | 72 | ||
| 69 | bool is_transfer_memory_set = false; | ||
| 70 | u64 last_saved_timestamp{}; | 73 | u64 last_saved_timestamp{}; |
| 71 | u64 last_global_timestamp{}; | 74 | u64 last_global_timestamp{}; |
| 75 | |||
| 76 | Core::System& system; | ||
| 72 | }; | 77 | }; |
| 73 | } // namespace Service::HID | 78 | } // namespace Service::HID |
diff --git a/src/core/hle/service/hid/controllers/palma.cpp b/src/core/hle/service/hid/controllers/palma.cpp index 4564ea1e2..bce51285c 100644 --- a/src/core/hle/service/hid/controllers/palma.cpp +++ b/src/core/hle/service/hid/controllers/palma.cpp | |||
| @@ -152,7 +152,7 @@ Result Controller_Palma::WritePalmaRgbLedPatternEntry(const PalmaConnectionHandl | |||
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | Result Controller_Palma::WritePalmaWaveEntry(const PalmaConnectionHandle& handle, PalmaWaveSet wave, | 154 | Result Controller_Palma::WritePalmaWaveEntry(const PalmaConnectionHandle& handle, PalmaWaveSet wave, |
| 155 | u8* t_mem, u64 size) { | 155 | VAddr t_mem, u64 size) { |
| 156 | if (handle.npad_id != active_handle.npad_id) { | 156 | if (handle.npad_id != active_handle.npad_id) { |
| 157 | return InvalidPalmaHandle; | 157 | return InvalidPalmaHandle; |
| 158 | } | 158 | } |
diff --git a/src/core/hle/service/hid/controllers/palma.h b/src/core/hle/service/hid/controllers/palma.h index 1d7fc94e1..cf62f0dbc 100644 --- a/src/core/hle/service/hid/controllers/palma.h +++ b/src/core/hle/service/hid/controllers/palma.h | |||
| @@ -125,7 +125,7 @@ public: | |||
| 125 | Result ReadPalmaUniqueCode(const PalmaConnectionHandle& handle); | 125 | Result ReadPalmaUniqueCode(const PalmaConnectionHandle& handle); |
| 126 | Result SetPalmaUniqueCodeInvalid(const PalmaConnectionHandle& handle); | 126 | Result SetPalmaUniqueCodeInvalid(const PalmaConnectionHandle& handle); |
| 127 | Result WritePalmaRgbLedPatternEntry(const PalmaConnectionHandle& handle, u64 unknown); | 127 | Result WritePalmaRgbLedPatternEntry(const PalmaConnectionHandle& handle, u64 unknown); |
| 128 | Result WritePalmaWaveEntry(const PalmaConnectionHandle& handle, PalmaWaveSet wave, u8* t_mem, | 128 | Result WritePalmaWaveEntry(const PalmaConnectionHandle& handle, PalmaWaveSet wave, VAddr t_mem, |
| 129 | u64 size); | 129 | u64 size); |
| 130 | Result SetPalmaDataBaseIdentificationVersion(const PalmaConnectionHandle& handle, | 130 | Result SetPalmaDataBaseIdentificationVersion(const PalmaConnectionHandle& handle, |
| 131 | s32 database_id_version_); | 131 | s32 database_id_version_); |
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 8c99cec06..0da67235f 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp | |||
| @@ -1861,7 +1861,7 @@ void Hid::InitializeSevenSixAxisSensor(Kernel::HLERequestContext& ctx) { | |||
| 1861 | .ActivateController(); | 1861 | .ActivateController(); |
| 1862 | 1862 | ||
| 1863 | applet_resource->GetController<Controller_ConsoleSixAxis>(HidController::ConsoleSixAxisSensor) | 1863 | applet_resource->GetController<Controller_ConsoleSixAxis>(HidController::ConsoleSixAxisSensor) |
| 1864 | .SetTransferMemoryPointer(system.Memory().GetPointer(t_mem_1->GetSourceAddress())); | 1864 | .SetTransferMemoryAddress(t_mem_1->GetSourceAddress()); |
| 1865 | 1865 | ||
| 1866 | LOG_WARNING(Service_HID, | 1866 | LOG_WARNING(Service_HID, |
| 1867 | "called, t_mem_1_handle=0x{:08X}, t_mem_2_handle=0x{:08X}, " | 1867 | "called, t_mem_1_handle=0x{:08X}, t_mem_2_handle=0x{:08X}, " |
| @@ -2148,8 +2148,7 @@ void Hid::WritePalmaWaveEntry(Kernel::HLERequestContext& ctx) { | |||
| 2148 | connection_handle.npad_id, wave_set, unknown, t_mem_handle, t_mem_size, size); | 2148 | connection_handle.npad_id, wave_set, unknown, t_mem_handle, t_mem_size, size); |
| 2149 | 2149 | ||
| 2150 | applet_resource->GetController<Controller_Palma>(HidController::Palma) | 2150 | applet_resource->GetController<Controller_Palma>(HidController::Palma) |
| 2151 | .WritePalmaWaveEntry(connection_handle, wave_set, | 2151 | .WritePalmaWaveEntry(connection_handle, wave_set, t_mem->GetSourceAddress(), t_mem_size); |
| 2152 | system.Memory().GetPointer(t_mem->GetSourceAddress()), t_mem_size); | ||
| 2153 | 2152 | ||
| 2154 | IPC::ResponseBuilder rb{ctx, 2}; | 2153 | IPC::ResponseBuilder rb{ctx, 2}; |
| 2155 | rb.Push(ResultSuccess); | 2154 | rb.Push(ResultSuccess); |
diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index 8fc9ed88a..9ace83129 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h | |||
| @@ -61,9 +61,15 @@ public: | |||
| 61 | private: | 61 | private: |
| 62 | template <typename T> | 62 | template <typename T> |
| 63 | void MakeController(HidController controller, u8* shared_memory) { | 63 | void MakeController(HidController controller, u8* shared_memory) { |
| 64 | controllers[static_cast<std::size_t>(controller)] = | 64 | if constexpr (std::is_constructible_v<T, Core::System&, u8*>) { |
| 65 | std::make_unique<T>(system.HIDCore(), shared_memory); | 65 | controllers[static_cast<std::size_t>(controller)] = |
| 66 | std::make_unique<T>(system, shared_memory); | ||
| 67 | } else { | ||
| 68 | controllers[static_cast<std::size_t>(controller)] = | ||
| 69 | std::make_unique<T>(system.HIDCore(), shared_memory); | ||
| 70 | } | ||
| 66 | } | 71 | } |
| 72 | |||
| 67 | template <typename T> | 73 | template <typename T> |
| 68 | void MakeControllerWithServiceContext(HidController controller, u8* shared_memory) { | 74 | void MakeControllerWithServiceContext(HidController controller, u8* shared_memory) { |
| 69 | controllers[static_cast<std::size_t>(controller)] = | 75 | controllers[static_cast<std::size_t>(controller)] = |
diff --git a/src/core/hle/service/hid/hidbus.cpp b/src/core/hle/service/hid/hidbus.cpp index 8dbb2cf50..07199d5d5 100644 --- a/src/core/hle/service/hid/hidbus.cpp +++ b/src/core/hle/service/hid/hidbus.cpp | |||
| @@ -472,7 +472,7 @@ void HidBus::EnableJoyPollingReceiveMode(Kernel::HLERequestContext& ctx) { | |||
| 472 | if (device_index) { | 472 | if (device_index) { |
| 473 | auto& device = devices[device_index.value()].device; | 473 | auto& device = devices[device_index.value()].device; |
| 474 | device->SetPollingMode(polling_mode_); | 474 | device->SetPollingMode(polling_mode_); |
| 475 | device->SetTransferMemoryPointer(system.Memory().GetPointer(t_mem->GetSourceAddress())); | 475 | device->SetTransferMemoryAddress(t_mem->GetSourceAddress()); |
| 476 | 476 | ||
| 477 | IPC::ResponseBuilder rb{ctx, 2}; | 477 | IPC::ResponseBuilder rb{ctx, 2}; |
| 478 | rb.Push(ResultSuccess); | 478 | rb.Push(ResultSuccess); |
diff --git a/src/core/hle/service/hid/hidbus.h b/src/core/hle/service/hid/hidbus.h index 91c99b01f..85ed96e2e 100644 --- a/src/core/hle/service/hid/hidbus.h +++ b/src/core/hle/service/hid/hidbus.h | |||
| @@ -115,8 +115,7 @@ private: | |||
| 115 | void MakeDevice(BusHandle handle) { | 115 | void MakeDevice(BusHandle handle) { |
| 116 | const auto device_index = GetDeviceIndexFromHandle(handle); | 116 | const auto device_index = GetDeviceIndexFromHandle(handle); |
| 117 | if (device_index) { | 117 | if (device_index) { |
| 118 | devices[device_index.value()].device = | 118 | devices[device_index.value()].device = std::make_unique<T>(system, service_context); |
| 119 | std::make_unique<T>(system.HIDCore(), service_context); | ||
| 120 | } | 119 | } |
| 121 | } | 120 | } |
| 122 | 121 | ||
diff --git a/src/core/hle/service/hid/hidbus/hidbus_base.cpp b/src/core/hle/service/hid/hidbus/hidbus_base.cpp index b569b3c20..dfd23ec04 100644 --- a/src/core/hle/service/hid/hidbus/hidbus_base.cpp +++ b/src/core/hle/service/hid/hidbus/hidbus_base.cpp | |||
| @@ -9,8 +9,8 @@ | |||
| 9 | 9 | ||
| 10 | namespace Service::HID { | 10 | namespace Service::HID { |
| 11 | 11 | ||
| 12 | HidbusBase::HidbusBase(KernelHelpers::ServiceContext& service_context_) | 12 | HidbusBase::HidbusBase(Core::System& system_, KernelHelpers::ServiceContext& service_context_) |
| 13 | : service_context(service_context_) { | 13 | : system(system_), service_context(service_context_) { |
| 14 | send_command_async_event = service_context.CreateEvent("hidbus:SendCommandAsyncEvent"); | 14 | send_command_async_event = service_context.CreateEvent("hidbus:SendCommandAsyncEvent"); |
| 15 | } | 15 | } |
| 16 | HidbusBase::~HidbusBase() = default; | 16 | HidbusBase::~HidbusBase() = default; |
| @@ -59,8 +59,7 @@ void HidbusBase::DisablePollingMode() { | |||
| 59 | polling_mode_enabled = false; | 59 | polling_mode_enabled = false; |
| 60 | } | 60 | } |
| 61 | 61 | ||
| 62 | void HidbusBase::SetTransferMemoryPointer(u8* t_mem) { | 62 | void HidbusBase::SetTransferMemoryAddress(VAddr t_mem) { |
| 63 | is_transfer_memory_set = true; | ||
| 64 | transfer_memory = t_mem; | 63 | transfer_memory = t_mem; |
| 65 | } | 64 | } |
| 66 | 65 | ||
diff --git a/src/core/hle/service/hid/hidbus/hidbus_base.h b/src/core/hle/service/hid/hidbus/hidbus_base.h index 65e301137..26313264d 100644 --- a/src/core/hle/service/hid/hidbus/hidbus_base.h +++ b/src/core/hle/service/hid/hidbus/hidbus_base.h | |||
| @@ -8,6 +8,10 @@ | |||
| 8 | #include "common/common_types.h" | 8 | #include "common/common_types.h" |
| 9 | #include "core/hle/result.h" | 9 | #include "core/hle/result.h" |
| 10 | 10 | ||
| 11 | namespace Core { | ||
| 12 | class System; | ||
| 13 | } | ||
| 14 | |||
| 11 | namespace Kernel { | 15 | namespace Kernel { |
| 12 | class KEvent; | 16 | class KEvent; |
| 13 | class KReadableEvent; | 17 | class KReadableEvent; |
| @@ -106,7 +110,7 @@ static_assert(sizeof(ButtonOnlyPollingDataAccessor) == 0x2F0, | |||
| 106 | 110 | ||
| 107 | class HidbusBase { | 111 | class HidbusBase { |
| 108 | public: | 112 | public: |
| 109 | explicit HidbusBase(KernelHelpers::ServiceContext& service_context_); | 113 | explicit HidbusBase(Core::System& system_, KernelHelpers::ServiceContext& service_context_); |
| 110 | virtual ~HidbusBase(); | 114 | virtual ~HidbusBase(); |
| 111 | 115 | ||
| 112 | void ActivateDevice(); | 116 | void ActivateDevice(); |
| @@ -134,7 +138,7 @@ public: | |||
| 134 | void DisablePollingMode(); | 138 | void DisablePollingMode(); |
| 135 | 139 | ||
| 136 | // Called on EnableJoyPollingReceiveMode | 140 | // Called on EnableJoyPollingReceiveMode |
| 137 | void SetTransferMemoryPointer(u8* t_mem); | 141 | void SetTransferMemoryAddress(VAddr t_mem); |
| 138 | 142 | ||
| 139 | Kernel::KReadableEvent& GetSendCommandAsycEvent() const; | 143 | Kernel::KReadableEvent& GetSendCommandAsycEvent() const; |
| 140 | 144 | ||
| @@ -170,9 +174,9 @@ protected: | |||
| 170 | JoyEnableSixAxisDataAccessor enable_sixaxis_data{}; | 174 | JoyEnableSixAxisDataAccessor enable_sixaxis_data{}; |
| 171 | ButtonOnlyPollingDataAccessor button_only_data{}; | 175 | ButtonOnlyPollingDataAccessor button_only_data{}; |
| 172 | 176 | ||
| 173 | u8* transfer_memory{nullptr}; | 177 | VAddr transfer_memory{}; |
| 174 | bool is_transfer_memory_set{}; | ||
| 175 | 178 | ||
| 179 | Core::System& system; | ||
| 176 | Kernel::KEvent* send_command_async_event; | 180 | Kernel::KEvent* send_command_async_event; |
| 177 | KernelHelpers::ServiceContext& service_context; | 181 | KernelHelpers::ServiceContext& service_context; |
| 178 | }; | 182 | }; |
diff --git a/src/core/hle/service/hid/hidbus/ringcon.cpp b/src/core/hle/service/hid/hidbus/ringcon.cpp index 35847cbdd..65a2dd521 100644 --- a/src/core/hle/service/hid/hidbus/ringcon.cpp +++ b/src/core/hle/service/hid/hidbus/ringcon.cpp | |||
| @@ -1,18 +1,20 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project | 1 | // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project |
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | 2 | // SPDX-License-Identifier: GPL-2.0-or-later |
| 3 | 3 | ||
| 4 | #include "core/core.h" | ||
| 4 | #include "core/hid/emulated_controller.h" | 5 | #include "core/hid/emulated_controller.h" |
| 5 | #include "core/hid/hid_core.h" | 6 | #include "core/hid/hid_core.h" |
| 6 | #include "core/hle/kernel/k_event.h" | 7 | #include "core/hle/kernel/k_event.h" |
| 7 | #include "core/hle/kernel/k_readable_event.h" | 8 | #include "core/hle/kernel/k_readable_event.h" |
| 8 | #include "core/hle/service/hid/hidbus/ringcon.h" | 9 | #include "core/hle/service/hid/hidbus/ringcon.h" |
| 10 | #include "core/memory.h" | ||
| 9 | 11 | ||
| 10 | namespace Service::HID { | 12 | namespace Service::HID { |
| 11 | 13 | ||
| 12 | RingController::RingController(Core::HID::HIDCore& hid_core_, | 14 | RingController::RingController(Core::System& system_, |
| 13 | KernelHelpers::ServiceContext& service_context_) | 15 | KernelHelpers::ServiceContext& service_context_) |
| 14 | : HidbusBase(service_context_) { | 16 | : HidbusBase(system_, service_context_) { |
| 15 | input = hid_core_.GetEmulatedController(Core::HID::NpadIdType::Player1); | 17 | input = system.HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1); |
| 16 | } | 18 | } |
| 17 | 19 | ||
| 18 | RingController::~RingController() = default; | 20 | RingController::~RingController() = default; |
| @@ -38,7 +40,7 @@ void RingController::OnUpdate() { | |||
| 38 | return; | 40 | return; |
| 39 | } | 41 | } |
| 40 | 42 | ||
| 41 | if (!polling_mode_enabled || !is_transfer_memory_set) { | 43 | if (!polling_mode_enabled || transfer_memory == 0) { |
| 42 | return; | 44 | return; |
| 43 | } | 45 | } |
| 44 | 46 | ||
| @@ -62,7 +64,8 @@ void RingController::OnUpdate() { | |||
| 62 | curr_entry.polling_data.out_size = sizeof(ringcon_value); | 64 | curr_entry.polling_data.out_size = sizeof(ringcon_value); |
| 63 | std::memcpy(curr_entry.polling_data.data.data(), &ringcon_value, sizeof(ringcon_value)); | 65 | std::memcpy(curr_entry.polling_data.data.data(), &ringcon_value, sizeof(ringcon_value)); |
| 64 | 66 | ||
| 65 | std::memcpy(transfer_memory, &enable_sixaxis_data, sizeof(enable_sixaxis_data)); | 67 | system.Memory().WriteBlock(transfer_memory, &enable_sixaxis_data, |
| 68 | sizeof(enable_sixaxis_data)); | ||
| 66 | break; | 69 | break; |
| 67 | } | 70 | } |
| 68 | default: | 71 | default: |
diff --git a/src/core/hle/service/hid/hidbus/ringcon.h b/src/core/hle/service/hid/hidbus/ringcon.h index c2fb386b1..f42f3ea41 100644 --- a/src/core/hle/service/hid/hidbus/ringcon.h +++ b/src/core/hle/service/hid/hidbus/ringcon.h | |||
| @@ -17,8 +17,7 @@ namespace Service::HID { | |||
| 17 | 17 | ||
| 18 | class RingController final : public HidbusBase { | 18 | class RingController final : public HidbusBase { |
| 19 | public: | 19 | public: |
| 20 | explicit RingController(Core::HID::HIDCore& hid_core_, | 20 | explicit RingController(Core::System& system_, KernelHelpers::ServiceContext& service_context_); |
| 21 | KernelHelpers::ServiceContext& service_context_); | ||
| 22 | ~RingController() override; | 21 | ~RingController() override; |
| 23 | 22 | ||
| 24 | void OnInit() override; | 23 | void OnInit() override; |
diff --git a/src/core/hle/service/hid/hidbus/starlink.cpp b/src/core/hle/service/hid/hidbus/starlink.cpp index d0e760314..36573274e 100644 --- a/src/core/hle/service/hid/hidbus/starlink.cpp +++ b/src/core/hle/service/hid/hidbus/starlink.cpp | |||
| @@ -8,8 +8,8 @@ | |||
| 8 | namespace Service::HID { | 8 | namespace Service::HID { |
| 9 | constexpr u8 DEVICE_ID = 0x28; | 9 | constexpr u8 DEVICE_ID = 0x28; |
| 10 | 10 | ||
| 11 | Starlink::Starlink(Core::HID::HIDCore& hid_core_, KernelHelpers::ServiceContext& service_context_) | 11 | Starlink::Starlink(Core::System& system_, KernelHelpers::ServiceContext& service_context_) |
| 12 | : HidbusBase(service_context_) {} | 12 | : HidbusBase(system_, service_context_) {} |
| 13 | Starlink::~Starlink() = default; | 13 | Starlink::~Starlink() = default; |
| 14 | 14 | ||
| 15 | void Starlink::OnInit() { | 15 | void Starlink::OnInit() { |
| @@ -27,7 +27,7 @@ void Starlink::OnUpdate() { | |||
| 27 | if (!device_enabled) { | 27 | if (!device_enabled) { |
| 28 | return; | 28 | return; |
| 29 | } | 29 | } |
| 30 | if (!polling_mode_enabled || !is_transfer_memory_set) { | 30 | if (!polling_mode_enabled || transfer_memory == 0) { |
| 31 | return; | 31 | return; |
| 32 | } | 32 | } |
| 33 | 33 | ||
diff --git a/src/core/hle/service/hid/hidbus/starlink.h b/src/core/hle/service/hid/hidbus/starlink.h index 07c800e6e..a276aa88f 100644 --- a/src/core/hle/service/hid/hidbus/starlink.h +++ b/src/core/hle/service/hid/hidbus/starlink.h | |||
| @@ -14,8 +14,7 @@ namespace Service::HID { | |||
| 14 | 14 | ||
| 15 | class Starlink final : public HidbusBase { | 15 | class Starlink final : public HidbusBase { |
| 16 | public: | 16 | public: |
| 17 | explicit Starlink(Core::HID::HIDCore& hid_core_, | 17 | explicit Starlink(Core::System& system_, KernelHelpers::ServiceContext& service_context_); |
| 18 | KernelHelpers::ServiceContext& service_context_); | ||
| 19 | ~Starlink() override; | 18 | ~Starlink() override; |
| 20 | 19 | ||
| 21 | void OnInit() override; | 20 | void OnInit() override; |
diff --git a/src/core/hle/service/hid/hidbus/stubbed.cpp b/src/core/hle/service/hid/hidbus/stubbed.cpp index 07632c872..8160b7218 100644 --- a/src/core/hle/service/hid/hidbus/stubbed.cpp +++ b/src/core/hle/service/hid/hidbus/stubbed.cpp | |||
| @@ -8,9 +8,8 @@ | |||
| 8 | namespace Service::HID { | 8 | namespace Service::HID { |
| 9 | constexpr u8 DEVICE_ID = 0xFF; | 9 | constexpr u8 DEVICE_ID = 0xFF; |
| 10 | 10 | ||
| 11 | HidbusStubbed::HidbusStubbed(Core::HID::HIDCore& hid_core_, | 11 | HidbusStubbed::HidbusStubbed(Core::System& system_, KernelHelpers::ServiceContext& service_context_) |
| 12 | KernelHelpers::ServiceContext& service_context_) | 12 | : HidbusBase(system_, service_context_) {} |
| 13 | : HidbusBase(service_context_) {} | ||
| 14 | HidbusStubbed::~HidbusStubbed() = default; | 13 | HidbusStubbed::~HidbusStubbed() = default; |
| 15 | 14 | ||
| 16 | void HidbusStubbed::OnInit() { | 15 | void HidbusStubbed::OnInit() { |
| @@ -28,7 +27,7 @@ void HidbusStubbed::OnUpdate() { | |||
| 28 | if (!device_enabled) { | 27 | if (!device_enabled) { |
| 29 | return; | 28 | return; |
| 30 | } | 29 | } |
| 31 | if (!polling_mode_enabled || !is_transfer_memory_set) { | 30 | if (!polling_mode_enabled || transfer_memory == 0) { |
| 32 | return; | 31 | return; |
| 33 | } | 32 | } |
| 34 | 33 | ||
diff --git a/src/core/hle/service/hid/hidbus/stubbed.h b/src/core/hle/service/hid/hidbus/stubbed.h index 38eaa0ecc..2e58d42fc 100644 --- a/src/core/hle/service/hid/hidbus/stubbed.h +++ b/src/core/hle/service/hid/hidbus/stubbed.h | |||
| @@ -14,8 +14,7 @@ namespace Service::HID { | |||
| 14 | 14 | ||
| 15 | class HidbusStubbed final : public HidbusBase { | 15 | class HidbusStubbed final : public HidbusBase { |
| 16 | public: | 16 | public: |
| 17 | explicit HidbusStubbed(Core::HID::HIDCore& hid_core_, | 17 | explicit HidbusStubbed(Core::System& system_, KernelHelpers::ServiceContext& service_context_); |
| 18 | KernelHelpers::ServiceContext& service_context_); | ||
| 19 | ~HidbusStubbed() override; | 18 | ~HidbusStubbed() override; |
| 20 | 19 | ||
| 21 | void OnInit() override; | 20 | void OnInit() override; |
diff --git a/src/core/hle/service/hid/irs.cpp b/src/core/hle/service/hid/irs.cpp index 3bd418e92..a40f61fde 100644 --- a/src/core/hle/service/hid/irs.cpp +++ b/src/core/hle/service/hid/irs.cpp | |||
| @@ -208,8 +208,6 @@ void IRS::RunImageTransferProcessor(Kernel::HLERequestContext& ctx) { | |||
| 208 | 208 | ||
| 209 | ASSERT_MSG(t_mem->GetSize() == parameters.transfer_memory_size, "t_mem has incorrect size"); | 209 | ASSERT_MSG(t_mem->GetSize() == parameters.transfer_memory_size, "t_mem has incorrect size"); |
| 210 | 210 | ||
| 211 | u8* transfer_memory = system.Memory().GetPointer(t_mem->GetSourceAddress()); | ||
| 212 | |||
| 213 | LOG_INFO(Service_IRS, | 211 | LOG_INFO(Service_IRS, |
| 214 | "called, npad_type={}, npad_id={}, transfer_memory_size={}, transfer_memory_size={}, " | 212 | "called, npad_type={}, npad_id={}, transfer_memory_size={}, transfer_memory_size={}, " |
| 215 | "applet_resource_user_id={}", | 213 | "applet_resource_user_id={}", |
| @@ -224,7 +222,7 @@ void IRS::RunImageTransferProcessor(Kernel::HLERequestContext& ctx) { | |||
| 224 | auto& image_transfer_processor = | 222 | auto& image_transfer_processor = |
| 225 | GetProcessor<ImageTransferProcessor>(parameters.camera_handle); | 223 | GetProcessor<ImageTransferProcessor>(parameters.camera_handle); |
| 226 | image_transfer_processor.SetConfig(parameters.processor_config); | 224 | image_transfer_processor.SetConfig(parameters.processor_config); |
| 227 | image_transfer_processor.SetTransferMemoryPointer(transfer_memory); | 225 | image_transfer_processor.SetTransferMemoryAddress(t_mem->GetSourceAddress()); |
| 228 | npad_device->SetPollingMode(Core::HID::EmulatedDeviceIndex::RightIndex, | 226 | npad_device->SetPollingMode(Core::HID::EmulatedDeviceIndex::RightIndex, |
| 229 | Common::Input::PollingMode::IR); | 227 | Common::Input::PollingMode::IR); |
| 230 | } | 228 | } |
| @@ -448,8 +446,6 @@ void IRS::RunImageTransferExProcessor(Kernel::HLERequestContext& ctx) { | |||
| 448 | auto t_mem = system.ApplicationProcess()->GetHandleTable().GetObject<Kernel::KTransferMemory>( | 446 | auto t_mem = system.ApplicationProcess()->GetHandleTable().GetObject<Kernel::KTransferMemory>( |
| 449 | t_mem_handle); | 447 | t_mem_handle); |
| 450 | 448 | ||
| 451 | u8* transfer_memory = system.Memory().GetPointer(t_mem->GetSourceAddress()); | ||
| 452 | |||
| 453 | LOG_INFO(Service_IRS, | 449 | LOG_INFO(Service_IRS, |
| 454 | "called, npad_type={}, npad_id={}, transfer_memory_size={}, " | 450 | "called, npad_type={}, npad_id={}, transfer_memory_size={}, " |
| 455 | "applet_resource_user_id={}", | 451 | "applet_resource_user_id={}", |
| @@ -464,7 +460,7 @@ void IRS::RunImageTransferExProcessor(Kernel::HLERequestContext& ctx) { | |||
| 464 | auto& image_transfer_processor = | 460 | auto& image_transfer_processor = |
| 465 | GetProcessor<ImageTransferProcessor>(parameters.camera_handle); | 461 | GetProcessor<ImageTransferProcessor>(parameters.camera_handle); |
| 466 | image_transfer_processor.SetConfig(parameters.processor_config); | 462 | image_transfer_processor.SetConfig(parameters.processor_config); |
| 467 | image_transfer_processor.SetTransferMemoryPointer(transfer_memory); | 463 | image_transfer_processor.SetTransferMemoryAddress(t_mem->GetSourceAddress()); |
| 468 | npad_device->SetPollingMode(Core::HID::EmulatedDeviceIndex::RightIndex, | 464 | npad_device->SetPollingMode(Core::HID::EmulatedDeviceIndex::RightIndex, |
| 469 | Common::Input::PollingMode::IR); | 465 | Common::Input::PollingMode::IR); |
| 470 | } | 466 | } |
diff --git a/src/core/hle/service/hid/irs.h b/src/core/hle/service/hid/irs.h index 2e6115c73..b76ad7854 100644 --- a/src/core/hle/service/hid/irs.h +++ b/src/core/hle/service/hid/irs.h | |||
| @@ -80,7 +80,13 @@ private: | |||
| 80 | LOG_CRITICAL(Service_IRS, "Invalid index {}", index); | 80 | LOG_CRITICAL(Service_IRS, "Invalid index {}", index); |
| 81 | return; | 81 | return; |
| 82 | } | 82 | } |
| 83 | processors[index] = std::make_unique<T>(system.HIDCore(), device_state, index); | 83 | |
| 84 | if constexpr (std::is_constructible_v<T, Core::System&, Core::IrSensor::DeviceFormat&, | ||
| 85 | std::size_t>) { | ||
| 86 | processors[index] = std::make_unique<T>(system, device_state, index); | ||
| 87 | } else { | ||
| 88 | processors[index] = std::make_unique<T>(system.HIDCore(), device_state, index); | ||
| 89 | } | ||
| 84 | } | 90 | } |
| 85 | 91 | ||
| 86 | template <typename T> | 92 | template <typename T> |
diff --git a/src/core/hle/service/hid/irsensor/image_transfer_processor.cpp b/src/core/hle/service/hid/irsensor/image_transfer_processor.cpp index 98f0c579d..bc896a1e3 100644 --- a/src/core/hle/service/hid/irsensor/image_transfer_processor.cpp +++ b/src/core/hle/service/hid/irsensor/image_transfer_processor.cpp | |||
| @@ -1,16 +1,18 @@ | |||
| 1 | // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project | 1 | // SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project |
| 2 | // SPDX-License-Identifier: GPL-3.0-or-later | 2 | // SPDX-License-Identifier: GPL-3.0-or-later |
| 3 | 3 | ||
| 4 | #include "core/core.h" | ||
| 4 | #include "core/hid/emulated_controller.h" | 5 | #include "core/hid/emulated_controller.h" |
| 5 | #include "core/hid/hid_core.h" | 6 | #include "core/hid/hid_core.h" |
| 6 | #include "core/hle/service/hid/irsensor/image_transfer_processor.h" | 7 | #include "core/hle/service/hid/irsensor/image_transfer_processor.h" |
| 8 | #include "core/memory.h" | ||
| 7 | 9 | ||
| 8 | namespace Service::IRS { | 10 | namespace Service::IRS { |
| 9 | ImageTransferProcessor::ImageTransferProcessor(Core::HID::HIDCore& hid_core_, | 11 | ImageTransferProcessor::ImageTransferProcessor(Core::System& system_, |
| 10 | Core::IrSensor::DeviceFormat& device_format, | 12 | Core::IrSensor::DeviceFormat& device_format, |
| 11 | std::size_t npad_index) | 13 | std::size_t npad_index) |
| 12 | : device{device_format} { | 14 | : device{device_format}, system{system_} { |
| 13 | npad_device = hid_core_.GetEmulatedControllerByIndex(npad_index); | 15 | npad_device = system.HIDCore().GetEmulatedControllerByIndex(npad_index); |
| 14 | 16 | ||
| 15 | Core::HID::ControllerUpdateCallback engine_callback{ | 17 | Core::HID::ControllerUpdateCallback engine_callback{ |
| 16 | .on_change = [this](Core::HID::ControllerTriggerType type) { OnControllerUpdate(type); }, | 18 | .on_change = [this](Core::HID::ControllerTriggerType type) { OnControllerUpdate(type); }, |
| @@ -43,7 +45,7 @@ void ImageTransferProcessor::OnControllerUpdate(Core::HID::ControllerTriggerType | |||
| 43 | if (type != Core::HID::ControllerTriggerType::IrSensor) { | 45 | if (type != Core::HID::ControllerTriggerType::IrSensor) { |
| 44 | return; | 46 | return; |
| 45 | } | 47 | } |
| 46 | if (!is_transfer_memory_set) { | 48 | if (transfer_memory == 0) { |
| 47 | return; | 49 | return; |
| 48 | } | 50 | } |
| 49 | 51 | ||
| @@ -56,14 +58,16 @@ void ImageTransferProcessor::OnControllerUpdate(Core::HID::ControllerTriggerType | |||
| 56 | if (camera_data.format != current_config.origin_format) { | 58 | if (camera_data.format != current_config.origin_format) { |
| 57 | LOG_WARNING(Service_IRS, "Wrong Input format {} expected {}", camera_data.format, | 59 | LOG_WARNING(Service_IRS, "Wrong Input format {} expected {}", camera_data.format, |
| 58 | current_config.origin_format); | 60 | current_config.origin_format); |
| 59 | memset(transfer_memory, 0, GetDataSize(current_config.trimming_format)); | 61 | system.Memory().ZeroBlock(*system.ApplicationProcess(), transfer_memory, |
| 62 | GetDataSize(current_config.trimming_format)); | ||
| 60 | return; | 63 | return; |
| 61 | } | 64 | } |
| 62 | 65 | ||
| 63 | if (current_config.origin_format > current_config.trimming_format) { | 66 | if (current_config.origin_format > current_config.trimming_format) { |
| 64 | LOG_WARNING(Service_IRS, "Origin format {} is smaller than trimming format {}", | 67 | LOG_WARNING(Service_IRS, "Origin format {} is smaller than trimming format {}", |
| 65 | current_config.origin_format, current_config.trimming_format); | 68 | current_config.origin_format, current_config.trimming_format); |
| 66 | memset(transfer_memory, 0, GetDataSize(current_config.trimming_format)); | 69 | system.Memory().ZeroBlock(*system.ApplicationProcess(), transfer_memory, |
| 70 | GetDataSize(current_config.trimming_format)); | ||
| 67 | return; | 71 | return; |
| 68 | } | 72 | } |
| 69 | 73 | ||
| @@ -80,7 +84,8 @@ void ImageTransferProcessor::OnControllerUpdate(Core::HID::ControllerTriggerType | |||
| 80 | "Trimming area ({}, {}, {}, {}) is outside of origin area ({}, {})", | 84 | "Trimming area ({}, {}, {}, {}) is outside of origin area ({}, {})", |
| 81 | current_config.trimming_start_x, current_config.trimming_start_y, | 85 | current_config.trimming_start_x, current_config.trimming_start_y, |
| 82 | trimming_width, trimming_height, origin_width, origin_height); | 86 | trimming_width, trimming_height, origin_width, origin_height); |
| 83 | memset(transfer_memory, 0, GetDataSize(current_config.trimming_format)); | 87 | system.Memory().ZeroBlock(*system.ApplicationProcess(), transfer_memory, |
| 88 | GetDataSize(current_config.trimming_format)); | ||
| 84 | return; | 89 | return; |
| 85 | } | 90 | } |
| 86 | 91 | ||
| @@ -94,7 +99,8 @@ void ImageTransferProcessor::OnControllerUpdate(Core::HID::ControllerTriggerType | |||
| 94 | } | 99 | } |
| 95 | } | 100 | } |
| 96 | 101 | ||
| 97 | memcpy(transfer_memory, window_data.data(), GetDataSize(current_config.trimming_format)); | 102 | system.Memory().WriteBlock(transfer_memory, window_data.data(), |
| 103 | GetDataSize(current_config.trimming_format)); | ||
| 98 | 104 | ||
| 99 | if (!IsProcessorActive()) { | 105 | if (!IsProcessorActive()) { |
| 100 | StartProcessor(); | 106 | StartProcessor(); |
| @@ -134,8 +140,7 @@ void ImageTransferProcessor::SetConfig( | |||
| 134 | npad_device->SetCameraFormat(current_config.origin_format); | 140 | npad_device->SetCameraFormat(current_config.origin_format); |
| 135 | } | 141 | } |
| 136 | 142 | ||
| 137 | void ImageTransferProcessor::SetTransferMemoryPointer(u8* t_mem) { | 143 | void ImageTransferProcessor::SetTransferMemoryAddress(VAddr t_mem) { |
| 138 | is_transfer_memory_set = true; | ||
| 139 | transfer_memory = t_mem; | 144 | transfer_memory = t_mem; |
| 140 | } | 145 | } |
| 141 | 146 | ||
| @@ -143,7 +148,7 @@ Core::IrSensor::ImageTransferProcessorState ImageTransferProcessor::GetState( | |||
| 143 | std::vector<u8>& data) const { | 148 | std::vector<u8>& data) const { |
| 144 | const auto size = GetDataSize(current_config.trimming_format); | 149 | const auto size = GetDataSize(current_config.trimming_format); |
| 145 | data.resize(size); | 150 | data.resize(size); |
| 146 | memcpy(data.data(), transfer_memory, size); | 151 | system.Memory().ReadBlock(transfer_memory, data.data(), size); |
| 147 | return processor_state; | 152 | return processor_state; |
| 148 | } | 153 | } |
| 149 | 154 | ||
diff --git a/src/core/hle/service/hid/irsensor/image_transfer_processor.h b/src/core/hle/service/hid/irsensor/image_transfer_processor.h index 393df492d..7cfe04c8c 100644 --- a/src/core/hle/service/hid/irsensor/image_transfer_processor.h +++ b/src/core/hle/service/hid/irsensor/image_transfer_processor.h | |||
| @@ -7,6 +7,10 @@ | |||
| 7 | #include "core/hid/irs_types.h" | 7 | #include "core/hid/irs_types.h" |
| 8 | #include "core/hle/service/hid/irsensor/processor_base.h" | 8 | #include "core/hle/service/hid/irsensor/processor_base.h" |
| 9 | 9 | ||
| 10 | namespace Core { | ||
| 11 | class System; | ||
| 12 | } | ||
| 13 | |||
| 10 | namespace Core::HID { | 14 | namespace Core::HID { |
| 11 | class EmulatedController; | 15 | class EmulatedController; |
| 12 | } // namespace Core::HID | 16 | } // namespace Core::HID |
| @@ -14,7 +18,7 @@ class EmulatedController; | |||
| 14 | namespace Service::IRS { | 18 | namespace Service::IRS { |
| 15 | class ImageTransferProcessor final : public ProcessorBase { | 19 | class ImageTransferProcessor final : public ProcessorBase { |
| 16 | public: | 20 | public: |
| 17 | explicit ImageTransferProcessor(Core::HID::HIDCore& hid_core_, | 21 | explicit ImageTransferProcessor(Core::System& system_, |
| 18 | Core::IrSensor::DeviceFormat& device_format, | 22 | Core::IrSensor::DeviceFormat& device_format, |
| 19 | std::size_t npad_index); | 23 | std::size_t npad_index); |
| 20 | ~ImageTransferProcessor() override; | 24 | ~ImageTransferProcessor() override; |
| @@ -33,7 +37,7 @@ public: | |||
| 33 | void SetConfig(Core::IrSensor::PackedImageTransferProcessorExConfig config); | 37 | void SetConfig(Core::IrSensor::PackedImageTransferProcessorExConfig config); |
| 34 | 38 | ||
| 35 | // Transfer memory where the image data will be stored | 39 | // Transfer memory where the image data will be stored |
| 36 | void SetTransferMemoryPointer(u8* t_mem); | 40 | void SetTransferMemoryAddress(VAddr t_mem); |
| 37 | 41 | ||
| 38 | Core::IrSensor::ImageTransferProcessorState GetState(std::vector<u8>& data) const; | 42 | Core::IrSensor::ImageTransferProcessorState GetState(std::vector<u8>& data) const; |
| 39 | 43 | ||
| @@ -67,7 +71,7 @@ private: | |||
| 67 | Core::HID::EmulatedController* npad_device; | 71 | Core::HID::EmulatedController* npad_device; |
| 68 | int callback_key{}; | 72 | int callback_key{}; |
| 69 | 73 | ||
| 70 | u8* transfer_memory = nullptr; | 74 | Core::System& system; |
| 71 | bool is_transfer_memory_set = false; | 75 | VAddr transfer_memory{}; |
| 72 | }; | 76 | }; |
| 73 | } // namespace Service::IRS | 77 | } // namespace Service::IRS |