// The common USB driver used for both the bootloader and the application.
//-----------------------------------------------------------------------------
-#include <proxmark3.h>
+#include "proxmark3.h"
#define min(a, b) (((a) > (b)) ? (b) : (a))
0x01,0x00, // Device release number (0001)
0x01, // Manufacturer string descriptor index
0x02, // Product string descriptor index
- 0x00, // Serial Number string descriptor index (None)
+ 0x03, // Serial Number string descriptor index
0x01, // Number of possible configurations (1)
};
't', 0x00,
};
+// Serial Number
+// TODO: Pick yours! Don't forget to modify the length, if needed.
+static const uint8_t StringDescriptor3[] = {
+ 18, // Length
+ 0x03, // Type is string
+ 'C', 0x00,
+ 'h', 0x00,
+ 'a', 0x00,
+ 'n', 0x00,
+ 'g', 0x00,
+ 'e', 0x00,
+ 'M', 0x00,
+ 'e', 0x00,
+};
+
static const uint8_t * const StringDescriptors[] = {
StringDescriptor0,
StringDescriptor1,
StringDescriptor2,
+ StringDescriptor3,
};
}
AT91C_BASE_UDP->UDP_CSR[2] |= AT91C_UDP_TXPKTRDY;
- while(!(AT91C_BASE_UDP->UDP_CSR[2] & AT91C_UDP_TXCOMP))
- ;
+ while(!(AT91C_BASE_UDP->UDP_CSR[2] & AT91C_UDP_TXCOMP)) {
+ WDT_HIT();
+ }
+
AT91C_BASE_UDP->UDP_CSR[2] &= ~AT91C_UDP_TXCOMP;
- while(AT91C_BASE_UDP->UDP_CSR[2] & AT91C_UDP_TXCOMP)
- ;
+ while(AT91C_BASE_UDP->UDP_CSR[2] & AT91C_UDP_TXCOMP) {
+ WDT_HIT();
+ }
len -= thisTime;
packet += thisTime;
}
AT91C_BASE_UDP->UDP_CSR[1] &= ~AT91C_UDP_RX_DATA_BK0;
- while(AT91C_BASE_UDP->UDP_CSR[1] & AT91C_UDP_RX_DATA_BK0)
- ;
+ while(AT91C_BASE_UDP->UDP_CSR[1] & AT91C_UDP_RX_DATA_BK0) {
+ WDT_HIT();
+ }
if(UsbSoFarCount >= 64) {
UsbPacketReceived(UsbBuffer, UsbSoFarCount);
}
AT91C_BASE_UDP->UDP_CSR[1] &= ~AT91C_UDP_RX_DATA_BK1;
- while(AT91C_BASE_UDP->UDP_CSR[1] & AT91C_UDP_RX_DATA_BK1)
- ;
-
+ while(AT91C_BASE_UDP->UDP_CSR[1] & AT91C_UDP_RX_DATA_BK1) {
+ WDT_HIT();
+ }
+
if(UsbSoFarCount >= 64) {
UsbPacketReceived(UsbBuffer, UsbSoFarCount);
UsbSoFarCount = 0;
}
}
+
+ WDT_HIT();
}
void UsbStart(void)