mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-04-08 13:30:22 +08:00
FIX: reverted back to offical pm3 - waiting for flags to be cleared & set.
This commit is contained in:
parent
b99b2dd30f
commit
b739076d99
1 changed files with 20 additions and 24 deletions
|
@ -137,7 +137,7 @@ static const char devDescriptor[] = {
|
||||||
USB_DESCRIPTOR_DEVICE, // Descriptor Type (DEVICE)
|
USB_DESCRIPTOR_DEVICE, // Descriptor Type (DEVICE)
|
||||||
0x00,0x02, // Complies with USB Spec. Release (0200h = release 2.00) 0210 == release 2.10
|
0x00,0x02, // Complies with USB Spec. Release (0200h = release 2.00) 0210 == release 2.10
|
||||||
2, // Device Class: Communication Device Class
|
2, // Device Class: Communication Device Class
|
||||||
2, // Device Subclass: CDC class sub code ACM [ice 0x02 = win10 virtual comport ]
|
0, // Device Subclass: CDC class sub code ACM [ice 0x02 = win10 virtual comport ]
|
||||||
0, // Device Protocol: CDC Device protocol (unused)
|
0, // Device Protocol: CDC Device protocol (unused)
|
||||||
AT91C_EP_CONTROL_SIZE, // MaxPacketSize0
|
AT91C_EP_CONTROL_SIZE, // MaxPacketSize0
|
||||||
0xc4,0x9a, // Vendor ID [0x9ac4 = J. Westhues]
|
0xc4,0x9a, // Vendor ID [0x9ac4 = J. Westhues]
|
||||||
|
@ -376,12 +376,6 @@ static const char StrSerialNumber[] = {
|
||||||
'8',0,'8',0,'8',0,'8',0,'8',0,'8',0,'8',0,'8',0
|
'8',0,'8',0,'8',0,'8',0,'8',0,'8',0,'8',0,'8',0
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char StrConfig1[] = {
|
|
||||||
22, //length
|
|
||||||
3, //string
|
|
||||||
'P',0,'M',0,'3',0,' ',0,'C',0,'o',0,'n',0,'f',0,'i',0,'g',0
|
|
||||||
};
|
|
||||||
|
|
||||||
// size inkluderar sitt egna fält.
|
// size inkluderar sitt egna fält.
|
||||||
static const char StrMS_OSDescriptor[] = {
|
static const char StrMS_OSDescriptor[] = {
|
||||||
18, // length 0x12
|
18, // length 0x12
|
||||||
|
@ -395,14 +389,12 @@ const char* getStringDescriptor(uint8_t idx) {
|
||||||
case 1: return StrManufacturer;
|
case 1: return StrManufacturer;
|
||||||
case 2: return StrProduct;
|
case 2: return StrProduct;
|
||||||
case 3: return StrSerialNumber;
|
case 3: return StrSerialNumber;
|
||||||
case 4: return StrConfig1;
|
|
||||||
case MS_OS_DESCRIPTOR_INDEX: return StrMS_OSDescriptor;
|
case MS_OS_DESCRIPTOR_INDEX: return StrMS_OSDescriptor;
|
||||||
default:
|
default:
|
||||||
return(NULL);
|
return(NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Bitmap for all status bits in CSR which must be written as 1 to cause no effect
|
// Bitmap for all status bits in CSR which must be written as 1 to cause no effect
|
||||||
#define REG_NO_EFFECT_1_ALL AT91C_UDP_RX_DATA_BK0 | AT91C_UDP_RX_DATA_BK1 \
|
#define REG_NO_EFFECT_1_ALL AT91C_UDP_RX_DATA_BK0 | AT91C_UDP_RX_DATA_BK1 \
|
||||||
|AT91C_UDP_STALLSENT | AT91C_UDP_RXSETUP \
|
|AT91C_UDP_STALLSENT | AT91C_UDP_RXSETUP \
|
||||||
|
@ -415,7 +407,6 @@ const char* getStringDescriptor(uint8_t idx) {
|
||||||
reg |= REG_NO_EFFECT_1_ALL; \
|
reg |= REG_NO_EFFECT_1_ALL; \
|
||||||
reg &= ~(flags); \
|
reg &= ~(flags); \
|
||||||
pUdp->UDP_CSR[(endpoint)] = reg; \
|
pUdp->UDP_CSR[(endpoint)] = reg; \
|
||||||
while ( (pUdp->UDP_CSR[(endpoint)] & (flags)) == (flags)) {}; \
|
|
||||||
} \
|
} \
|
||||||
|
|
||||||
// reset flags in the UDP_CSR register and waits for synchronization
|
// reset flags in the UDP_CSR register and waits for synchronization
|
||||||
|
@ -425,7 +416,6 @@ const char* getStringDescriptor(uint8_t idx) {
|
||||||
reg |= REG_NO_EFFECT_1_ALL; \
|
reg |= REG_NO_EFFECT_1_ALL; \
|
||||||
reg |= (flags); \
|
reg |= (flags); \
|
||||||
pUdp->UDP_CSR[(endpoint)] = reg; \
|
pUdp->UDP_CSR[(endpoint)] = reg; \
|
||||||
while ( ( pUdp->UDP_CSR[(endpoint)] & (flags)) != (flags)) {}; \
|
|
||||||
} \
|
} \
|
||||||
|
|
||||||
|
|
||||||
|
@ -683,6 +673,7 @@ uint32_t usb_write(const byte_t* data, const size_t len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
UDP_CLEAR_EP_FLAGS(AT91C_EP_IN, AT91C_UDP_TXCOMP);
|
UDP_CLEAR_EP_FLAGS(AT91C_EP_IN, AT91C_UDP_TXCOMP);
|
||||||
|
while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
|
||||||
UDP_SET_EP_FLAGS(AT91C_EP_IN, AT91C_UDP_TXPKTRDY);
|
UDP_SET_EP_FLAGS(AT91C_EP_IN, AT91C_UDP_TXPKTRDY);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -692,7 +683,8 @@ uint32_t usb_write(const byte_t* data, const size_t len) {
|
||||||
if (!usb_check()) return length;
|
if (!usb_check()) return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
UDP_CLEAR_EP_FLAGS(AT91C_EP_IN, AT91C_UDP_TXCOMP)
|
UDP_CLEAR_EP_FLAGS(AT91C_EP_IN, AT91C_UDP_TXCOMP);
|
||||||
|
while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
|
||||||
|
|
||||||
return length;
|
return length;
|
||||||
}
|
}
|
||||||
|
@ -713,8 +705,8 @@ void AT91F_USB_SendData(AT91PS_UDP pUdp, const char *pData, uint32_t length) {
|
||||||
pUdp->UDP_FDR[AT91C_EP_CONTROL] = *pData++;
|
pUdp->UDP_FDR[AT91C_EP_CONTROL] = *pData++;
|
||||||
|
|
||||||
if (pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_TXCOMP) {
|
if (pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_TXCOMP) {
|
||||||
|
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXCOMP);
|
||||||
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXCOMP)
|
while (pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_TXCOMP);
|
||||||
}
|
}
|
||||||
|
|
||||||
UDP_SET_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXPKTRDY);
|
UDP_SET_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXPKTRDY);
|
||||||
|
@ -732,18 +724,21 @@ void AT91F_USB_SendData(AT91PS_UDP pUdp, const char *pData, uint32_t length) {
|
||||||
} while (length);
|
} while (length);
|
||||||
|
|
||||||
if (pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_TXCOMP) {
|
if (pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_TXCOMP) {
|
||||||
|
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXCOMP);
|
||||||
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXCOMP)
|
while (pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_TXCOMP);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//*----------------------------------------------------------------------------
|
//*----------------------------------------------------------------------------
|
||||||
//* \fn AT91F_USB_SendZlp
|
//* \fn AT91F_USB_SendZlp
|
||||||
//* \brief Send zero length packet through the control endpoint
|
//* \brief Send zero length packet through the control endpoint
|
||||||
//*----------------------------------------------------------------------------
|
//*----------------------------------------------------------------------------
|
||||||
void AT91F_USB_SendZlp(AT91PS_UDP pUdp) {
|
void AT91F_USB_SendZlp(AT91PS_UDP pUdp) {
|
||||||
UDP_SET_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXPKTRDY);
|
UDP_SET_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXPKTRDY);
|
||||||
|
while ( !(pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_TXPKTRDY) );
|
||||||
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXCOMP);
|
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_TXCOMP);
|
||||||
|
while (pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_TXCOMP);
|
||||||
}
|
}
|
||||||
|
|
||||||
//*----------------------------------------------------------------------------
|
//*----------------------------------------------------------------------------
|
||||||
|
@ -753,7 +748,8 @@ void AT91F_USB_SendZlp(AT91PS_UDP pUdp) {
|
||||||
void AT91F_USB_SendStall(AT91PS_UDP pUdp) {
|
void AT91F_USB_SendStall(AT91PS_UDP pUdp) {
|
||||||
UDP_SET_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_FORCESTALL);
|
UDP_SET_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_FORCESTALL);
|
||||||
while ( !(pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_ISOERROR) );
|
while ( !(pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_ISOERROR) );
|
||||||
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, (AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR));
|
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR);
|
||||||
|
while (pUdp->UDP_CSR[AT91C_EP_CONTROL] & (AT91C_UDP_FORCESTALL | AT91C_UDP_ISOERROR));
|
||||||
}
|
}
|
||||||
|
|
||||||
//*----------------------------------------------------------------------------
|
//*----------------------------------------------------------------------------
|
||||||
|
@ -781,8 +777,10 @@ void AT91F_CDC_Enumerate() {
|
||||||
|
|
||||||
if (bmRequestType & 0x80) { // Data Phase Transfer Direction Device to Host
|
if (bmRequestType & 0x80) { // Data Phase Transfer Direction Device to Host
|
||||||
UDP_SET_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_DIR);
|
UDP_SET_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_DIR);
|
||||||
|
while ( !(pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_DIR) );
|
||||||
}
|
}
|
||||||
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_RXSETUP)
|
UDP_CLEAR_EP_FLAGS(AT91C_EP_CONTROL, AT91C_UDP_RXSETUP);
|
||||||
|
while ( (pUdp->UDP_CSR[AT91C_EP_CONTROL] & AT91C_UDP_RXSETUP) );
|
||||||
|
|
||||||
if ( bRequest == MS_VENDOR_CODE) {
|
if ( bRequest == MS_VENDOR_CODE) {
|
||||||
if ( bmRequestType == MS_WCID_GET_DESCRIPTOR ) { // C0
|
if ( bmRequestType == MS_WCID_GET_DESCRIPTOR ) { // C0
|
||||||
|
@ -835,12 +833,10 @@ void AT91F_CDC_Enumerate() {
|
||||||
UDP_CLEAR_EP_FLAGS(AT91C_EP_NOTIFY, AT91C_UDP_FORCESTALL);
|
UDP_CLEAR_EP_FLAGS(AT91C_EP_NOTIFY, AT91C_UDP_FORCESTALL);
|
||||||
|
|
||||||
// enable endpoints
|
// enable endpoints
|
||||||
UDP_SET_EP_FLAGS(AT91C_EP_OUT, (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT) : 0 );
|
|
||||||
UDP_SET_EP_FLAGS(AT91C_EP_IN, (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN) : 0 );
|
pUdp->UDP_CSR[AT91C_EP_OUT] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT) : 0;
|
||||||
UDP_SET_EP_FLAGS(AT91C_EP_NOTIFY, (wValue) ? AT91C_UDP_EPTYPE_INT_IN : 0 );
|
pUdp->UDP_CSR[AT91C_EP_IN] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN) : 0;
|
||||||
// pUdp->UDP_CSR[AT91C_EP_OUT] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_OUT) : 0;
|
pUdp->UDP_CSR[AT91C_EP_NOTIFY] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_INT_IN) : 0;
|
||||||
// pUdp->UDP_CSR[AT91C_EP_IN] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_BULK_IN) : 0;
|
|
||||||
// pUdp->UDP_CSR[AT91C_EP_NOTIFY] = (wValue) ? (AT91C_UDP_EPEDS | AT91C_UDP_EPTYPE_INT_IN) : 0;
|
|
||||||
break;
|
break;
|
||||||
case STD_GET_CONFIGURATION:
|
case STD_GET_CONFIGURATION:
|
||||||
AT91F_USB_SendData(pUdp, (char *) &(btConfiguration), sizeof(btConfiguration));
|
AT91F_USB_SendData(pUdp, (char *) &(btConfiguration), sizeof(btConfiguration));
|
||||||
|
|
Loading…
Add table
Reference in a new issue