diff options
| author | 2023-06-05 21:43:43 -0700 | |
|---|---|---|
| committer | 2023-06-05 21:43:43 -0700 | |
| commit | cb95d7fe1b6d81899fe6b279400da2c991e3132c (patch) | |
| tree | a856ac45b1053009c4c11ee141c49d7faa4c8a19 /src/input_common/drivers | |
| parent | Merge pull request #10611 from liamwhite/audio-deadlock (diff) | |
| parent | Merge pull request #10633 from t895/variable-surface-ratio (diff) | |
| download | yuzu-cb95d7fe1b6d81899fe6b279400da2c991e3132c.tar.gz yuzu-cb95d7fe1b6d81899fe6b279400da2c991e3132c.tar.xz yuzu-cb95d7fe1b6d81899fe6b279400da2c991e3132c.zip | |
Merge pull request #10508 from yuzu-emu/lime
Project Lime - yuzu Android Port
Diffstat (limited to 'src/input_common/drivers')
| -rw-r--r-- | src/input_common/drivers/virtual_amiibo.cpp | 34 | ||||
| -rw-r--r-- | src/input_common/drivers/virtual_amiibo.h | 2 | ||||
| -rw-r--r-- | src/input_common/drivers/virtual_gamepad.cpp | 16 | ||||
| -rw-r--r-- | src/input_common/drivers/virtual_gamepad.h | 12 |
4 files changed, 55 insertions, 9 deletions
diff --git a/src/input_common/drivers/virtual_amiibo.cpp b/src/input_common/drivers/virtual_amiibo.cpp index 304f4c70b..f8bafe553 100644 --- a/src/input_common/drivers/virtual_amiibo.cpp +++ b/src/input_common/drivers/virtual_amiibo.cpp | |||
| @@ -73,10 +73,7 @@ VirtualAmiibo::State VirtualAmiibo::GetCurrentState() const { | |||
| 73 | VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { | 73 | VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { |
| 74 | const Common::FS::IOFile nfc_file{filename, Common::FS::FileAccessMode::Read, | 74 | const Common::FS::IOFile nfc_file{filename, Common::FS::FileAccessMode::Read, |
| 75 | Common::FS::FileType::BinaryFile}; | 75 | Common::FS::FileType::BinaryFile}; |
| 76 | 76 | std::vector<u8> data{}; | |
| 77 | if (state != State::WaitingForAmiibo) { | ||
| 78 | return Info::WrongDeviceState; | ||
| 79 | } | ||
| 80 | 77 | ||
| 81 | if (!nfc_file.IsOpen()) { | 78 | if (!nfc_file.IsOpen()) { |
| 82 | return Info::UnableToLoad; | 79 | return Info::UnableToLoad; |
| @@ -85,14 +82,14 @@ VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { | |||
| 85 | switch (nfc_file.GetSize()) { | 82 | switch (nfc_file.GetSize()) { |
| 86 | case AmiiboSize: | 83 | case AmiiboSize: |
| 87 | case AmiiboSizeWithoutPassword: | 84 | case AmiiboSizeWithoutPassword: |
| 88 | nfc_data.resize(AmiiboSize); | 85 | data.resize(AmiiboSize); |
| 89 | if (nfc_file.Read(nfc_data) < AmiiboSizeWithoutPassword) { | 86 | if (nfc_file.Read(data) < AmiiboSizeWithoutPassword) { |
| 90 | return Info::NotAnAmiibo; | 87 | return Info::NotAnAmiibo; |
| 91 | } | 88 | } |
| 92 | break; | 89 | break; |
| 93 | case MifareSize: | 90 | case MifareSize: |
| 94 | nfc_data.resize(MifareSize); | 91 | data.resize(MifareSize); |
| 95 | if (nfc_file.Read(nfc_data) < MifareSize) { | 92 | if (nfc_file.Read(data) < MifareSize) { |
| 96 | return Info::NotAnAmiibo; | 93 | return Info::NotAnAmiibo; |
| 97 | } | 94 | } |
| 98 | break; | 95 | break; |
| @@ -101,7 +98,28 @@ VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(const std::string& filename) { | |||
| 101 | } | 98 | } |
| 102 | 99 | ||
| 103 | file_path = filename; | 100 | file_path = filename; |
| 101 | return LoadAmiibo(data); | ||
| 102 | } | ||
| 103 | |||
| 104 | VirtualAmiibo::Info VirtualAmiibo::LoadAmiibo(std::span<u8> data) { | ||
| 105 | if (state != State::WaitingForAmiibo) { | ||
| 106 | return Info::WrongDeviceState; | ||
| 107 | } | ||
| 108 | |||
| 109 | switch (data.size_bytes()) { | ||
| 110 | case AmiiboSize: | ||
| 111 | case AmiiboSizeWithoutPassword: | ||
| 112 | nfc_data.resize(AmiiboSize); | ||
| 113 | break; | ||
| 114 | case MifareSize: | ||
| 115 | nfc_data.resize(MifareSize); | ||
| 116 | break; | ||
| 117 | default: | ||
| 118 | return Info::NotAnAmiibo; | ||
| 119 | } | ||
| 120 | |||
| 104 | state = State::AmiiboIsOpen; | 121 | state = State::AmiiboIsOpen; |
| 122 | memcpy(nfc_data.data(), data.data(), data.size_bytes()); | ||
| 105 | SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data}); | 123 | SetNfc(identifier, {Common::Input::NfcState::NewAmiibo, nfc_data}); |
| 106 | return Info::Success; | 124 | return Info::Success; |
| 107 | } | 125 | } |
diff --git a/src/input_common/drivers/virtual_amiibo.h b/src/input_common/drivers/virtual_amiibo.h index 488d00b31..34e97cd91 100644 --- a/src/input_common/drivers/virtual_amiibo.h +++ b/src/input_common/drivers/virtual_amiibo.h | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #pragma once | 4 | #pragma once |
| 5 | 5 | ||
| 6 | #include <array> | 6 | #include <array> |
| 7 | #include <span> | ||
| 7 | #include <string> | 8 | #include <string> |
| 8 | #include <vector> | 9 | #include <vector> |
| 9 | 10 | ||
| @@ -47,6 +48,7 @@ public: | |||
| 47 | State GetCurrentState() const; | 48 | State GetCurrentState() const; |
| 48 | 49 | ||
| 49 | Info LoadAmiibo(const std::string& amiibo_file); | 50 | Info LoadAmiibo(const std::string& amiibo_file); |
| 51 | Info LoadAmiibo(std::span<u8> data); | ||
| 50 | Info ReloadAmiibo(); | 52 | Info ReloadAmiibo(); |
| 51 | Info CloseAmiibo(); | 53 | Info CloseAmiibo(); |
| 52 | 54 | ||
diff --git a/src/input_common/drivers/virtual_gamepad.cpp b/src/input_common/drivers/virtual_gamepad.cpp index 7db945aa6..c15cbbe58 100644 --- a/src/input_common/drivers/virtual_gamepad.cpp +++ b/src/input_common/drivers/virtual_gamepad.cpp | |||
| @@ -39,6 +39,22 @@ void VirtualGamepad::SetStickPosition(std::size_t player_index, VirtualStick axi | |||
| 39 | SetStickPosition(player_index, static_cast<int>(axis_id), x_value, y_value); | 39 | SetStickPosition(player_index, static_cast<int>(axis_id), x_value, y_value); |
| 40 | } | 40 | } |
| 41 | 41 | ||
| 42 | void VirtualGamepad::SetMotionState(std::size_t player_index, u64 delta_timestamp, float gyro_x, | ||
| 43 | float gyro_y, float gyro_z, float accel_x, float accel_y, | ||
| 44 | float accel_z) { | ||
| 45 | const auto identifier = GetIdentifier(player_index); | ||
| 46 | const BasicMotion motion_data{ | ||
| 47 | .gyro_x = gyro_x, | ||
| 48 | .gyro_y = gyro_y, | ||
| 49 | .gyro_z = gyro_z, | ||
| 50 | .accel_x = accel_x, | ||
| 51 | .accel_y = accel_y, | ||
| 52 | .accel_z = accel_z, | ||
| 53 | .delta_timestamp = delta_timestamp, | ||
| 54 | }; | ||
| 55 | SetMotion(identifier, 0, motion_data); | ||
| 56 | } | ||
| 57 | |||
| 42 | void VirtualGamepad::ResetControllers() { | 58 | void VirtualGamepad::ResetControllers() { |
| 43 | for (std::size_t i = 0; i < PlayerIndexCount; i++) { | 59 | for (std::size_t i = 0; i < PlayerIndexCount; i++) { |
| 44 | SetStickPosition(i, VirtualStick::Left, 0.0f, 0.0f); | 60 | SetStickPosition(i, VirtualStick::Left, 0.0f, 0.0f); |
diff --git a/src/input_common/drivers/virtual_gamepad.h b/src/input_common/drivers/virtual_gamepad.h index 3df91cc6f..dfbc45a28 100644 --- a/src/input_common/drivers/virtual_gamepad.h +++ b/src/input_common/drivers/virtual_gamepad.h | |||
| @@ -52,7 +52,7 @@ public: | |||
| 52 | void SetButtonState(std::size_t player_index, VirtualButton button_id, bool value); | 52 | void SetButtonState(std::size_t player_index, VirtualButton button_id, bool value); |
| 53 | 53 | ||
| 54 | /** | 54 | /** |
| 55 | * Sets the status of all buttons bound with the key to released | 55 | * Sets the status of a stick to a specific player index |
| 56 | * @param player_index the player number that will take this action | 56 | * @param player_index the player number that will take this action |
| 57 | * @param axis_id the id of the axis to move | 57 | * @param axis_id the id of the axis to move |
| 58 | * @param x_value the position of the stick in the x axis | 58 | * @param x_value the position of the stick in the x axis |
| @@ -62,6 +62,16 @@ public: | |||
| 62 | void SetStickPosition(std::size_t player_index, VirtualStick axis_id, float x_value, | 62 | void SetStickPosition(std::size_t player_index, VirtualStick axis_id, float x_value, |
| 63 | float y_value); | 63 | float y_value); |
| 64 | 64 | ||
| 65 | /** | ||
| 66 | * Sets the status of the motion sensor to a specific player index | ||
| 67 | * @param player_index the player number that will take this action | ||
| 68 | * @param delta_timestamp time passed since last reading | ||
| 69 | * @param gyro_x,gyro_y,gyro_z the gyro sensor readings | ||
| 70 | * @param accel_x,accel_y,accel_z the acelerometer reading | ||
| 71 | */ | ||
| 72 | void SetMotionState(std::size_t player_index, u64 delta_timestamp, float gyro_x, float gyro_y, | ||
| 73 | float gyro_z, float accel_x, float accel_y, float accel_z); | ||
| 74 | |||
| 65 | /// Restores all inputs into the neutral position | 75 | /// Restores all inputs into the neutral position |
| 66 | void ResetControllers(); | 76 | void ResetControllers(); |
| 67 | 77 | ||