diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/hid/emulated_controller.cpp | 21 | ||||
| -rw-r--r-- | src/core/hid/emulated_controller.h | 5 | ||||
| -rw-r--r-- | src/core/hle/service/hid/irs.cpp | 11 |
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>; |
| 40 | using BatteryDevices = | 40 | using 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>; |
| 42 | using CameraDevices = std::unique_ptr<Common::Input::InputDevice>; | 42 | using CameraDevices = |
| 43 | std::array<std::unique_ptr<Common::Input::InputDevice>, max_emulated_controllers>; | ||
| 43 | using RingAnalogDevices = | 44 | using 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>; |
| 45 | using NfcDevices = | 46 | using NfcDevices = |
| @@ -52,7 +53,7 @@ using ControllerMotionParams = std::array<Common::ParamPackage, Settings::Native | |||
| 52 | using TriggerParams = std::array<Common::ParamPackage, Settings::NativeTrigger::NumTriggers>; | 53 | using TriggerParams = std::array<Common::ParamPackage, Settings::NativeTrigger::NumTriggers>; |
| 53 | using ColorParams = std::array<Common::ParamPackage, max_emulated_controllers>; | 54 | using ColorParams = std::array<Common::ParamPackage, max_emulated_controllers>; |
| 54 | using BatteryParams = std::array<Common::ParamPackage, max_emulated_controllers>; | 55 | using BatteryParams = std::array<Common::ParamPackage, max_emulated_controllers>; |
| 55 | using CameraParams = Common::ParamPackage; | 56 | using CameraParams = std::array<Common::ParamPackage, max_emulated_controllers>; |
| 56 | using RingAnalogParams = std::array<Common::ParamPackage, max_emulated_controllers>; | 57 | using RingAnalogParams = std::array<Common::ParamPackage, max_emulated_controllers>; |
| 57 | using NfcParams = std::array<Common::ParamPackage, max_emulated_controllers>; | 58 | using NfcParams = std::array<Common::ParamPackage, max_emulated_controllers>; |
| 58 | using OutputParams = std::array<Common::ParamPackage, output_devices_size>; | 59 | using 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 | ||