diff options
Diffstat (limited to 'src/core/hid/emulated_controller.cpp')
| -rw-r--r-- | src/core/hid/emulated_controller.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/core/hid/emulated_controller.cpp b/src/core/hid/emulated_controller.cpp index 34927cddd..a6c4ccbbc 100644 --- a/src/core/hid/emulated_controller.cpp +++ b/src/core/hid/emulated_controller.cpp | |||
| @@ -508,9 +508,11 @@ void EmulatedController::ReloadInput() { | |||
| 508 | }); | 508 | }); |
| 509 | } | 509 | } |
| 510 | turbo_button_state = 0; | 510 | turbo_button_state = 0; |
| 511 | is_initalized = true; | ||
| 511 | } | 512 | } |
| 512 | 513 | ||
| 513 | void EmulatedController::UnloadInput() { | 514 | void EmulatedController::UnloadInput() { |
| 515 | is_initalized = false; | ||
| 514 | for (auto& button : button_devices) { | 516 | for (auto& button : button_devices) { |
| 515 | button.reset(); | 517 | button.reset(); |
| 516 | } | 518 | } |
| @@ -1206,6 +1208,9 @@ void EmulatedController::SetNfc(const Common::Input::CallbackStatus& callback) { | |||
| 1206 | } | 1208 | } |
| 1207 | 1209 | ||
| 1208 | bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue vibration) { | 1210 | bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue vibration) { |
| 1211 | if (!is_initalized) { | ||
| 1212 | return false; | ||
| 1213 | } | ||
| 1209 | if (device_index >= output_devices.size()) { | 1214 | if (device_index >= output_devices.size()) { |
| 1210 | return false; | 1215 | return false; |
| 1211 | } | 1216 | } |
| @@ -1241,6 +1246,10 @@ bool EmulatedController::IsVibrationEnabled(std::size_t device_index) { | |||
| 1241 | const auto player_index = NpadIdTypeToIndex(npad_id_type); | 1246 | const auto player_index = NpadIdTypeToIndex(npad_id_type); |
| 1242 | const auto& player = Settings::values.players.GetValue()[player_index]; | 1247 | const auto& player = Settings::values.players.GetValue()[player_index]; |
| 1243 | 1248 | ||
| 1249 | if (!is_initalized) { | ||
| 1250 | return false; | ||
| 1251 | } | ||
| 1252 | |||
| 1244 | if (!player.vibration_enabled) { | 1253 | if (!player.vibration_enabled) { |
| 1245 | return false; | 1254 | return false; |
| 1246 | } | 1255 | } |
| @@ -1260,6 +1269,10 @@ Common::Input::DriverResult EmulatedController::SetPollingMode( | |||
| 1260 | EmulatedDeviceIndex device_index, Common::Input::PollingMode polling_mode) { | 1269 | EmulatedDeviceIndex device_index, Common::Input::PollingMode polling_mode) { |
| 1261 | LOG_INFO(Service_HID, "Set polling mode {}, device_index={}", polling_mode, device_index); | 1270 | LOG_INFO(Service_HID, "Set polling mode {}, device_index={}", polling_mode, device_index); |
| 1262 | 1271 | ||
| 1272 | if (!is_initalized) { | ||
| 1273 | return Common::Input::DriverResult::InvalidHandle; | ||
| 1274 | } | ||
| 1275 | |||
| 1263 | auto& left_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Left)]; | 1276 | auto& left_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Left)]; |
| 1264 | auto& right_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; | 1277 | auto& right_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; |
| 1265 | auto& nfc_output_device = output_devices[3]; | 1278 | auto& nfc_output_device = output_devices[3]; |
| @@ -1305,6 +1318,10 @@ bool EmulatedController::SetCameraFormat( | |||
| 1305 | Core::IrSensor::ImageTransferProcessorFormat camera_format) { | 1318 | Core::IrSensor::ImageTransferProcessorFormat camera_format) { |
| 1306 | LOG_INFO(Service_HID, "Set camera format {}", camera_format); | 1319 | LOG_INFO(Service_HID, "Set camera format {}", camera_format); |
| 1307 | 1320 | ||
| 1321 | if (!is_initalized) { | ||
| 1322 | return false; | ||
| 1323 | } | ||
| 1324 | |||
| 1308 | auto& right_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; | 1325 | auto& right_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; |
| 1309 | auto& camera_output_device = output_devices[2]; | 1326 | auto& camera_output_device = output_devices[2]; |
| 1310 | 1327 | ||
| @@ -1328,6 +1345,11 @@ void EmulatedController::SetRingParam(Common::ParamPackage param) { | |||
| 1328 | } | 1345 | } |
| 1329 | 1346 | ||
| 1330 | bool EmulatedController::HasNfc() const { | 1347 | bool EmulatedController::HasNfc() const { |
| 1348 | |||
| 1349 | if (!is_initalized) { | ||
| 1350 | return false; | ||
| 1351 | } | ||
| 1352 | |||
| 1331 | const auto& nfc_output_device = output_devices[3]; | 1353 | const auto& nfc_output_device = output_devices[3]; |
| 1332 | 1354 | ||
| 1333 | switch (npad_type) { | 1355 | switch (npad_type) { |
| @@ -1365,6 +1387,10 @@ bool EmulatedController::RemoveNfcHandle() { | |||
| 1365 | } | 1387 | } |
| 1366 | 1388 | ||
| 1367 | bool EmulatedController::StartNfcPolling() { | 1389 | bool EmulatedController::StartNfcPolling() { |
| 1390 | if (!is_initalized) { | ||
| 1391 | return false; | ||
| 1392 | } | ||
| 1393 | |||
| 1368 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; | 1394 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; |
| 1369 | auto& nfc_virtual_output_device = output_devices[3]; | 1395 | auto& nfc_virtual_output_device = output_devices[3]; |
| 1370 | 1396 | ||
| @@ -1376,6 +1402,10 @@ bool EmulatedController::StartNfcPolling() { | |||
| 1376 | } | 1402 | } |
| 1377 | 1403 | ||
| 1378 | bool EmulatedController::StopNfcPolling() { | 1404 | bool EmulatedController::StopNfcPolling() { |
| 1405 | if (!is_initalized) { | ||
| 1406 | return false; | ||
| 1407 | } | ||
| 1408 | |||
| 1379 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; | 1409 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; |
| 1380 | auto& nfc_virtual_output_device = output_devices[3]; | 1410 | auto& nfc_virtual_output_device = output_devices[3]; |
| 1381 | 1411 | ||
| @@ -1387,6 +1417,10 @@ bool EmulatedController::StopNfcPolling() { | |||
| 1387 | } | 1417 | } |
| 1388 | 1418 | ||
| 1389 | bool EmulatedController::ReadAmiiboData(std::vector<u8>& data) { | 1419 | bool EmulatedController::ReadAmiiboData(std::vector<u8>& data) { |
| 1420 | if (!is_initalized) { | ||
| 1421 | return false; | ||
| 1422 | } | ||
| 1423 | |||
| 1390 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; | 1424 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; |
| 1391 | auto& nfc_virtual_output_device = output_devices[3]; | 1425 | auto& nfc_virtual_output_device = output_devices[3]; |
| 1392 | 1426 | ||
| @@ -1399,6 +1433,10 @@ bool EmulatedController::ReadAmiiboData(std::vector<u8>& data) { | |||
| 1399 | 1433 | ||
| 1400 | bool EmulatedController::ReadMifareData(const Common::Input::MifareRequest& request, | 1434 | bool EmulatedController::ReadMifareData(const Common::Input::MifareRequest& request, |
| 1401 | Common::Input::MifareRequest& out_data) { | 1435 | Common::Input::MifareRequest& out_data) { |
| 1436 | if (!is_initalized) { | ||
| 1437 | return false; | ||
| 1438 | } | ||
| 1439 | |||
| 1402 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; | 1440 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; |
| 1403 | auto& nfc_virtual_output_device = output_devices[3]; | 1441 | auto& nfc_virtual_output_device = output_devices[3]; |
| 1404 | 1442 | ||
| @@ -1411,6 +1449,10 @@ bool EmulatedController::ReadMifareData(const Common::Input::MifareRequest& requ | |||
| 1411 | } | 1449 | } |
| 1412 | 1450 | ||
| 1413 | bool EmulatedController::WriteMifareData(const Common::Input::MifareRequest& request) { | 1451 | bool EmulatedController::WriteMifareData(const Common::Input::MifareRequest& request) { |
| 1452 | if (!is_initalized) { | ||
| 1453 | return false; | ||
| 1454 | } | ||
| 1455 | |||
| 1414 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; | 1456 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; |
| 1415 | auto& nfc_virtual_output_device = output_devices[3]; | 1457 | auto& nfc_virtual_output_device = output_devices[3]; |
| 1416 | 1458 | ||
| @@ -1422,6 +1464,10 @@ bool EmulatedController::WriteMifareData(const Common::Input::MifareRequest& req | |||
| 1422 | } | 1464 | } |
| 1423 | 1465 | ||
| 1424 | bool EmulatedController::WriteNfc(const std::vector<u8>& data) { | 1466 | bool EmulatedController::WriteNfc(const std::vector<u8>& data) { |
| 1467 | if (!is_initalized) { | ||
| 1468 | return false; | ||
| 1469 | } | ||
| 1470 | |||
| 1425 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; | 1471 | auto& nfc_output_device = output_devices[static_cast<std::size_t>(DeviceIndex::Right)]; |
| 1426 | auto& nfc_virtual_output_device = output_devices[3]; | 1472 | auto& nfc_virtual_output_device = output_devices[3]; |
| 1427 | 1473 | ||
| @@ -1433,6 +1479,10 @@ bool EmulatedController::WriteNfc(const std::vector<u8>& data) { | |||
| 1433 | } | 1479 | } |
| 1434 | 1480 | ||
| 1435 | void EmulatedController::SetLedPattern() { | 1481 | void EmulatedController::SetLedPattern() { |
| 1482 | if (!is_initalized) { | ||
| 1483 | return; | ||
| 1484 | } | ||
| 1485 | |||
| 1436 | for (auto& device : output_devices) { | 1486 | for (auto& device : output_devices) { |
| 1437 | if (!device) { | 1487 | if (!device) { |
| 1438 | continue; | 1488 | continue; |