Also detect error frames in pn532_uart (tested) and arygon drivers (not tested).
This commit is contained in:
parent
dadaee4cc0
commit
fd337dd0cc
2 changed files with 21 additions and 13 deletions
|
@ -237,11 +237,6 @@ bool arygon_transceive(nfc_device_t* pnd, const byte_t* pbtTx, const size_t szTx
|
||||||
PRINT_HEX("RX", abtRxBuf,szRxBufLen);
|
PRINT_HEX("RX", abtRxBuf,szRxBufLen);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// When the answer should be ignored, just return a successful result
|
|
||||||
if(pbtRx == NULL || pszRxLen == NULL) return true;
|
|
||||||
|
|
||||||
// Only succeed when the result is at least 00 00 FF xx Fx Dx xx .. .. .. xx 00 (x = variable)
|
|
||||||
if(szRxBufLen < 9) return false;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
PRINT_HEX("TX", ack_frame, 6);
|
PRINT_HEX("TX", ack_frame, 6);
|
||||||
|
@ -251,6 +246,15 @@ bool arygon_transceive(nfc_device_t* pnd, const byte_t* pbtTx, const size_t szTx
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pn53x_transceive_check_error_frame_callback(pnd, abtRxBuf, szRxBufLen))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// When the answer should be ignored, just return a successful result
|
||||||
|
if(pbtRx == NULL || pszRxLen == NULL) return true;
|
||||||
|
|
||||||
|
// Only succeed when the result is at least 00 00 FF xx Fx Dx xx .. .. .. xx 00 (x = variable)
|
||||||
|
if(szRxBufLen < 9) return false;
|
||||||
|
|
||||||
// Remove the preceding and appending bytes 00 00 ff 00 ff 00 00 00 FF xx Fx .. .. .. xx 00 (x = variable)
|
// Remove the preceding and appending bytes 00 00 ff 00 ff 00 00 00 FF xx Fx .. .. .. xx 00 (x = variable)
|
||||||
*pszRxLen = szRxBufLen - 9;
|
*pszRxLen = szRxBufLen - 9;
|
||||||
memcpy(pbtRx, abtRxBuf+7, *pszRxLen);
|
memcpy(pbtRx, abtRxBuf+7, *pszRxLen);
|
||||||
|
|
|
@ -237,14 +237,6 @@ bool pn532_uart_transceive(nfc_device_t* pnd, const byte_t* pbtTx, const size_t
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// When the answer should be ignored, just return a successful result
|
|
||||||
if(pbtRx == NULL || pszRxLen == NULL) return true;
|
|
||||||
|
|
||||||
// Only succeed when the result is at least 00 00 FF xx Fx Dx xx .. .. .. xx 00 (x = variable)
|
|
||||||
if(szRxBufLen < 9) {
|
|
||||||
pnd->iLastError = DEINVAL;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
PRINT_HEX("TX", ack_frame,6);
|
PRINT_HEX("TX", ack_frame,6);
|
||||||
|
@ -256,6 +248,18 @@ bool pn532_uart_transceive(nfc_device_t* pnd, const byte_t* pbtTx, const size_t
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!pn53x_transceive_check_error_frame_callback (pnd, abtRxBuf, szRxBufLen))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// When the answer should be ignored, just return a successful result
|
||||||
|
if(pbtRx == NULL || pszRxLen == NULL) return true;
|
||||||
|
|
||||||
|
// Only succeed when the result is at least 00 00 FF xx Fx Dx xx .. .. .. xx 00 (x = variable)
|
||||||
|
if(szRxBufLen < 9) {
|
||||||
|
pnd->iLastError = DEINVAL;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Remove the preceding and appending bytes 00 00 ff 00 ff 00 00 00 FF xx Fx .. .. .. xx 00 (x = variable)
|
// Remove the preceding and appending bytes 00 00 ff 00 ff 00 00 00 FF xx Fx .. .. .. xx 00 (x = variable)
|
||||||
*pszRxLen = szRxBufLen - 9;
|
*pszRxLen = szRxBufLen - 9;
|
||||||
memcpy(pbtRx, abtRxBuf+7, *pszRxLen);
|
memcpy(pbtRx, abtRxBuf+7, *pszRxLen);
|
||||||
|
|
Loading…
Add table
Reference in a new issue