diff options
| author | 2023-06-16 21:57:21 -0600 | |
|---|---|---|
| committer | 2023-06-21 17:54:58 -0600 | |
| commit | 84d43489c5df9f450efb0293cc58161d08e3b882 (patch) | |
| tree | c4d45b021c78392956dc58d409a34632fe135d2b /src/core/hid/emulated_controller.cpp | |
| parent | Merge pull request #10783 from liamwhite/memory (diff) | |
| download | yuzu-84d43489c5df9f450efb0293cc58161d08e3b882.tar.gz yuzu-84d43489c5df9f450efb0293cc58161d08e3b882.tar.xz yuzu-84d43489c5df9f450efb0293cc58161d08e3b882.zip | |
input_common: Implement native mifare support
Diffstat (limited to 'src/core/hid/emulated_controller.cpp')
| -rw-r--r-- | src/core/hid/emulated_controller.cpp | 82 |
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 | ||
| 1185 | bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue vibration) { | 1186 | bool 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 | ||
| 1312 | bool EmulatedController::AddNfcHandle() { | ||
| 1313 | nfc_handles++; | ||
| 1314 | return SetPollingMode(EmulatedDeviceIndex::RightIndex, Common::Input::PollingMode::NFC) == | ||
| 1315 | Common::Input::DriverResult::Success; | ||
| 1316 | } | ||
| 1317 | |||
| 1318 | bool 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 | |||
| 1328 | bool 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 | |||
| 1336 | bool 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 | |||
| 1344 | bool 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 | |||
| 1355 | bool 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 | |||
| 1368 | bool 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 | |||
| 1311 | bool EmulatedController::WriteNfc(const std::vector<u8>& data) { | 1379 | bool 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]; |