nfc_initiator_target_is_present(): better error handling
This commit is contained in:
parent
05579fde09
commit
d6330a55d0
1 changed files with 11 additions and 11 deletions
|
@ -1736,20 +1736,20 @@ static int pn53x_Diagnose06(struct nfc_device *pnd)
|
||||||
// Send Card Presence command
|
// Send Card Presence command
|
||||||
const uint8_t abtCmd[] = { Diagnose, 0x06 };
|
const uint8_t abtCmd[] = { Diagnose, 0x06 };
|
||||||
uint8_t abtRx[1];
|
uint8_t abtRx[1];
|
||||||
int res = 0;
|
int ret = 0;
|
||||||
|
|
||||||
// Card Presence command can take more time than default one: when a card is
|
// Card Presence command can take more time than default one: when a card is
|
||||||
// removed from the field, the PN53x took few hundred ms more to reply
|
// removed from the field, the PN53x took few hundred ms more to reply
|
||||||
// correctly. (ie. 700 ms should be enough to detect all tested cases)
|
// correctly. (ie. 700 ms should be enough to detect all tested cases)
|
||||||
if ((res = pn53x_transceive(pnd, abtCmd, sizeof(abtCmd), abtRx, sizeof(abtRx), 700)) < 0)
|
if ((ret = pn53x_transceive(pnd, abtCmd, sizeof(abtCmd), abtRx, sizeof(abtRx), 700)) != 1) {
|
||||||
return res;
|
// When it fails with a timeout (0x01) chip error, it means the target is not reacheable anymore
|
||||||
if (res == 1) {
|
if ((ret == NFC_ERFTRANS) && (CHIP_DATA(pnd)->last_status_byte == 0x01)) {
|
||||||
return NFC_SUCCESS;
|
ret = NFC_ETGRELEASED;
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
// Target is not reachable anymore
|
ret = NFC_SUCCESS;
|
||||||
pn53x_current_target_free(pnd);
|
}
|
||||||
return NFC_ETGRELEASED;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -1780,8 +1780,6 @@ pn53x_initiator_target_is_present(struct nfc_device *pnd, const nfc_target *pnt)
|
||||||
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "%s", "target_is_present(): Ping -4A");
|
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "%s", "target_is_present(): Ping -4A");
|
||||||
if ((CHIP_DATA(pnd)->type == PN532) || (CHIP_DATA(pnd)->type == PN533)) {
|
if ((CHIP_DATA(pnd)->type == PN532) || (CHIP_DATA(pnd)->type == PN533)) {
|
||||||
ret = pn53x_Diagnose06(pnd);
|
ret = pn53x_Diagnose06(pnd);
|
||||||
// When pn53x_Diagnose06() fails with a timeout (0x01) chip error, it means the target is not reacheable anymore
|
|
||||||
if ((ret == NFC_ERFTRANS) && (CHIP_DATA(pnd)->last_status_byte == 0x01)) ret = NFC_ETGRELEASED;
|
|
||||||
} else {
|
} else {
|
||||||
ret = NFC_EDEVNOTSUPP;
|
ret = NFC_EDEVNOTSUPP;
|
||||||
}
|
}
|
||||||
|
@ -1871,6 +1869,8 @@ pn53x_initiator_target_is_present(struct nfc_device *pnd, const nfc_target *pnt)
|
||||||
ret = NFC_EDEVNOTSUPP;
|
ret = NFC_EDEVNOTSUPP;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
if (ret == NFC_ETGRELEASED)
|
||||||
|
pn53x_current_target_free(pnd);
|
||||||
return pnd->last_error = ret;
|
return pnd->last_error = ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue