mirror of
https://github.com/Proxmark/proxmark3.git
synced 2025-08-14 18:47:24 -07:00
Pushed standard AT91 defines into main code
This commit is contained in:
parent
5d32e2bf60
commit
6949aca9fa
16 changed files with 1368 additions and 1521 deletions
|
@ -54,7 +54,7 @@ INCLUDE = -I../include
|
|||
# Also search prerequisites in the common directory (for usb.c), and the fpga directory (for fpga.bit)
|
||||
VPATH = . ../common/ ../fpga/
|
||||
|
||||
INCLUDES = ../include/proxmark3.h ../include/at91sam7s128.h ../include/config_gpio.h ../include/usb_cmd.h $(APP_INCLUDES)
|
||||
INCLUDES = ../include/proxmark3.h ../include/at91sam7s512.h ../include/config_gpio.h ../include/usb_cmd.h $(APP_INCLUDES)
|
||||
|
||||
CFLAGS = -c $(INCLUDE) -Wall -Werror -pedantic -std=gnu99 $(APP_CFLAGS)
|
||||
|
||||
|
|
124
common/usb.c
124
common/usb.c
|
@ -217,58 +217,58 @@ static void UsbSendEp0(const BYTE *data, int len)
|
|||
len -= thisTime;
|
||||
|
||||
for(i = 0; i < thisTime; i++) {
|
||||
UDP_ENDPOINT_FIFO(0) = *data;
|
||||
AT91C_BASE_UDP->UDP_FDR[0] = *data;
|
||||
data++;
|
||||
}
|
||||
|
||||
if(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED) {
|
||||
UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_TX_PACKET_ACKED;
|
||||
while(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED)
|
||||
if(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
|
||||
AT91C_BASE_UDP->UDP_CSR[0] &= ~AT91C_UDP_TXCOMP;
|
||||
while(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_TXCOMP)
|
||||
;
|
||||
}
|
||||
|
||||
UDP_ENDPOINT_CSR(0) |= UDP_CSR_TX_PACKET;
|
||||
AT91C_BASE_UDP->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
|
||||
|
||||
do {
|
||||
if(UDP_ENDPOINT_CSR(0) & UDP_CSR_RX_PACKET_RECEIVED_BANK_0) {
|
||||
if(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_RX_DATA_BK0) {
|
||||
// This means that the host is trying to write to us, so
|
||||
// abandon our write to them.
|
||||
UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_RX_PACKET_RECEIVED_BANK_0;
|
||||
AT91C_BASE_UDP->UDP_CSR[0] &= ~AT91C_UDP_RX_DATA_BK0;
|
||||
return;
|
||||
}
|
||||
} while(!(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED));
|
||||
} while(!(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_TXCOMP));
|
||||
} while(len > 0);
|
||||
|
||||
if(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED) {
|
||||
UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_TX_PACKET_ACKED;
|
||||
while(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED)
|
||||
if(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_TXCOMP) {
|
||||
AT91C_BASE_UDP->UDP_CSR[0] &= ~AT91C_UDP_TXCOMP;
|
||||
while(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_TXCOMP)
|
||||
;
|
||||
}
|
||||
}
|
||||
|
||||
static void UsbSendZeroLength(void)
|
||||
{
|
||||
UDP_ENDPOINT_CSR(0) |= UDP_CSR_TX_PACKET;
|
||||
AT91C_BASE_UDP->UDP_CSR[0] |= AT91C_UDP_TXPKTRDY;
|
||||
|
||||
while(!(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED))
|
||||
while(!(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_TXCOMP))
|
||||
;
|
||||
|
||||
UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_TX_PACKET_ACKED;
|
||||
AT91C_BASE_UDP->UDP_CSR[0] &= ~AT91C_UDP_TXCOMP;
|
||||
|
||||
while(UDP_ENDPOINT_CSR(0) & UDP_CSR_TX_PACKET_ACKED)
|
||||
while(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_TXCOMP)
|
||||
;
|
||||
}
|
||||
|
||||
static void UsbSendStall(void)
|
||||
{
|
||||
UDP_ENDPOINT_CSR(0) |= UDP_CSR_FORCE_STALL;
|
||||
AT91C_BASE_UDP->UDP_CSR[0] |= AT91C_UDP_FORCESTALL;
|
||||
|
||||
while(!(UDP_ENDPOINT_CSR(0) & UDP_CSR_STALL_SENT))
|
||||
while(!(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_STALLSENT))
|
||||
;
|
||||
|
||||
UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_STALL_SENT;
|
||||
AT91C_BASE_UDP->UDP_CSR[0] &= ~AT91C_UDP_STALLSENT;
|
||||
|
||||
while(UDP_ENDPOINT_CSR(0) & UDP_CSR_STALL_SENT)
|
||||
while(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_STALLSENT)
|
||||
;
|
||||
}
|
||||
|
||||
|
@ -278,17 +278,17 @@ static void HandleRxdSetupData(void)
|
|||
UsbSetupData usd;
|
||||
|
||||
for(i = 0; i < sizeof(usd); i++) {
|
||||
((BYTE *)&usd)[i] = UDP_ENDPOINT_FIFO(0);
|
||||
((BYTE *)&usd)[i] = AT91C_BASE_UDP->UDP_FDR[0];
|
||||
}
|
||||
|
||||
if(usd.bmRequestType & 0x80) {
|
||||
UDP_ENDPOINT_CSR(0) |= UDP_CSR_CONTROL_DATA_DIR;
|
||||
while(!(UDP_ENDPOINT_CSR(0) & UDP_CSR_CONTROL_DATA_DIR))
|
||||
AT91C_BASE_UDP->UDP_CSR[0] |= AT91C_UDP_DIR;
|
||||
while(!(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_DIR))
|
||||
;
|
||||
}
|
||||
|
||||
UDP_ENDPOINT_CSR(0) &= ~UDP_CSR_RX_HAVE_READ_SETUP_DATA;
|
||||
while(UDP_ENDPOINT_CSR(0) & UDP_CSR_RX_HAVE_READ_SETUP_DATA)
|
||||
AT91C_BASE_UDP->UDP_CSR[0] &= ~AT91C_UDP_RXSETUP;
|
||||
while(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_RXSETUP)
|
||||
;
|
||||
|
||||
switch(usd.bRequest) {
|
||||
|
@ -312,11 +312,11 @@ static void HandleRxdSetupData(void)
|
|||
|
||||
case USB_REQUEST_SET_ADDRESS:
|
||||
UsbSendZeroLength();
|
||||
UDP_FUNCTION_ADDR = UDP_FUNCTION_ADDR_ENABLED | usd.wValue ;
|
||||
AT91C_BASE_UDP->UDP_FADDR = AT91C_UDP_FEN | usd.wValue ;
|
||||
if(usd.wValue != 0) {
|
||||
UDP_GLOBAL_STATE = UDP_GLOBAL_STATE_ADDRESSED;
|
||||
AT91C_BASE_UDP->UDP_GLBSTATE = AT91C_UDP_FADDEN;
|
||||
} else {
|
||||
UDP_GLOBAL_STATE = 0;
|
||||
AT91C_BASE_UDP->UDP_GLBSTATE = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -334,15 +334,15 @@ static void HandleRxdSetupData(void)
|
|||
case USB_REQUEST_SET_CONFIGURATION:
|
||||
CurrentConfiguration = usd.wValue;
|
||||
if(CurrentConfiguration) {
|
||||
UDP_GLOBAL_STATE = UDP_GLOBAL_STATE_CONFIGURED;
|
||||
UDP_ENDPOINT_CSR(1) = UDP_CSR_ENABLE_EP |
|
||||
UDP_CSR_EPTYPE_INTERRUPT_OUT;
|
||||
UDP_ENDPOINT_CSR(2) = UDP_CSR_ENABLE_EP |
|
||||
UDP_CSR_EPTYPE_INTERRUPT_IN;
|
||||
AT91C_BASE_UDP->UDP_GLBSTATE = AT91C_UDP_CONFG;
|
||||
AT91C_BASE_UDP->UDP_CSR[1] = AT91C_UDP_EPEDS |
|
||||
AT91C_UDP_EPTYPE_INT_OUT;
|
||||
AT91C_BASE_UDP->UDP_CSR[2] = AT91C_UDP_EPEDS |
|
||||
AT91C_UDP_EPTYPE_INT_IN;
|
||||
} else {
|
||||
UDP_GLOBAL_STATE = UDP_GLOBAL_STATE_ADDRESSED;
|
||||
UDP_ENDPOINT_CSR(1) = 0;
|
||||
UDP_ENDPOINT_CSR(2) = 0;
|
||||
AT91C_BASE_UDP->UDP_GLBSTATE = AT91C_UDP_FADDEN;
|
||||
AT91C_BASE_UDP->UDP_CSR[1] = 0;
|
||||
AT91C_BASE_UDP->UDP_CSR[2] = 0;
|
||||
}
|
||||
UsbSendZeroLength();
|
||||
break;
|
||||
|
@ -376,15 +376,15 @@ void UsbSendPacket(BYTE *packet, int len)
|
|||
thisTime = min(len, 8);
|
||||
|
||||
for(i = 0; i < thisTime; i++) {
|
||||
UDP_ENDPOINT_FIFO(2) = packet[i];
|
||||
AT91C_BASE_UDP->UDP_FDR[2] = packet[i];
|
||||
}
|
||||
UDP_ENDPOINT_CSR(2) |= UDP_CSR_TX_PACKET;
|
||||
AT91C_BASE_UDP->UDP_CSR[2] |= AT91C_UDP_TXPKTRDY;
|
||||
|
||||
while(!(UDP_ENDPOINT_CSR(2) & UDP_CSR_TX_PACKET_ACKED))
|
||||
while(!(AT91C_BASE_UDP->UDP_CSR[2] & AT91C_UDP_TXCOMP))
|
||||
;
|
||||
UDP_ENDPOINT_CSR(2) &= ~UDP_CSR_TX_PACKET_ACKED;
|
||||
AT91C_BASE_UDP->UDP_CSR[2] &= ~AT91C_UDP_TXCOMP;
|
||||
|
||||
while(UDP_ENDPOINT_CSR(2) & UDP_CSR_TX_PACKET_ACKED)
|
||||
while(AT91C_BASE_UDP->UDP_CSR[2] & AT91C_UDP_TXCOMP)
|
||||
;
|
||||
|
||||
len -= thisTime;
|
||||
|
@ -396,16 +396,16 @@ static void HandleRxdData(void)
|
|||
{
|
||||
int i, len;
|
||||
|
||||
if(UDP_ENDPOINT_CSR(1) & UDP_CSR_RX_PACKET_RECEIVED_BANK_0) {
|
||||
len = UDP_CSR_BYTES_RECEIVED(UDP_ENDPOINT_CSR(1));
|
||||
if(AT91C_BASE_UDP->UDP_CSR[1] & AT91C_UDP_RX_DATA_BK0) {
|
||||
len = UDP_CSR_BYTES_RECEIVED(AT91C_BASE_UDP->UDP_CSR[1]);
|
||||
|
||||
for(i = 0; i < len; i++) {
|
||||
UsbBuffer[UsbSoFarCount] = UDP_ENDPOINT_FIFO(1);
|
||||
UsbBuffer[UsbSoFarCount] = AT91C_BASE_UDP->UDP_FDR[1];
|
||||
UsbSoFarCount++;
|
||||
}
|
||||
|
||||
UDP_ENDPOINT_CSR(1) &= ~UDP_CSR_RX_PACKET_RECEIVED_BANK_0;
|
||||
while(UDP_ENDPOINT_CSR(1) & UDP_CSR_RX_PACKET_RECEIVED_BANK_0)
|
||||
AT91C_BASE_UDP->UDP_CSR[1] &= ~AT91C_UDP_RX_DATA_BK0;
|
||||
while(AT91C_BASE_UDP->UDP_CSR[1] & AT91C_UDP_RX_DATA_BK0)
|
||||
;
|
||||
|
||||
if(UsbSoFarCount >= 64) {
|
||||
|
@ -414,16 +414,16 @@ static void HandleRxdData(void)
|
|||
}
|
||||
}
|
||||
|
||||
if(UDP_ENDPOINT_CSR(1) & UDP_CSR_RX_PACKET_RECEIVED_BANK_1) {
|
||||
len = UDP_CSR_BYTES_RECEIVED(UDP_ENDPOINT_CSR(1));
|
||||
if(AT91C_BASE_UDP->UDP_CSR[1] & AT91C_UDP_RX_DATA_BK1) {
|
||||
len = UDP_CSR_BYTES_RECEIVED(AT91C_BASE_UDP->UDP_CSR[1]);
|
||||
|
||||
for(i = 0; i < len; i++) {
|
||||
UsbBuffer[UsbSoFarCount] = UDP_ENDPOINT_FIFO(1);
|
||||
UsbBuffer[UsbSoFarCount] = AT91C_BASE_UDP->UDP_FDR[1];
|
||||
UsbSoFarCount++;
|
||||
}
|
||||
|
||||
UDP_ENDPOINT_CSR(1) &= ~UDP_CSR_RX_PACKET_RECEIVED_BANK_1;
|
||||
while(UDP_ENDPOINT_CSR(1) & UDP_CSR_RX_PACKET_RECEIVED_BANK_1)
|
||||
AT91C_BASE_UDP->UDP_CSR[1] &= ~AT91C_UDP_RX_DATA_BK1;
|
||||
while(AT91C_BASE_UDP->UDP_CSR[1] & AT91C_UDP_RX_DATA_BK1)
|
||||
;
|
||||
|
||||
if(UsbSoFarCount >= 64) {
|
||||
|
@ -446,14 +446,14 @@ void UsbStart(void)
|
|||
|
||||
USB_D_PLUS_PULLUP_ON();
|
||||
|
||||
if(UDP_INTERRUPT_STATUS & UDP_INTERRUPT_END_OF_BUS_RESET) {
|
||||
UDP_INTERRUPT_CLEAR = UDP_INTERRUPT_END_OF_BUS_RESET;
|
||||
if(AT91C_BASE_UDP->UDP_ISR & AT91C_UDP_ENDBUSRES) {
|
||||
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_ENDBUSRES;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL UsbConnected()
|
||||
{
|
||||
if (UDP_GLOBAL_STATE & UDP_GLOBAL_STATE_CONFIGURED)
|
||||
if (AT91C_BASE_UDP->UDP_GLBSTATE & AT91C_UDP_CONFG)
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
|
@ -463,30 +463,30 @@ BOOL UsbPoll(BOOL blinkLeds)
|
|||
{
|
||||
BOOL ret = FALSE;
|
||||
|
||||
if(UDP_INTERRUPT_STATUS & UDP_INTERRUPT_END_OF_BUS_RESET) {
|
||||
UDP_INTERRUPT_CLEAR = UDP_INTERRUPT_END_OF_BUS_RESET;
|
||||
if(AT91C_BASE_UDP->UDP_ISR & AT91C_UDP_ENDBUSRES) {
|
||||
AT91C_BASE_UDP->UDP_ICR = AT91C_UDP_ENDBUSRES;
|
||||
|
||||
// following a reset we should be ready to receive a setup packet
|
||||
UDP_RESET_ENDPOINT = 0xf;
|
||||
UDP_RESET_ENDPOINT = 0;
|
||||
AT91C_BASE_UDP->UDP_RSTEP = 0xf;
|
||||
AT91C_BASE_UDP->UDP_RSTEP = 0;
|
||||
|
||||
UDP_FUNCTION_ADDR = UDP_FUNCTION_ADDR_ENABLED;
|
||||
AT91C_BASE_UDP->UDP_FADDR = AT91C_UDP_FEN;
|
||||
|
||||
UDP_ENDPOINT_CSR(0) = UDP_CSR_EPTYPE_CONTROL | UDP_CSR_ENABLE_EP;
|
||||
AT91C_BASE_UDP->UDP_CSR[0] = AT91C_UDP_EPTYPE_CTRL | AT91C_UDP_EPEDS;
|
||||
|
||||
CurrentConfiguration = 0;
|
||||
|
||||
ret = TRUE;
|
||||
}
|
||||
|
||||
if(UDP_INTERRUPT_STATUS & UDP_INTERRUPT_ENDPOINT(0)) {
|
||||
if(UDP_ENDPOINT_CSR(0) & UDP_CSR_RX_HAVE_READ_SETUP_DATA) {
|
||||
if(AT91C_BASE_UDP->UDP_ISR & UDP_INTERRUPT_ENDPOINT(0)) {
|
||||
if(AT91C_BASE_UDP->UDP_CSR[0] & AT91C_UDP_RXSETUP) {
|
||||
HandleRxdSetupData();
|
||||
ret = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if(UDP_INTERRUPT_STATUS & UDP_INTERRUPT_ENDPOINT(1)) {
|
||||
if(AT91C_BASE_UDP->UDP_ISR & UDP_INTERRUPT_ENDPOINT(1)) {
|
||||
HandleRxdData();
|
||||
ret = TRUE;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue