mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2024-11-10 17:49:32 +08:00
CHG: adjustments to the USB reading part.
This commit is contained in:
parent
a4b4a1a9a2
commit
b4a03581c2
4 changed files with 56 additions and 21 deletions
|
@ -1738,7 +1738,7 @@ typedef struct _AT91S_UDP {
|
||||||
#define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable
|
#define AT91C_UDP_EPEDS (0x1 << 15) // (UDP) Endpoint Enable Disable
|
||||||
#define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO
|
#define AT91C_UDP_RXBYTECNT (0x7FF << 16) // (UDP) Number Of Bytes Available in the FIFO
|
||||||
// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register --------
|
// -------- UDP_TXVC : (UDP Offset: 0x74) Transceiver Control Register --------
|
||||||
#define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP)
|
#define AT91C_UDP_TXVDIS (0x1 << 8) // (UDP) Transceiver Disable
|
||||||
|
|
||||||
// *****************************************************************************
|
// *****************************************************************************
|
||||||
// REGISTER ADDRESS DEFINITION FOR AT91SAM7S512
|
// REGISTER ADDRESS DEFINITION FOR AT91SAM7S512
|
||||||
|
|
|
@ -81,7 +81,10 @@
|
||||||
#define LED_D_INV() INVBIT(GPIO_LED_D)
|
#define LED_D_INV() INVBIT(GPIO_LED_D)
|
||||||
#define RELAY_ON() HIGH(GPIO_RELAY)
|
#define RELAY_ON() HIGH(GPIO_RELAY)
|
||||||
#define RELAY_OFF() LOW(GPIO_RELAY)
|
#define RELAY_OFF() LOW(GPIO_RELAY)
|
||||||
#define BUTTON_PRESS() !(AT91C_BASE_PIOA->PIO_PDSR & GPIO_BUTTON)
|
#define BUTTON_PRESS() !((AT91C_BASE_PIOA->PIO_PDSR & GPIO_BUTTON) == GPIO_BUTTON)
|
||||||
|
|
||||||
|
//NVDD goes LOW when USB is attached.
|
||||||
|
#define USB_ATTACHED() !((AT91C_BASE_PIOA->PIO_PDSR & GPIO_NVDD_ON) == GPIO_NVDD_ON)
|
||||||
|
|
||||||
#define VERSION_INFORMATION_MAGIC 0x56334d50
|
#define VERSION_INFORMATION_MAGIC 0x56334d50
|
||||||
struct version_information {
|
struct version_information {
|
||||||
|
|
|
@ -202,6 +202,7 @@ typedef struct{
|
||||||
|
|
||||||
#define CMD_MIFARE_CHKKEYS 0x0623
|
#define CMD_MIFARE_CHKKEYS 0x0623
|
||||||
#define CMD_MIFARE_SETMOD 0x0624
|
#define CMD_MIFARE_SETMOD 0x0624
|
||||||
|
#define CMD_MIFARE_CHKKEYS_FAST 0x0625
|
||||||
|
|
||||||
#define CMD_MIFARE_SNIFFER 0x0630
|
#define CMD_MIFARE_SNIFFER 0x0630
|
||||||
//ultralightC
|
//ultralightC
|
||||||
|
|
|
@ -61,6 +61,9 @@ serial_port uart_open(const char* pcPortName) {
|
||||||
char acPortName[255];
|
char acPortName[255];
|
||||||
serial_port_windows* sp = malloc(sizeof(serial_port_windows));
|
serial_port_windows* sp = malloc(sizeof(serial_port_windows));
|
||||||
|
|
||||||
|
if (sp == 0)
|
||||||
|
return INVALID_SERIAL_PORT;
|
||||||
|
|
||||||
// Copy the input "com?" to "\\.\COM?" format
|
// Copy the input "com?" to "\\.\COM?" format
|
||||||
sprintf(acPortName,"\\\\.\\%s", pcPortName);
|
sprintf(acPortName,"\\\\.\\%s", pcPortName);
|
||||||
upcase(acPortName);
|
upcase(acPortName);
|
||||||
|
@ -86,6 +89,7 @@ serial_port uart_open(const char* pcPortName) {
|
||||||
return INVALID_SERIAL_PORT;
|
return INVALID_SERIAL_PORT;
|
||||||
}
|
}
|
||||||
// all zero's configure: no timeout for read/write used.
|
// all zero's configure: no timeout for read/write used.
|
||||||
|
// took settings from libnfc/buses/uart.c
|
||||||
sp->ct.ReadIntervalTimeout = 0;//1;
|
sp->ct.ReadIntervalTimeout = 0;//1;
|
||||||
sp->ct.ReadTotalTimeoutMultiplier = 0;//1;
|
sp->ct.ReadTotalTimeoutMultiplier = 0;//1;
|
||||||
sp->ct.ReadTotalTimeoutConstant = 30;
|
sp->ct.ReadTotalTimeoutConstant = 30;
|
||||||
|
@ -107,38 +111,65 @@ serial_port uart_open(const char* pcPortName) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void uart_close(const serial_port sp) {
|
void uart_close(const serial_port sp) {
|
||||||
if (!sp) return;
|
if (!sp) return;
|
||||||
if (sp == INVALID_SERIAL_PORT) return;
|
if (sp == INVALID_SERIAL_PORT) return;
|
||||||
if (sp == CLAIMED_SERIAL_PORT) return;
|
if (sp == CLAIMED_SERIAL_PORT) return;
|
||||||
if (((serial_port_windows*)sp)->hPort != NULL )
|
if (((serial_port_windows*)sp)->hPort != INVALID_HANDLE_VALUE )
|
||||||
CloseHandle(((serial_port_windows*)sp)->hPort);
|
CloseHandle(((serial_port_windows*)sp)->hPort);
|
||||||
free(sp);
|
free(sp);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t pszMaxRxLen, size_t* pszRxLen) {
|
bool uart_receive(const serial_port sp, byte_t* pbtRx, size_t pszMaxRxLen, size_t* pszRxLen) {
|
||||||
ReadFile(((serial_port_windows*)sp)->hPort, pbtRx, pszMaxRxLen, (LPDWORD)pszRxLen, NULL);
|
//ReadFile(((serial_port_windows*)sp)->hPort, pbtRx, pszMaxRxLen, (LPDWORD)pszRxLen, NULL);
|
||||||
return (*pszRxLen != 0);
|
//return (*pszRxLen != 0);
|
||||||
|
|
||||||
|
DWORD dwBytesToGet = (DWORD)pszMaxRxLen;
|
||||||
|
DWORD dwBytesReceived = 0;
|
||||||
|
DWORD dwTotalBytesReceived = 0;
|
||||||
|
BOOL res;
|
||||||
|
|
||||||
|
do {
|
||||||
|
res = ReadFile(((serial_port_windows *) sp)->hPort, pbtRx + dwTotalBytesReceived, dwBytesToGet, &dwBytesReceived, NULL);
|
||||||
|
|
||||||
|
dwTotalBytesReceived += dwBytesReceived;
|
||||||
|
|
||||||
|
if (!res)
|
||||||
|
return false;
|
||||||
|
else if (dwBytesReceived == 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (((DWORD)pszMaxRxLen) > dwTotalBytesReceived)
|
||||||
|
dwBytesToGet -= dwBytesReceived;
|
||||||
|
|
||||||
|
} while (((DWORD)pszMaxRxLen) > dwTotalBytesReceived);
|
||||||
|
|
||||||
|
return (dwTotalBytesReceived == (DWORD) pszMaxRxLen);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool uart_send(const serial_port sp, const byte_t* pbtTx, const size_t szTxLen) {
|
bool uart_send(const serial_port sp, const byte_t* pbtTx, const size_t szTxLen) {
|
||||||
DWORD dwTxLen = 0;
|
DWORD dwTxLen = 0;
|
||||||
return WriteFile(((serial_port_windows*)sp)->hPort, pbtTx, szTxLen, &dwTxLen, NULL);
|
if ( !WriteFile(((serial_port_windows*)sp)->hPort, pbtTx, szTxLen, &dwTxLen, NULL) ) {
|
||||||
return (dwTxLen != 0);
|
return false;
|
||||||
|
}
|
||||||
|
return (dwTxLen != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool uart_set_speed(serial_port sp, const uint32_t uiPortSpeed) {
|
bool uart_set_speed(serial_port sp, const uint32_t uiPortSpeed) {
|
||||||
serial_port_windows* spw;
|
serial_port_windows* spw;
|
||||||
spw = (serial_port_windows*)sp;
|
spw = (serial_port_windows*)sp;
|
||||||
spw->dcb.BaudRate = uiPortSpeed;
|
spw->dcb.BaudRate = uiPortSpeed;
|
||||||
return SetCommState(spw->hPort, &spw->dcb);
|
bool result = SetCommState(spw->hPort, &spw->dcb);
|
||||||
|
|
||||||
|
PurgeComm(spw->hPort, PURGE_RXABORT | PURGE_RXCLEAR);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t uart_get_speed(const serial_port sp) {
|
uint32_t uart_get_speed(const serial_port sp) {
|
||||||
const serial_port_windows* spw = (serial_port_windows*)sp;
|
const serial_port_windows* spw = (serial_port_windows*)sp;
|
||||||
if (!GetCommState(spw->hPort, (serial_port)&spw->dcb)) {
|
if (!GetCommState(spw->hPort, (serial_port) & spw->dcb))
|
||||||
return spw->dcb.BaudRate;
|
return spw->dcb.BaudRate;
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in a new issue