summaryrefslogtreecommitdiff
path: root/src/core/hid/emulated_controller.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hid/emulated_controller.cpp')
-rw-r--r--src/core/hid/emulated_controller.cpp82
1 files changed, 75 insertions, 7 deletions
diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp
index 0a7777732..c937495f9 100644
--- a/src/core/hid/emulated_controller.cpp
+++ b/src/core/hid/emulated_controller.cpp
@@ -149,12 +149,16 @@ void EmulatedController::LoadDevices() {
149 149
150 camera_params[0] = right_joycon; 150 camera_params[0] = right_joycon;
151 camera_params[0].Set("camera", true); 151 camera_params[0].Set("camera", true);
152 camera_params[1] = Common::ParamPackage{"engine:camera,camera:1"};
153 ring_params[1] = Common::ParamPackage{"engine:joycon,axis_x:100,axis_y:101"};
154 nfc_params[0] = Common::ParamPackage{"engine:virtual_amiibo,nfc:1"};
155 nfc_params[1] = right_joycon; 152 nfc_params[1] = right_joycon;
156 nfc_params[1].Set("nfc", true); 153 nfc_params[1].Set("nfc", true);
157 154
155 // Only map virtual devices to the first controller
156 if (npad_id_type == NpadIdType::Player1 || npad_id_type == NpadIdType::Handheld) {
157 camera_params[1] = Common::ParamPackage{"engine:camera,camera:1"};
158 ring_params[1] = Common::ParamPackage{"engine:joycon,axis_x:100,axis_y:101"};
159 nfc_params[0] = Common::ParamPackage{"engine:virtual_amiibo,nfc:1"};
160 }
161
158 output_params[LeftIndex] = left_joycon; 162 output_params[LeftIndex] = left_joycon;
159 output_params[RightIndex] = right_joycon; 163 output_params[RightIndex] = right_joycon;
160 output_params[2] = camera_params[1]; 164 output_params[2] = camera_params[1];
@@ -1176,10 +1180,7 @@ void EmulatedController::SetNfc(const Common::Input::CallbackStatus& callback) {
1176 return; 1180 return;
1177 } 1181 }
1178 1182
1179 controller.nfc_state = { 1183 controller.nfc_state = controller.nfc_values;
1180 controller.nfc_values.state,
1181 controller.nfc_values.data,
1182 };
1183} 1184}
1184 1185
1185bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue vibration) { 1186bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue vibration) {
@@ -1308,6 +1309,73 @@ bool EmulatedController::HasNfc() const {
1308 return is_connected && (has_virtual_nfc && is_virtual_nfc_supported); 1309 return is_connected && (has_virtual_nfc && is_virtual_nfc_supported);
1309} 1310}
1310 1311
1312bool EmulatedController::AddNfcHandle() {
1313 nfc_handles++;
1314 return SetPollingMode(EmulatedDeviceIndex::RightIndex, Common::Input::PollingMode::NFC) ==
1315 Common::Input::DriverResult::Success;
1316}
1317
1318bool EmulatedController::RemoveNfcHandle() {
1319 nfc_handles--;
1320 if (nfc_handles <= 0) {
1321 return SetPollingMode(EmulatedDeviceIndex::RightIndex,
1322 Common::Input::PollingMode::Active) ==
1323 Common::Input::DriverResult::Success;
1324 }
1325 return true;
1326}
1327
1328bool EmulatedController::StartNfcPolling() {
1329 auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)];
1330 auto& nfc_virtual_output_device = output_devices[3];
1331
1332 return nfc_output_device->StartNfcPolling() == Common::Input::NfcState::Success ||
1333 nfc_virtual_output_device->StartNfcPolling() == Common::Input::NfcState::Success;
1334}
1335
1336bool EmulatedController::StopNfcPolling() {
1337 auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)];
1338 auto& nfc_virtual_output_device = output_devices[3];
1339
1340 return nfc_output_device->StopNfcPolling() == Common::Input::NfcState::Success ||
1341 nfc_virtual_output_device->StopNfcPolling() == Common::Input::NfcState::Success;
1342}
1343
1344bool EmulatedController::ReadAmiiboData(std::vector<u8>& data) {
1345 auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)];
1346 auto& nfc_virtual_output_device = output_devices[3];
1347
1348 if (nfc_output_device->ReadAmiiboData(data) == Common::Input::NfcState::Success) {
1349 return true;
1350 }
1351
1352 return nfc_virtual_output_device->ReadAmiiboData(data) == Common::Input::NfcState::Success;
1353}
1354
1355bool EmulatedController::ReadMifareData(const Common::Input::MifareRequest& request,
1356 Common::Input::MifareRequest& out_data) {
1357 auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)];
1358 auto& nfc_virtual_output_device = output_devices[3];
1359
1360 if (nfc_output_device->ReadMifareData(request, out_data) == Common::Input::NfcState::Success) {
1361 return true;
1362 }
1363
1364 return nfc_virtual_output_device->ReadMifareData(request, out_data) ==
1365 Common::Input::NfcState::Success;
1366}
1367
1368bool EmulatedController::WriteMifareData(const Common::Input::MifareRequest& request) {
1369 auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)];
1370 auto& nfc_virtual_output_device = output_devices[3];
1371
1372 if (nfc_output_device->WriteMifareData(request) == Common::Input::NfcState::Success) {
1373 return true;
1374 }
1375
1376 return nfc_virtual_output_device->WriteMifareData(request) == Common::Input::NfcState::Success;
1377}
1378
1311bool EmulatedController::WriteNfc(const std::vector<u8>& data) { 1379bool EmulatedController::WriteNfc(const std::vector<u8>& data) {
1312 auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; 1380 auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)];
1313 auto& nfc_virtual_output_device = output_devices[3]; 1381 auto& nfc_virtual_output_device = output_devices[3];