summaryrefslogtreecommitdiff
path: root/src/core/hid/emulated_controller.cpp
diff options
context:
space:
mode:
authorGravatar Narr the Reg2023-11-24 10:18:16 -0600
committerGravatar Narr the Reg2023-11-24 10:18:16 -0600
commit02a0b41a152d24dc4ba50ae63be625656838ba1a (patch)
tree982516633874d2cc3513f2f29774d0b8967be4a4 /src/core/hid/emulated_controller.cpp
parentMerge pull request #12123 from merryhime/explicit-this (diff)
downloadyuzu-02a0b41a152d24dc4ba50ae63be625656838ba1a.tar.gz
yuzu-02a0b41a152d24dc4ba50ae63be625656838ba1a.tar.xz
yuzu-02a0b41a152d24dc4ba50ae63be625656838ba1a.zip
core: hid: Ensure output devices are initialized
Diffstat (limited to 'src/core/hid/emulated_controller.cpp')
-rw-r--r--src/core/hid/emulated_controller.cpp50
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
513void EmulatedController::UnloadInput() { 514void 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
1208bool EmulatedController::SetVibration(std::size_t device_index, VibrationValue vibration) { 1210bool 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
1330bool EmulatedController::HasNfc() const { 1347bool 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
1367bool EmulatedController::StartNfcPolling() { 1389bool 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
1378bool EmulatedController::StopNfcPolling() { 1404bool 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
1389bool EmulatedController::ReadAmiiboData(std::vector<u8>& data) { 1419bool 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
1400bool EmulatedController::ReadMifareData(const Common::Input::MifareRequest& request, 1434bool 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
1413bool EmulatedController::WriteMifareData(const Common::Input::MifareRequest& request) { 1451bool 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
1424bool EmulatedController::WriteNfc(const std::vector<u8>& data) { 1466bool 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
1435void EmulatedController::SetLedPattern() { 1481void 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;