};\r
\r
static uint8_t hidBuffer[USBHID_LEN];\r
+static uint8_t dbgHidBuffer[USBHID_LEN];\r
\r
static int usbInEpState;\r
static int usbDebugEpState;\r
\r
if (reset)\r
{\r
+ hidPacket_reset();\r
USBFS_EnableOutEP(USB_EP_OUT);\r
USBFS_EnableOutEP(USB_EP_COMMAND);\r
usbInEpState = usbDebugEpState = USB_IDLE;\r
\r
if(USBFS_GetEPState(USB_EP_OUT) == USBFS_OUT_BUFFER_FULL)\r
{\r
- ledOn();\r
-\r
// The host sent us some data!\r
int byteCount = USBFS_GetEPCount(USB_EP_OUT);\r
USBFS_ReadOutEP(USB_EP_OUT, hidBuffer, sizeof(hidBuffer));\r
hidPacket_recv(hidBuffer, byteCount);\r
-\r
+ \r
+ size_t cmdSize;\r
+ if (hidPacket_peekPacket(&cmdSize) == NULL)\r
+ {\r
+ // Allow the host to send us another updated config.\r
+ USBFS_EnableOutEP(USB_EP_OUT);\r
+ }\r
+ }\r
+ \r
+ if (hidPacket_getHIDBytesReady() == 0) // Nothing queued to send\r
+ {\r
size_t cmdSize;\r
const uint8_t* cmd = hidPacket_getPacket(&cmdSize);\r
if (cmd && (cmdSize > 0))\r
{\r
+ ledOn();\r
processCommand(cmd, cmdSize);\r
+ ledOff();\r
+ \r
+ // Allow the host to send us another updated config.\r
+ USBFS_EnableOutEP(USB_EP_OUT);\r
}\r
-\r
- // Allow the host to send us another updated config.\r
- USBFS_EnableOutEP(USB_EP_OUT);\r
-\r
- ledOff();\r
}\r
\r
switch (usbInEpState)\r
{\r
// The host sent us some data!\r
int byteCount = USBFS_GetEPCount(USB_EP_COMMAND);\r
- USBFS_ReadOutEP(USB_EP_COMMAND, (uint8 *)&hidBuffer, byteCount);\r
+ USBFS_ReadOutEP(USB_EP_COMMAND, (uint8 *)&dbgHidBuffer, byteCount);\r
\r
if (byteCount >= 1 &&\r
- hidBuffer[0] == 0x01)\r
+ dbgHidBuffer[0] == 0x01)\r
{\r
// Reboot command.\r
Bootloadable_1_Load();\r
switch (usbDebugEpState)\r
{\r
case USB_IDLE:\r
- memcpy(&hidBuffer, &scsiDev.cdb, 12);\r
- hidBuffer[12] = scsiDev.msgIn;\r
- hidBuffer[13] = scsiDev.msgOut;\r
- hidBuffer[14] = scsiDev.lastStatus;\r
- hidBuffer[15] = scsiDev.lastSense;\r
- hidBuffer[16] = scsiDev.phase;\r
- hidBuffer[17] = SCSI_ReadFilt(SCSI_Filt_BSY);\r
- hidBuffer[18] = SCSI_ReadFilt(SCSI_Filt_SEL);\r
- hidBuffer[19] = SCSI_ReadFilt(SCSI_Filt_ATN);\r
- hidBuffer[20] = SCSI_ReadFilt(SCSI_Filt_RST);\r
- hidBuffer[21] = scsiDev.rstCount;\r
- hidBuffer[22] = scsiDev.selCount;\r
- hidBuffer[23] = scsiDev.msgCount;\r
- hidBuffer[24] = scsiDev.cmdCount;\r
- hidBuffer[25] = scsiDev.watchdogTick;\r
- hidBuffer[26] = 0; // OBSOLETE. Previously media state\r
- hidBuffer[27] = scsiDev.lastSenseASC >> 8;\r
- hidBuffer[28] = scsiDev.lastSenseASC;\r
- hidBuffer[29] = scsiReadDBxPins();\r
- hidBuffer[30] = LastTrace;\r
-\r
- hidBuffer[58] = sdCard.capacity >> 24;\r
- hidBuffer[59] = sdCard.capacity >> 16;\r
- hidBuffer[60] = sdCard.capacity >> 8;\r
- hidBuffer[61] = sdCard.capacity;\r
-\r
- hidBuffer[62] = FIRMWARE_VERSION >> 8;\r
- hidBuffer[63] = FIRMWARE_VERSION;\r
-\r
- USBFS_LoadInEP(USB_EP_DEBUG, (uint8 *)&hidBuffer, sizeof(hidBuffer));\r
+ memcpy(&dbgHidBuffer, &scsiDev.cdb, 12);\r
+ dbgHidBuffer[12] = scsiDev.msgIn;\r
+ dbgHidBuffer[13] = scsiDev.msgOut;\r
+ dbgHidBuffer[14] = scsiDev.lastStatus;\r
+ dbgHidBuffer[15] = scsiDev.lastSense;\r
+ dbgHidBuffer[16] = scsiDev.phase;\r
+ dbgHidBuffer[17] = SCSI_ReadFilt(SCSI_Filt_BSY);\r
+ dbgHidBuffer[18] = SCSI_ReadFilt(SCSI_Filt_SEL);\r
+ dbgHidBuffer[19] = SCSI_ReadFilt(SCSI_Filt_ATN);\r
+ dbgHidBuffer[20] = SCSI_ReadFilt(SCSI_Filt_RST);\r
+ dbgHidBuffer[21] = scsiDev.rstCount;\r
+ dbgHidBuffer[22] = scsiDev.selCount;\r
+ dbgHidBuffer[23] = scsiDev.msgCount;\r
+ dbgHidBuffer[24] = scsiDev.cmdCount;\r
+ dbgHidBuffer[25] = scsiDev.watchdogTick;\r
+ dbgHidBuffer[26] = 0; // OBSOLETE. Previously media state\r
+ dbgHidBuffer[27] = scsiDev.lastSenseASC >> 8;\r
+ dbgHidBuffer[28] = scsiDev.lastSenseASC;\r
+ dbgHidBuffer[29] = scsiReadDBxPins();\r
+ dbgHidBuffer[30] = LastTrace;\r
+\r
+ dbgHidBuffer[58] = sdCard.capacity >> 24;\r
+ dbgHidBuffer[59] = sdCard.capacity >> 16;\r
+ dbgHidBuffer[60] = sdCard.capacity >> 8;\r
+ dbgHidBuffer[61] = sdCard.capacity;\r
+\r
+ dbgHidBuffer[62] = FIRMWARE_VERSION >> 8;\r
+ dbgHidBuffer[63] = FIRMWARE_VERSION;\r
+\r
+ USBFS_LoadInEP(USB_EP_DEBUG, (uint8 *)&dbgHidBuffer, sizeof(dbgHidBuffer));\r
usbDebugEpState = USB_DATA_SENT;\r
break;\r
\r