diff options
Diffstat (limited to 'src-avr/ao_usb_avr.c')
-rw-r--r-- | src-avr/ao_usb_avr.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src-avr/ao_usb_avr.c b/src-avr/ao_usb_avr.c index e8639217..69a2dfa4 100644 --- a/src-avr/ao_usb_avr.c +++ b/src-avr/ao_usb_avr.c @@ -500,15 +500,18 @@ _ao_usb_pollchar(void) if (intx & (1 << FIFOCON)) { /* Ack the last packet */ - UEINTX &= ~(1 << FIFOCON); + UEINTX = (uint8_t) ~(1 << FIFOCON); } /* Check to see if a packet has arrived */ - if ((intx & (1 << RXOUTI)) == 0) + if ((intx & (1 << RXOUTI)) == 0) { + UENUM = AO_USB_OUT_EP; + UEIENX = (1 << RXOUTE); return AO_READ_AGAIN; + } /* Ack the interrupt */ - UEINTX &= ~(1 << RXOUTI); + UEINTX = ~(1 << RXOUTI); } /* Pull a character out of the fifo */ @@ -532,7 +535,7 @@ ao_usb_getchar(void) __critical char c; cli(); - while ((c = ao_usb_pollchar()) == AO_READ_AGAIN) + while ((c = _ao_usb_pollchar()) == AO_READ_AGAIN) ao_sleep(&ao_stdin_ready); sei(); return c; @@ -563,6 +566,8 @@ ISR(USB_COM_vect) in_count++; } if (i & (1 << AO_USB_OUT_EP)) { + UENUM = AO_USB_OUT_EP; + UEIENX = 0; ao_wakeup(&ao_stdin_ready); ++out_count; } |