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:
iceman1001 2015-07-31 18:48:58 +02:00
commit a82c1ac827
2 changed files with 20 additions and 20 deletions

View file

@ -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);
} }

View file

@ -327,13 +327,14 @@ uint32_t usb_read(byte_t* data, size_t 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;
} }
@ -368,7 +369,9 @@ uint32_t usb_write(const byte_t* data, const size_t len) {
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;
} }