summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/hid/emulated_controller.cpp21
-rw-r--r--src/core/hid/emulated_controller.h5
-rw-r--r--src/core/hle/service/hid/irs.cpp11
3 files changed, 28 insertions, 9 deletions
diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp
index 915ffa490..faf9e7c4e 100644
--- a/src/core/hid/emulated_controller.cpp
+++ b/src/core/hid/emulated_controller.cpp
@@ -145,7 +145,9 @@ void EmulatedController::LoadDevices() {
145 battery_params[LeftIndex].Set("battery", true); 145 battery_params[LeftIndex].Set("battery", true);
146 battery_params[RightIndex].Set("battery", true); 146 battery_params[RightIndex].Set("battery", true);
147 147
148 camera_params = Common::ParamPackage{"engine:camera,camera:1"}; 148 camera_params[0] = right_joycon;
149 camera_params[0].Set("camera", true);
150 camera_params[1] = Common::ParamPackage{"engine:camera,camera:1"};
149 ring_params[1] = Common::ParamPackage{"engine:joycon,axis_x:100,axis_y:101"}; 151 ring_params[1] = Common::ParamPackage{"engine:joycon,axis_x:100,axis_y:101"};
150 nfc_params[0] = Common::ParamPackage{"engine:virtual_amiibo,nfc:1"}; 152 nfc_params[0] = Common::ParamPackage{"engine:virtual_amiibo,nfc:1"};
151 nfc_params[1] = right_joycon; 153 nfc_params[1] = right_joycon;
@@ -153,7 +155,7 @@ void EmulatedController::LoadDevices() {
153 155
154 output_params[LeftIndex] = left_joycon; 156 output_params[LeftIndex] = left_joycon;
155 output_params[RightIndex] = right_joycon; 157 output_params[RightIndex] = right_joycon;
156 output_params[2] = camera_params; 158 output_params[2] = camera_params[1];
157 output_params[3] = nfc_params[0]; 159 output_params[3] = nfc_params[0];
158 output_params[LeftIndex].Set("output", true); 160 output_params[LeftIndex].Set("output", true);
159 output_params[RightIndex].Set("output", true); 161 output_params[RightIndex].Set("output", true);
@@ -171,7 +173,7 @@ void EmulatedController::LoadDevices() {
171 std::ranges::transform(battery_params, battery_devices.begin(), 173 std::ranges::transform(battery_params, battery_devices.begin(),
172 Common::Input::CreateInputDevice); 174 Common::Input::CreateInputDevice);
173 std::ranges::transform(color_params, color_devices.begin(), Common::Input::CreateInputDevice); 175 std::ranges::transform(color_params, color_devices.begin(), Common::Input::CreateInputDevice);
174 camera_devices = Common::Input::CreateInputDevice(camera_params); 176 std::ranges::transform(camera_params, camera_devices.begin(), Common::Input::CreateInputDevice);
175 std::ranges::transform(ring_params, ring_analog_devices.begin(), 177 std::ranges::transform(ring_params, ring_analog_devices.begin(),
176 Common::Input::CreateInputDevice); 178 Common::Input::CreateInputDevice);
177 std::ranges::transform(nfc_params, nfc_devices.begin(), Common::Input::CreateInputDevice); 179 std::ranges::transform(nfc_params, nfc_devices.begin(), Common::Input::CreateInputDevice);
@@ -362,12 +364,15 @@ void EmulatedController::ReloadInput() {
362 motion_devices[index]->ForceUpdate(); 364 motion_devices[index]->ForceUpdate();
363 } 365 }
364 366
365 if (camera_devices) { 367 for (std::size_t index = 0; index < camera_devices.size(); ++index) {
366 camera_devices->SetCallback({ 368 if (!camera_devices[index]) {
369 continue;
370 }
371 camera_devices[index]->SetCallback({
367 .on_change = 372 .on_change =
368 [this](const Common::Input::CallbackStatus& callback) { SetCamera(callback); }, 373 [this](const Common::Input::CallbackStatus& callback) { SetCamera(callback); },
369 }); 374 });
370 camera_devices->ForceUpdate(); 375 camera_devices[index]->ForceUpdate();
371 } 376 }
372 377
373 for (std::size_t index = 0; index < ring_analog_devices.size(); ++index) { 378 for (std::size_t index = 0; index < ring_analog_devices.size(); ++index) {
@@ -477,7 +482,9 @@ void EmulatedController::UnloadInput() {
477 for (auto& stick : virtual_stick_devices) { 482 for (auto& stick : virtual_stick_devices) {
478 stick.reset(); 483 stick.reset();
479 } 484 }
480 camera_devices.reset(); 485 for (auto& camera : camera_devices) {
486 camera.reset();
487 }
481 for (auto& ring : ring_analog_devices) { 488 for (auto& ring : ring_analog_devices) {
482 ring.reset(); 489 ring.reset();
483 } 490 }
diff --git a/src/core/hid/emulated_controller.h b/src/core/hid/emulated_controller.h
index fb931fc0a..edebfc15c 100644
--- a/src/core/hid/emulated_controller.h
+++ b/src/core/hid/emulated_controller.h
@@ -39,7 +39,8 @@ using ColorDevices =
39 std::array<std::unique_ptr<Common::Input::InputDevice>, max_emulated_controllers>; 39 std::array<std::unique_ptr<Common::Input::InputDevice>, max_emulated_controllers>;
40using BatteryDevices = 40using BatteryDevices =
41 std::array<std::unique_ptr<Common::Input::InputDevice>, max_emulated_controllers>; 41 std::array<std::unique_ptr<Common::Input::InputDevice>, max_emulated_controllers>;
42using CameraDevices = std::unique_ptr<Common::Input::InputDevice>; 42using CameraDevices =
43 std::array<std::unique_ptr<Common::Input::InputDevice>, max_emulated_controllers>;
43using RingAnalogDevices = 44using RingAnalogDevices =
44 std::array<std::unique_ptr<Common::Input::InputDevice>, max_emulated_controllers>; 45 std::array<std::unique_ptr<Common::Input::InputDevice>, max_emulated_controllers>;
45using NfcDevices = 46using NfcDevices =
@@ -52,7 +53,7 @@ using ControllerMotionParams = std::array<Common::ParamPackage, Settings::Native
52using TriggerParams = std::array<Common::ParamPackage, Settings::NativeTrigger::NumTriggers>; 53using TriggerParams = std::array<Common::ParamPackage, Settings::NativeTrigger::NumTriggers>;
53using ColorParams = std::array<Common::ParamPackage, max_emulated_controllers>; 54using ColorParams = std::array<Common::ParamPackage, max_emulated_controllers>;
54using BatteryParams = std::array<Common::ParamPackage, max_emulated_controllers>; 55using BatteryParams = std::array<Common::ParamPackage, max_emulated_controllers>;
55using CameraParams = Common::ParamPackage; 56using CameraParams = std::array<Common::ParamPackage, max_emulated_controllers>;
56using RingAnalogParams = std::array<Common::ParamPackage, max_emulated_controllers>; 57using RingAnalogParams = std::array<Common::ParamPackage, max_emulated_controllers>;
57using NfcParams = std::array<Common::ParamPackage, max_emulated_controllers>; 58using NfcParams = std::array<Common::ParamPackage, max_emulated_controllers>;
58using OutputParams = std::array<Common::ParamPackage, output_devices_size>; 59using OutputParams = std::array<Common::ParamPackage, output_devices_size>;
diff --git a/src/core/hle/service/hid/irs.cpp b/src/core/hle/service/hid/irs.cpp
index 6a3453457..3c1fa2274 100644
--- a/src/core/hle/service/hid/irs.cpp
+++ b/src/core/hle/service/hid/irs.cpp
@@ -74,6 +74,8 @@ void IRS::DeactivateIrsensor(Kernel::HLERequestContext& ctx) {
74 LOG_WARNING(Service_IRS, "(STUBBED) called, applet_resource_user_id={}", 74 LOG_WARNING(Service_IRS, "(STUBBED) called, applet_resource_user_id={}",
75 applet_resource_user_id); 75 applet_resource_user_id);
76 76
77 npad_device->SetPollingMode(Common::Input::PollingMode::Active);
78
77 IPC::ResponseBuilder rb{ctx, 2}; 79 IPC::ResponseBuilder rb{ctx, 2};
78 rb.Push(ResultSuccess); 80 rb.Push(ResultSuccess);
79} 81}
@@ -108,6 +110,7 @@ void IRS::StopImageProcessor(Kernel::HLERequestContext& ctx) {
108 auto result = IsIrCameraHandleValid(parameters.camera_handle); 110 auto result = IsIrCameraHandleValid(parameters.camera_handle);
109 if (result.IsSuccess()) { 111 if (result.IsSuccess()) {
110 // TODO: Stop Image processor 112 // TODO: Stop Image processor
113 npad_device->SetPollingMode(Common::Input::PollingMode::Active);
111 result = ResultSuccess; 114 result = ResultSuccess;
112 } 115 }
113 116
@@ -139,6 +142,7 @@ void IRS::RunMomentProcessor(Kernel::HLERequestContext& ctx) {
139 MakeProcessor<MomentProcessor>(parameters.camera_handle, device); 142 MakeProcessor<MomentProcessor>(parameters.camera_handle, device);
140 auto& image_transfer_processor = GetProcessor<MomentProcessor>(parameters.camera_handle); 143 auto& image_transfer_processor = GetProcessor<MomentProcessor>(parameters.camera_handle);
141 image_transfer_processor.SetConfig(parameters.processor_config); 144 image_transfer_processor.SetConfig(parameters.processor_config);
145 npad_device->SetPollingMode(Common::Input::PollingMode::IR);
142 } 146 }
143 147
144 IPC::ResponseBuilder rb{ctx, 2}; 148 IPC::ResponseBuilder rb{ctx, 2};
@@ -170,6 +174,7 @@ void IRS::RunClusteringProcessor(Kernel::HLERequestContext& ctx) {
170 auto& image_transfer_processor = 174 auto& image_transfer_processor =
171 GetProcessor<ClusteringProcessor>(parameters.camera_handle); 175 GetProcessor<ClusteringProcessor>(parameters.camera_handle);
172 image_transfer_processor.SetConfig(parameters.processor_config); 176 image_transfer_processor.SetConfig(parameters.processor_config);
177 npad_device->SetPollingMode(Common::Input::PollingMode::IR);
173 } 178 }
174 179
175 IPC::ResponseBuilder rb{ctx, 2}; 180 IPC::ResponseBuilder rb{ctx, 2};
@@ -219,6 +224,7 @@ void IRS::RunImageTransferProcessor(Kernel::HLERequestContext& ctx) {
219 GetProcessor<ImageTransferProcessor>(parameters.camera_handle); 224 GetProcessor<ImageTransferProcessor>(parameters.camera_handle);
220 image_transfer_processor.SetConfig(parameters.processor_config); 225 image_transfer_processor.SetConfig(parameters.processor_config);
221 image_transfer_processor.SetTransferMemoryPointer(transfer_memory); 226 image_transfer_processor.SetTransferMemoryPointer(transfer_memory);
227 npad_device->SetPollingMode(Common::Input::PollingMode::IR);
222 } 228 }
223 229
224 IPC::ResponseBuilder rb{ctx, 2}; 230 IPC::ResponseBuilder rb{ctx, 2};
@@ -294,6 +300,7 @@ void IRS::RunTeraPluginProcessor(Kernel::HLERequestContext& ctx) {
294 auto& image_transfer_processor = 300 auto& image_transfer_processor =
295 GetProcessor<TeraPluginProcessor>(parameters.camera_handle); 301 GetProcessor<TeraPluginProcessor>(parameters.camera_handle);
296 image_transfer_processor.SetConfig(parameters.processor_config); 302 image_transfer_processor.SetConfig(parameters.processor_config);
303 npad_device->SetPollingMode(Common::Input::PollingMode::IR);
297 } 304 }
298 305
299 IPC::ResponseBuilder rb{ctx, 2}; 306 IPC::ResponseBuilder rb{ctx, 2};
@@ -343,6 +350,7 @@ void IRS::RunPointingProcessor(Kernel::HLERequestContext& ctx) {
343 MakeProcessor<PointingProcessor>(camera_handle, device); 350 MakeProcessor<PointingProcessor>(camera_handle, device);
344 auto& image_transfer_processor = GetProcessor<PointingProcessor>(camera_handle); 351 auto& image_transfer_processor = GetProcessor<PointingProcessor>(camera_handle);
345 image_transfer_processor.SetConfig(processor_config); 352 image_transfer_processor.SetConfig(processor_config);
353 npad_device->SetPollingMode(Common::Input::PollingMode::IR);
346 } 354 }
347 355
348 IPC::ResponseBuilder rb{ctx, 2}; 356 IPC::ResponseBuilder rb{ctx, 2};
@@ -453,6 +461,7 @@ void IRS::RunImageTransferExProcessor(Kernel::HLERequestContext& ctx) {
453 GetProcessor<ImageTransferProcessor>(parameters.camera_handle); 461 GetProcessor<ImageTransferProcessor>(parameters.camera_handle);
454 image_transfer_processor.SetConfig(parameters.processor_config); 462 image_transfer_processor.SetConfig(parameters.processor_config);
455 image_transfer_processor.SetTransferMemoryPointer(transfer_memory); 463 image_transfer_processor.SetTransferMemoryPointer(transfer_memory);
464 npad_device->SetPollingMode(Common::Input::PollingMode::IR);
456 } 465 }
457 466
458 IPC::ResponseBuilder rb{ctx, 2}; 467 IPC::ResponseBuilder rb{ctx, 2};
@@ -479,6 +488,7 @@ void IRS::RunIrLedProcessor(Kernel::HLERequestContext& ctx) {
479 MakeProcessor<IrLedProcessor>(camera_handle, device); 488 MakeProcessor<IrLedProcessor>(camera_handle, device);
480 auto& image_transfer_processor = GetProcessor<IrLedProcessor>(camera_handle); 489 auto& image_transfer_processor = GetProcessor<IrLedProcessor>(camera_handle);
481 image_transfer_processor.SetConfig(processor_config); 490 image_transfer_processor.SetConfig(processor_config);
491 npad_device->SetPollingMode(Common::Input::PollingMode::IR);
482 } 492 }
483 493
484 IPC::ResponseBuilder rb{ctx, 2}; 494 IPC::ResponseBuilder rb{ctx, 2};
@@ -504,6 +514,7 @@ void IRS::StopImageProcessorAsync(Kernel::HLERequestContext& ctx) {
504 auto result = IsIrCameraHandleValid(parameters.camera_handle); 514 auto result = IsIrCameraHandleValid(parameters.camera_handle);
505 if (result.IsSuccess()) { 515 if (result.IsSuccess()) {
506 // TODO: Stop image processor async 516 // TODO: Stop image processor async
517 npad_device->SetPollingMode(Common::Input::PollingMode::IR);
507 result = ResultSuccess; 518 result = ResultSuccess;
508 } 519 }
509 520