mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-08-19 21:03:48 -07:00
FIX: A old bug regarding: CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K command, where it causes the USB_COMMAND_BUFFER to overfill is corrected. The message: "WARNING: Command buffer about to overwrite command! This needs to be fixed!" was showing when it happens.
The solution is not to add the CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K to the storeCommand function.
This commit is contained in:
parent
f62b5e1204
commit
a82c1ac827
2 changed files with 20 additions and 20 deletions
|
@ -121,9 +121,8 @@ void storeCommand(UsbCommand *command)
|
||||||
int getCommand(UsbCommand* response)
|
int getCommand(UsbCommand* response)
|
||||||
{
|
{
|
||||||
//If head == tail, there's nothing to read, or if we just got initialized
|
//If head == tail, there's nothing to read, or if we just got initialized
|
||||||
if(cmd_head == cmd_tail){
|
if(cmd_head == cmd_tail) return 0;
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
//Pick out the next unread command
|
//Pick out the next unread command
|
||||||
UsbCommand* last_unread = &cmdBuffer[cmd_tail];
|
UsbCommand* last_unread = &cmdBuffer[cmd_tail];
|
||||||
memcpy(response, last_unread, sizeof(UsbCommand));
|
memcpy(response, last_unread, sizeof(UsbCommand));
|
||||||
|
@ -131,7 +130,6 @@ int getCommand(UsbCommand* response)
|
||||||
cmd_tail = (cmd_tail +1 ) % CMD_BUFFER_SIZE;
|
cmd_tail = (cmd_tail +1 ) % CMD_BUFFER_SIZE;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -150,7 +148,6 @@ bool WaitForResponseTimeout(uint32_t cmd, UsbCommand* response, size_t ms_timeou
|
||||||
if (response == NULL)
|
if (response == NULL)
|
||||||
response = &resp;
|
response = &resp;
|
||||||
|
|
||||||
|
|
||||||
// Wait until the command is received
|
// Wait until the command is received
|
||||||
for(size_t dm_seconds=0; dm_seconds < ms_timeout/10; dm_seconds++) {
|
for(size_t dm_seconds=0; dm_seconds < ms_timeout/10; dm_seconds++) {
|
||||||
|
|
||||||
|
@ -203,10 +200,10 @@ void UsbCommandReceived(UsbCommand *UC)
|
||||||
|
|
||||||
case CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K: {
|
case CMD_DOWNLOADED_RAW_ADC_SAMPLES_125K: {
|
||||||
memcpy(sample_buf+(UC->arg[0]),UC->d.asBytes,UC->arg[1]);
|
memcpy(sample_buf+(UC->arg[0]),UC->d.asBytes,UC->arg[1]);
|
||||||
|
return;
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
default:
|
default: break;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
storeCommand(UC);
|
storeCommand(UC);
|
||||||
}
|
}
|
||||||
|
|
|
@ -315,26 +315,27 @@ bool usb_poll_validate_length()
|
||||||
//* \brief Read available data from Endpoint OUT
|
//* \brief Read available data from Endpoint OUT
|
||||||
//*----------------------------------------------------------------------------
|
//*----------------------------------------------------------------------------
|
||||||
uint32_t usb_read(byte_t* data, size_t len) {
|
uint32_t usb_read(byte_t* data, size_t len) {
|
||||||
byte_t bank = btReceiveBank;
|
byte_t bank = btReceiveBank;
|
||||||
uint32_t packetSize, nbBytesRcv = 0;
|
uint32_t packetSize, nbBytesRcv = 0;
|
||||||
uint32_t time_out = 0;
|
uint32_t time_out = 0;
|
||||||
|
|
||||||
while (len) {
|
while (len) {
|
||||||
if (!usb_check()) break;
|
if (!usb_check()) break;
|
||||||
|
|
||||||
if ( pUdp->UDP_CSR[AT91C_EP_OUT] & bank ) {
|
if ( pUdp->UDP_CSR[AT91C_EP_OUT] & bank ) {
|
||||||
packetSize = MIN(pUdp->UDP_CSR[AT91C_EP_OUT] >> 16, len);
|
packetSize = MIN(pUdp->UDP_CSR[AT91C_EP_OUT] >> 16, len);
|
||||||
len -= packetSize;
|
len -= packetSize;
|
||||||
while(packetSize--)
|
while(packetSize--)
|
||||||
data[nbBytesRcv++] = pUdp->UDP_FDR[AT91C_EP_OUT];
|
data[nbBytesRcv++] = pUdp->UDP_FDR[AT91C_EP_OUT];
|
||||||
|
|
||||||
pUdp->UDP_CSR[AT91C_EP_OUT] &= ~(bank);
|
pUdp->UDP_CSR[AT91C_EP_OUT] &= ~(bank);
|
||||||
if (bank == AT91C_UDP_RX_DATA_BK0) {
|
|
||||||
|
if (bank == AT91C_UDP_RX_DATA_BK0)
|
||||||
bank = AT91C_UDP_RX_DATA_BK1;
|
bank = AT91C_UDP_RX_DATA_BK1;
|
||||||
} else {
|
else
|
||||||
bank = AT91C_UDP_RX_DATA_BK0;
|
bank = AT91C_UDP_RX_DATA_BK0;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (time_out++ == 0x1fff) break;
|
if (time_out++ == 0x1fff) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
btReceiveBank = bank;
|
btReceiveBank = bank;
|
||||||
|
@ -346,11 +347,11 @@ uint32_t usb_read(byte_t* data, size_t len) {
|
||||||
//* \brief Send through endpoint 2
|
//* \brief Send through endpoint 2
|
||||||
//*----------------------------------------------------------------------------
|
//*----------------------------------------------------------------------------
|
||||||
uint32_t usb_write(const byte_t* data, const size_t len) {
|
uint32_t usb_write(const byte_t* data, const size_t len) {
|
||||||
size_t length = len;
|
size_t length = len;
|
||||||
uint32_t cpt = 0;
|
uint32_t cpt = 0;
|
||||||
|
|
||||||
if (!length) return 0;
|
if (!length) return 0;
|
||||||
if (!usb_check()) return 0;
|
if (!usb_check()) return 0;
|
||||||
|
|
||||||
// Send the first packet
|
// Send the first packet
|
||||||
cpt = MIN(length, AT91C_EP_IN_SIZE-1);
|
cpt = MIN(length, AT91C_EP_IN_SIZE-1);
|
||||||
|
@ -366,16 +367,18 @@ uint32_t usb_write(const byte_t* data, const size_t len) {
|
||||||
// Wait for the the first bank to be sent
|
// Wait for the the first bank to be sent
|
||||||
while (!(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP)) {
|
while (!(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP)) {
|
||||||
if (!usb_check()) return length;
|
if (!usb_check()) return length;
|
||||||
}
|
}
|
||||||
pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
|
pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
|
||||||
|
|
||||||
while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
|
while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
|
||||||
|
|
||||||
pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
|
pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait for the end of transfer
|
// Wait for the end of transfer
|
||||||
while (!(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP)) {
|
while (!(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP)) {
|
||||||
if (!usb_check()) return length;
|
if (!usb_check()) return length;
|
||||||
}
|
}
|
||||||
|
|
||||||
pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
|
pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
|
||||||
while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
|
while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue