support crc auto-handling in ...transceive_bytes_timed
This commit is contained in:
parent
8d70321d80
commit
7f2b300dde
2 changed files with 14 additions and 11 deletions
|
@ -1195,15 +1195,14 @@ pn53x_initiator_transceive_bits_timed (nfc_device_t * pnd, const byte_t * pbtTx,
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
uint8_t sz;
|
uint8_t sz;
|
||||||
|
|
||||||
// We can not just send bytes without parity while the PN53X expects we handled them
|
// Sorry, no arbitrary parity bits support for now
|
||||||
if (!pnd->bPar)
|
if (!pnd->bPar)
|
||||||
return false;
|
return false;
|
||||||
// Sorry, no easy framing support
|
// Sorry, no easy framing support
|
||||||
// TODO: to be changed once we'll provide easy framing support from libnfc itself...
|
|
||||||
if (pnd->bEasyFraming)
|
if (pnd->bEasyFraming)
|
||||||
return false;
|
return false;
|
||||||
// Sorry, no CRC support
|
// Sorry, no CRC support
|
||||||
// TODO: to be changed once we'll provide easy CRC support from libnfc itself...
|
// TODO but it probably doesn't make sense for (szTxBits % 8 != 0) ...
|
||||||
if (pnd->bCrc)
|
if (pnd->bCrc)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -1293,10 +1292,6 @@ pn53x_initiator_transceive_bytes_timed (nfc_device_t * pnd, const byte_t * pbtTx
|
||||||
// TODO: to be changed once we'll provide easy framing support from libnfc itself...
|
// TODO: to be changed once we'll provide easy framing support from libnfc itself...
|
||||||
if (pnd->bEasyFraming)
|
if (pnd->bEasyFraming)
|
||||||
return false;
|
return false;
|
||||||
// Sorry, no CRC support
|
|
||||||
// TODO: to be changed once we'll provide easy CRC support from libnfc itself...
|
|
||||||
if (pnd->bCrc)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
__pn53x_init_timer(pnd);
|
__pn53x_init_timer(pnd);
|
||||||
|
|
||||||
|
@ -1321,8 +1316,17 @@ pn53x_initiator_transceive_bytes_timed (nfc_device_t * pnd, const byte_t * pbtTx
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recv corrected timer value
|
// Recv corrected timer value
|
||||||
*cycles = __pn53x_get_timer (pnd, pbtTx[szTx -1]);
|
if (pnd->bCrc) {
|
||||||
|
// We've to compute CRC ourselves to know last byte actually sent
|
||||||
|
uint8_t * pbtTxRaw;
|
||||||
|
pbtTxRaw = (uint8_t *) malloc(szTx+2);
|
||||||
|
memcpy (pbtTxRaw, pbtTx, szTx);
|
||||||
|
iso14443a_crc_append (pbtTxRaw, szTx);
|
||||||
|
*cycles = __pn53x_get_timer (pnd, pbtTxRaw[szTx +1]);
|
||||||
|
free(pbtTxRaw);
|
||||||
|
} else {
|
||||||
|
*cycles = __pn53x_get_timer (pnd, pbtTx[szTx -1]);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -541,11 +541,10 @@ nfc_initiator_transceive_bits (nfc_device_t * pnd, const byte_t * pbtTx, const s
|
||||||
*
|
*
|
||||||
* This function is similar to nfc_initiator_transceive_bytes() with the following differences:
|
* This function is similar to nfc_initiator_transceive_bytes() with the following differences:
|
||||||
* - A precise cycles counter will indicate the number of cycles between emission & reception of frames.
|
* - A precise cycles counter will indicate the number of cycles between emission & reception of frames.
|
||||||
* - It only supports mode with \a NDO_EASY_FRAMING option disabled and CRC must be handled manually.
|
* - It only supports mode with \a NDO_EASY_FRAMING option disabled.
|
||||||
* - Overall communication with the host is heavier and slower.
|
* - Overall communication with the host is heavier and slower.
|
||||||
*
|
*
|
||||||
* @warning The configuration option \a NDO_EASY_FRAMING must be set to \c false.
|
* @warning The configuration option \a NDO_EASY_FRAMING must be set to \c false.
|
||||||
* @warning The configuration option \a NDO_HANDLE_CRC must be set to \c false.
|
|
||||||
* @warning The configuration option \a NDO_HANDLE_PARITY must be set to \c true (the default value).
|
* @warning The configuration option \a NDO_HANDLE_PARITY must be set to \c true (the default value).
|
||||||
*/
|
*/
|
||||||
bool
|
bool
|
||||||
|
|
Loading…
Add table
Reference in a new issue