mirror of
https://git.suyu.dev/suyu/suyu
synced 2024-10-30 11:57:51 +00:00
input_common: Make amiibo scanning less demanding
This commit is contained in:
parent
9c739f1506
commit
ac531aa15f
3 changed files with 13 additions and 4 deletions
|
@ -394,6 +394,7 @@ enum class DriverResult {
|
||||||
InvalidHandle,
|
InvalidHandle,
|
||||||
NotSupported,
|
NotSupported,
|
||||||
Disabled,
|
Disabled,
|
||||||
|
Delayed,
|
||||||
Unknown,
|
Unknown,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -72,6 +72,11 @@ DriverResult NfcProtocol::StartNFCPollingMode() {
|
||||||
}
|
}
|
||||||
|
|
||||||
DriverResult NfcProtocol::ScanAmiibo(std::vector<u8>& data) {
|
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");
|
LOG_DEBUG(Input, "Start NFC pooling Mode");
|
||||||
ScopedSetBlocking sb(this);
|
ScopedSetBlocking sb(this);
|
||||||
DriverResult result{DriverResult::Success};
|
DriverResult result{DriverResult::Success};
|
||||||
|
@ -87,7 +92,7 @@ DriverResult NfcProtocol::ScanAmiibo(std::vector<u8>& data) {
|
||||||
result = WaitUntilNfcIsReady();
|
result = WaitUntilNfcIsReady();
|
||||||
}
|
}
|
||||||
if (result == DriverResult::Success) {
|
if (result == DriverResult::Success) {
|
||||||
result = StartPolling(tag_data);
|
result = StartPolling(tag_data, 7);
|
||||||
}
|
}
|
||||||
if (result == DriverResult::Success) {
|
if (result == DriverResult::Success) {
|
||||||
result = GetAmiiboData(data);
|
result = GetAmiiboData(data);
|
||||||
|
@ -129,9 +134,8 @@ DriverResult NfcProtocol::WaitUntilNfcIsReady() {
|
||||||
return DriverResult::Success;
|
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");
|
LOG_DEBUG(Input, "Start Polling for tag");
|
||||||
constexpr std::size_t timeout_limit = 7;
|
|
||||||
MCUCommandResponse output{};
|
MCUCommandResponse output{};
|
||||||
std::size_t tries = 0;
|
std::size_t tries = 0;
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,9 @@ public:
|
||||||
bool IsEnabled() const;
|
bool IsEnabled() const;
|
||||||
|
|
||||||
private:
|
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 {
|
struct TagFoundData {
|
||||||
u8 type;
|
u8 type;
|
||||||
std::vector<u8> uuid;
|
std::vector<u8> uuid;
|
||||||
|
@ -39,7 +42,7 @@ private:
|
||||||
|
|
||||||
DriverResult WaitUntilNfcIsReady();
|
DriverResult WaitUntilNfcIsReady();
|
||||||
|
|
||||||
DriverResult StartPolling(TagFoundData& data);
|
DriverResult StartPolling(TagFoundData& data, std::size_t timeout_limit = 1);
|
||||||
|
|
||||||
DriverResult ReadTag(const TagFoundData& data);
|
DriverResult ReadTag(const TagFoundData& data);
|
||||||
|
|
||||||
|
@ -56,6 +59,7 @@ private:
|
||||||
NFCReadBlockCommand GetReadBlockCommand(NFCPages pages) const;
|
NFCReadBlockCommand GetReadBlockCommand(NFCPages pages) const;
|
||||||
|
|
||||||
bool is_enabled{};
|
bool is_enabled{};
|
||||||
|
std::size_t update_counter{};
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace InputCommon::Joycon
|
} // namespace InputCommon::Joycon
|
||||||
|
|
Loading…
Reference in a new issue