Patch by jonor, fixes so uart_receive does not block when data is continuosly received. See http://www.proxmark.org/forum/viewtopic.php?id=1735

This commit is contained in:
martin.holst@gmail.com 2013-09-01 18:46:55 +00:00
commit babfcaa0f3

View file

@ -266,7 +266,7 @@ bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen) {
if (res < 0) { if (res < 0) {
return false; return false;
} }
// Read time-out // Read time-out
if (res == 0) { if (res == 0) {
if (*pszRxLen == 0) { if (*pszRxLen == 0) {
@ -277,21 +277,24 @@ bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t* pszRxLen) {
return true; return true;
} }
} }
// Retrieve the count of the incoming bytes // Retrieve the count of the incoming bytes
res = ioctl(((serial_port_unix*)sp)->fd, FIONREAD, &byteCount); res = ioctl(((serial_port_unix*)sp)->fd, FIONREAD, &byteCount);
if (res < 0) return false; if (res < 0) return false;
// There is something available, read the data // There is something available, read the data
res = read(((serial_port_unix*)sp)->fd,pbtRx+(*pszRxLen),byteCount); res = read(((serial_port_unix*)sp)->fd,pbtRx+(*pszRxLen),byteCount);
// Stop if the OS has some troubles reading the data // Stop if the OS has some troubles reading the data
if (res <= 0) return false; if (res <= 0) return false;
*pszRxLen += res; *pszRxLen += res;
if(res==byteCount)
return true;
} while (byteCount); } while (byteCount);
return true; return true;
} }