Fixes error libnfc.driver.acr122_usb Invalid RDR_to_PC_DataBlock frame

This commit is contained in:
Samuel Prevost 2020-08-23 13:51:36 +02:00 committed by Romuald Conty
parent 42de50f2b7
commit 72262133f1

View file

@ -612,6 +612,7 @@ read:
uint8_t attempted_response = RDR_to_PC_DataBlock;
size_t len;
int error, status;
if (res == NFC_ETIMEOUT) {
if (DRIVER_DATA(pnd)->abort_flag) {
@ -623,7 +624,7 @@ read:
goto read;
}
}
if (res < 12) {
if (res < 10) {
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "%s", "Invalid RDR_to_PC_DataBlock frame");
// try to interrupt current device state
acr122_usb_ack(pnd);
@ -638,6 +639,17 @@ read:
offset++;
len = abtRxBuf[offset++];
status = abtRxBuf[7];
error = abtRxBuf[8];
if (len == 0 && error == 0xFE) { // ICC_MUTE; XXX check for more errors
// Do not check status; my ACR122U seemingly has status=0 in this case,
// even though the spec says it should have had bmCommandStatus=1
// and bmICCStatus=1.
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_DEBUG, "%s", "Command timed out");
pnd->last_error = NFC_ETIMEOUT;
return pnd->last_error;
}
if (!((len > 1) && (abtRxBuf[10] == 0xd5))) { // In case we didn't get an immediate answer:
if (len != 2) {
log_put(LOG_GROUP, LOG_CATEGORY, NFC_LOG_PRIORITY_ERROR, "%s", "Wrong reply");
@ -666,7 +678,7 @@ read:
goto read; // FIXME May cause some trouble on Touchatag, right ?
}
}
if (res < 12) {
if (res < 10) {
// try to interrupt current device state
acr122_usb_ack(pnd);
pnd->last_error = NFC_EIO;
@ -705,7 +717,7 @@ read:
// Skip CCID remaining bytes
offset += 2; // bSlot and bSeq are not used
offset += 2; // XXX bStatus and bError should maybe checked ?
offset += 2; // bStatus and bError is partially checked
offset += 1; // bRFU should be 0x00
// TFI + PD0 (CC+1)