Fix polling on ARYGON devices
This commit is contained in:
parent
dd8ec29bb4
commit
432eff0f7d
1 changed files with 7 additions and 3 deletions
|
|
@ -203,15 +203,17 @@ arygon_disconnect (nfc_device_t * pnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
#define TX_BUFFER_LENGTH (300)
|
#define TX_BUFFER_LENGTH (300)
|
||||||
#define RX_BUFFER_LENGTH (PN53x_EXTENDED_FRAME_MAX_LEN + PN53x_EXTENDED_FRAME_OVERHEAD)
|
#define RX_BUFFER_LENGTH (PN53x_EXTENDED_FRAME_MAX_LEN + PN53x_EXTENDED_FRAME_OVERHEAD + sizeof(pn53x_ack_frame))
|
||||||
bool
|
bool
|
||||||
arygon_transceive (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx, size_t * pszRx)
|
arygon_transceive (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx, byte_t * pbtRx, size_t * pszRx)
|
||||||
{
|
{
|
||||||
byte_t abtTxBuf[TX_BUFFER_LENGTH] = { DEV_ARYGON_PROTOCOL_TAMA, 0x00, 0x00, 0xff }; // Every packet must start with "0x32 0x00 0x00 0xff"
|
byte_t abtTxBuf[TX_BUFFER_LENGTH] = { DEV_ARYGON_PROTOCOL_TAMA, 0x00, 0x00, 0xff }; // Every packet must start with "0x32 0x00 0x00 0xff"
|
||||||
byte_t abtRxBuf[RX_BUFFER_LENGTH];
|
byte_t abtRxBuf[RX_BUFFER_LENGTH];
|
||||||
size_t szRxBufLen = MIN(RX_BUFFER_LENGTH, *pszRx);
|
size_t szRxBufLen;
|
||||||
|
size_t szReplyMaxLen = MIN(RX_BUFFER_LENGTH, *pszRx);
|
||||||
size_t szPos;
|
size_t szPos;
|
||||||
int res;
|
int res;
|
||||||
|
|
||||||
// Packet length = data length (len) + checksum (1) + end of stream marker (1)
|
// Packet length = data length (len) + checksum (1) + end of stream marker (1)
|
||||||
abtTxBuf[4] = szTx;
|
abtTxBuf[4] = szTx;
|
||||||
// Packet length checksum
|
// Packet length checksum
|
||||||
|
|
@ -240,6 +242,7 @@ arygon_transceive (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx,
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
memset (abtRxBuf, 0x00, sizeof (abtRxBuf));
|
memset (abtRxBuf, 0x00, sizeof (abtRxBuf));
|
||||||
#endif
|
#endif
|
||||||
|
szRxBufLen = szReplyMaxLen;
|
||||||
res = uart_receive ((serial_port) pnd->nds, abtRxBuf, &szRxBufLen);
|
res = uart_receive ((serial_port) pnd->nds, abtRxBuf, &szRxBufLen);
|
||||||
if (res != 0) {
|
if (res != 0) {
|
||||||
ERR ("%s", "Unable to receive data. (RX)");
|
ERR ("%s", "Unable to receive data. (RX)");
|
||||||
|
|
@ -256,11 +259,12 @@ arygon_transceive (nfc_device_t * pnd, const byte_t * pbtTx, const size_t szTx,
|
||||||
|
|
||||||
szRxBufLen -= sizeof (pn53x_ack_frame);
|
szRxBufLen -= sizeof (pn53x_ack_frame);
|
||||||
memmove (abtRxBuf, abtRxBuf + sizeof (pn53x_ack_frame), szRxBufLen);
|
memmove (abtRxBuf, abtRxBuf + sizeof (pn53x_ack_frame), szRxBufLen);
|
||||||
|
szReplyMaxLen -= sizeof (pn53x_ack_frame);
|
||||||
|
|
||||||
if (szRxBufLen == 0) {
|
if (szRxBufLen == 0) {
|
||||||
szRxBufLen = RX_BUFFER_LENGTH;
|
|
||||||
do {
|
do {
|
||||||
delay_ms (10);
|
delay_ms (10);
|
||||||
|
szRxBufLen = szReplyMaxLen;
|
||||||
res = uart_receive ((serial_port) pnd->nds, abtRxBuf, &szRxBufLen);
|
res = uart_receive ((serial_port) pnd->nds, abtRxBuf, &szRxBufLen);
|
||||||
} while (res != 0);
|
} while (res != 0);
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue