Merge pull request #10265 from german77/amiibo-lag
input_common: Make amiibo scanning less demanding
This commit is contained in:
		| @@ -394,6 +394,7 @@ enum class DriverResult { | ||||
|     InvalidHandle, | ||||
|     NotSupported, | ||||
|     Disabled, | ||||
|     Delayed, | ||||
|     Unknown, | ||||
| }; | ||||
|  | ||||
|   | ||||
| @@ -72,6 +72,11 @@ DriverResult NfcProtocol::StartNFCPollingMode() { | ||||
| } | ||||
|  | ||||
| DriverResult NfcProtocol::ScanAmiibo(std::vector<u8>& data) { | ||||
|     if (update_counter++ < AMIIBO_UPDATE_DELAY) { | ||||
|         return DriverResult::Delayed; | ||||
|     } | ||||
|     update_counter = 0; | ||||
|  | ||||
|     LOG_DEBUG(Input, "Start NFC pooling Mode"); | ||||
|     ScopedSetBlocking sb(this); | ||||
|     DriverResult result{DriverResult::Success}; | ||||
| @@ -87,7 +92,7 @@ DriverResult NfcProtocol::ScanAmiibo(std::vector<u8>& data) { | ||||
|         result = WaitUntilNfcIsReady(); | ||||
|     } | ||||
|     if (result == DriverResult::Success) { | ||||
|         result = StartPolling(tag_data); | ||||
|         result = StartPolling(tag_data, 7); | ||||
|     } | ||||
|     if (result == DriverResult::Success) { | ||||
|         result = GetAmiiboData(data); | ||||
| @@ -129,9 +134,8 @@ DriverResult NfcProtocol::WaitUntilNfcIsReady() { | ||||
|     return DriverResult::Success; | ||||
| } | ||||
|  | ||||
| DriverResult NfcProtocol::StartPolling(TagFoundData& data) { | ||||
| DriverResult NfcProtocol::StartPolling(TagFoundData& data, std::size_t timeout_limit) { | ||||
|     LOG_DEBUG(Input, "Start Polling for tag"); | ||||
|     constexpr std::size_t timeout_limit = 7; | ||||
|     MCUCommandResponse output{}; | ||||
|     std::size_t tries = 0; | ||||
|  | ||||
|   | ||||
| @@ -32,6 +32,9 @@ public: | ||||
|     bool IsEnabled() const; | ||||
|  | ||||
| private: | ||||
|     // Number of times the function will be delayed until it outputs valid data | ||||
|     static constexpr std::size_t AMIIBO_UPDATE_DELAY = 15; | ||||
|  | ||||
|     struct TagFoundData { | ||||
|         u8 type; | ||||
|         std::vector<u8> uuid; | ||||
| @@ -39,7 +42,7 @@ private: | ||||
|  | ||||
|     DriverResult WaitUntilNfcIsReady(); | ||||
|  | ||||
|     DriverResult StartPolling(TagFoundData& data); | ||||
|     DriverResult StartPolling(TagFoundData& data, std::size_t timeout_limit = 1); | ||||
|  | ||||
|     DriverResult ReadTag(const TagFoundData& data); | ||||
|  | ||||
| @@ -56,6 +59,7 @@ private: | ||||
|     NFCReadBlockCommand GetReadBlockCommand(NFCPages pages) const; | ||||
|  | ||||
|     bool is_enabled{}; | ||||
|     std::size_t update_counter{}; | ||||
| }; | ||||
|  | ||||
| } // namespace InputCommon::Joycon | ||||
|   | ||||
		Reference in New Issue
	
	Block a user