X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=bertos%2Fcpu%2Fcortex-m3%2Fdrv%2Fusb_stm32.c;h=f314f99f2f17470190dd381434fb807447c3b73a;hb=774e4dcb7a72c3d4659af891558272a9b1c4e659;hp=52f208dcec413693386c078c4c7de28c3d1c827f;hpb=08eb84f9adca434cbc682642aea5f3a7aea17187;p=bertos.git diff --git a/bertos/cpu/cortex-m3/drv/usb_stm32.c b/bertos/cpu/cortex-m3/drv/usb_stm32.c index 52f208dc..f314f99f 100644 --- a/bertos/cpu/cortex-m3/drv/usb_stm32.c +++ b/bertos/cpu/cortex-m3/drv/usb_stm32.c @@ -1098,20 +1098,23 @@ ssize_t usb_ep_read(int ep, void *buffer, ssize_t size) { int ep_num = USB_EpLogToPhysAdd(ep); - if (UNLIKELY(!size)) - return 0; - size = MIN(size, USB_RX_MAX_SIZE); - rx_done = false; - rx_size = 0; - /* Non-blocking read for EP0 */ if (ep_num == CTRL_ENP_OUT) { size = usb_size(size, setup_packet.wLength); - __usb_ep_write(ep_num, buffer, size, - USB_StatusHandler); + if (!size) + USB_StatusHandler(ep_num); + else + __usb_ep_read(ep_num, buffer, size, + USB_StatusHandler); return size; } + if (UNLIKELY(!size)) + return 0; + size = MIN(size, USB_RX_MAX_SIZE); + rx_done = false; + rx_size = 0; + /* Blocking read */ __usb_ep_read(ep_num, buffer, size, usb_ep_read_complete); while (!rx_done) @@ -1140,20 +1143,23 @@ ssize_t usb_ep_write(int ep, const void *buffer, ssize_t size) { int ep_num = USB_EpLogToPhysAdd(ep); - if (UNLIKELY(!size)) - return 0; - size = MIN(size, USB_TX_MAX_SIZE); - tx_done = false; - tx_size = 0; - /* Non-blocking write for EP0 */ if (ep_num == CTRL_ENP_IN) { size = usb_size(size, setup_packet.wLength); - __usb_ep_write(ep_num, buffer, size, - USB_StatusHandler); + if (!size) + USB_StatusHandler(ep_num); + else + __usb_ep_write(ep_num, buffer, size, + USB_StatusHandler); return size; } + if (UNLIKELY(!size)) + return 0; + size = MIN(size, USB_TX_MAX_SIZE); + tx_done = false; + tx_size = 0; + /* Blocking write */ __usb_ep_write(ep_num, buffer, size, usb_ep_write_complete); while (!tx_done) @@ -1670,13 +1676,8 @@ static void usb_hw_reset(void) usb_set_address(0); /* Enable all the device interrupts */ -#if 0 usb->CNTR = bmCTRM | bmRESETM | bmSOFM | bmERRM | bmPMAOVRM | bmSUSPM | bmWKUPM; -#else - /* XXX: disable frame interrupts for now (too much noise!) */ - usb->CNTR = bmCTRM | bmRESETM | bmERRM | bmPMAOVRM | bmSUSPM | bmWKUPM; -#endif } /* Handle a correct transfer under ISR */ @@ -1766,9 +1767,13 @@ static void usb_isr(void) } if (interrupt.SOF) { +#if 0 + /* + * XXX: disable logging of frame interrupts (too much noise!) + */ uint16_t frame_nr = usb->FNR & 0x0fff; - LOG_INFO("%s: frame %#x\n", __func__, frame_nr); +#endif usb->ISTR = ~bmSOFM; } if (interrupt.WKUP)