* so when we hook that up, fix this
*/
void
-ao_usb_isr(void) interrupt 6
+ao_usb_isr(void) __interrupt 6
{
USBIF = 0;
ao_usb_iif |= USBIIF;
__xdata uint8_t this_len;
__xdata uint8_t cs0;
+ /* If the IN packet hasn't been picked up, just return */
USBINDEX = 0;
cs0 = USBCS0;
if (cs0 & USBCS0_INPKT_RDY)
- ao_panic(0);
+ return;
this_len = ao_usb_ep0_in_len;
if (this_len > AO_USB_CONTROL_SIZE)
if ((USBCSOL & USBCSOL_OUTPKT_RDY) == 0)
return AO_READ_AGAIN;
ao_usb_out_bytes = (USBCNTH << 8) | USBCNTL;
- if (ao_usb_out_bytes == 0)
+ if (ao_usb_out_bytes == 0) {
+ USBINDEX = AO_USB_OUT_EP;
+ USBCSOL &= ~USBCSOL_OUTPKT_RDY;
return AO_READ_AGAIN;
+ }
}
--ao_usb_out_bytes;
c = USBFIFO[AO_USB_OUT_EP << 1];