Fix infinite software polling
This commit is contained in:
parent
ace9fb27b1
commit
8fa83ac70f
1 changed files with 19 additions and 16 deletions
|
@ -1016,24 +1016,27 @@ pn53x_initiator_poll_target (nfc_device_t * pnd,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
pn53x_configure (pnd, NDO_INFINITE_SELECT, true);
|
pn53x_configure (pnd, NDO_INFINITE_SELECT, true);
|
||||||
for (size_t p=0; p<uiPollNr; p++) {
|
// FIXME It does not support DEP targets
|
||||||
for (size_t n=0; n<szModulations; n++) {
|
do {
|
||||||
byte_t *pbtInitiatorData;
|
for (size_t p=0; p<uiPollNr; p++) {
|
||||||
size_t szInitiatorData;
|
for (size_t n=0; n<szModulations; n++) {
|
||||||
prepare_initiator_data (pnmModulations[n], &pbtInitiatorData, &szInitiatorData);
|
byte_t *pbtInitiatorData;
|
||||||
const int timeout_ms = uiPeriod * 150;
|
size_t szInitiatorData;
|
||||||
struct timeval timeout;
|
prepare_initiator_data (pnmModulations[n], &pbtInitiatorData, &szInitiatorData);
|
||||||
timeout.tv_sec = timeout_ms / 1000;
|
const int timeout_ms = uiPeriod * 150;
|
||||||
timeout.tv_usec = (timeout_ms - (timeout.tv_sec * 1000)) * 1000;
|
struct timeval timeout;
|
||||||
|
timeout.tv_sec = timeout_ms / 1000;
|
||||||
if (!pn53x_initiator_select_passive_target_ext (pnd, pnmModulations[n], pbtInitiatorData, szInitiatorData, pnt, &timeout)) {
|
timeout.tv_usec = (timeout_ms - (timeout.tv_sec * 1000)) * 1000;
|
||||||
if (pnd->iLastError != ECOMTIMEOUT)
|
|
||||||
return false;
|
if (!pn53x_initiator_select_passive_target_ext (pnd, pnmModulations[n], pbtInitiatorData, szInitiatorData, pnt, &timeout)) {
|
||||||
} else {
|
if (pnd->iLastError != ECOMTIMEOUT)
|
||||||
return true;
|
return false;
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
} while (uiPollNr==0xff); // uiPollNr==0xff means infinite polling
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue