-/**
- * @brief storeCommand stores a USB command in a circular buffer
- * @param UC
- */
-void storeCommand(UsbCommand *command)
-{
- if(cmd_head == cmd_tail)
- {
- //If these two are equal, we're about to overwrite in the
- // circular buffer.
- PrintAndLog("WARNING: Command buffer about to overwrite command! This needs to be fixed!");
- }
- //Store the command at the 'head' location
- UsbCommand* destination = &cmdBuffer[cmd_head];
- memcpy(destination, command, sizeof(UsbCommand));
-
- //Also, if cmd_tail is still -1 because the buffer was
- // previously empty, set it to head
- if(cmd_tail < 0) {
- cmd_tail = cmd_head;
- }
-
- cmd_head++; //increment head
- cmd_head %= CMD_BUFFER_SIZE;//wrap around
-
-}
-/**
- * @brief getCommand gets a command from an internal circular buffer.
- * @param response location to write command
- * @return 1 if response was returned, 0 if nothing has been received
- */
-int getCommand(UsbCommand* response)
-{
- //If head == tail, there's nothing to read, or if we just got initialized
- if(cmd_head == cmd_tail || cmd_tail == -1){
- return 0;
- }
- //Pick out the next unread command
- UsbCommand* last_unread = &cmdBuffer[cmd_tail];
- memcpy(response, last_unread, sizeof(UsbCommand));
- //Increment tail - this is a circular buffer, so modulo buffer size
- cmd_tail = (cmd_tail +1 ) % CMD_BUFFER_SIZE;
- //In order to detect when the buffer overwrites itself, we set the
- // tail to -1 whenever it 'catches up' with head : this means the buffer is empty.
- // Otherwise, head==tail could mean both: either empty or full.
- if(cmd_tail == cmd_head){
- cmd_tail = -1 ;
- }