Remove duplicate define. Put all phy chip specific defines in its
[bertos.git] / bertos / cpu / cortex-m3 / drv / usb_stm32.c
index ac3f55fa40bc2af8ffb05a10130a43adf464647e..393b3cc4a49aa619b272ef802a519136770fdc97 100644 (file)
@@ -148,15 +148,12 @@ static stm32_UsbMemSlot *mem_use;
 static stm32_UsbMemSlot memory_buffer[EP_MAX_NUM];
 
 /* Endpoint TX and RX buffers */
-/// \cond
-/* XXX: use the empty cond section to silent a buggy doxygen warning */
 static size_t rx_size, tx_size;
 
 #define EP_BUFFER_SIZE _MIN(CONFIG_USB_BUFSIZE, USB_XFER_MAX_SIZE)
 STATIC_ASSERT(!(EP_BUFFER_SIZE & 0x03));
 
 static uint8_t ep_buffer[EP_MAX_NUM][EP_BUFFER_SIZE] ALIGNED(4);
-/// \endcond
 
 static Event usb_event_done[EP_MAX_SLOTS];
 
@@ -1126,7 +1123,8 @@ static void usb_endpointRead_complete(int ep)
        rx_size = ep_cnfg[ep].size;
 }
 
-ssize_t usb_endpointRead(int ep, void *buffer, ssize_t size)
+ssize_t usb_endpointReadTimeout(int ep, void *buffer, ssize_t size,
+                               ticks_t timeout)
 {
        int ep_num = usb_ep_logical_to_hw(ep);
        ssize_t max_size = sizeof(ep_buffer[ep_num]);
@@ -1161,7 +1159,11 @@ ssize_t usb_endpointRead(int ep, void *buffer, ssize_t size)
        /* Blocking read */
        __usb_ep_read(ep_num, ep_buffer[ep_num], size,
                                usb_endpointRead_complete);
-       event_wait(&usb_event_done[ep_num >> 1]);
+       if (timeout < 0)
+               event_wait(&usb_event_done[ep_num >> 1]);
+       else
+               if (!event_waitTimeout(&usb_event_done[ep_num >> 1], timeout))
+                       return 0;
        memcpy(buffer, ep_buffer[ep_num], rx_size);
 
        return rx_size;
@@ -1180,7 +1182,8 @@ static void usb_endpointWrite_complete(int ep)
        tx_size = ep_cnfg[ep].size;
 }
 
-ssize_t usb_endpointWrite(int ep, const void *buffer, ssize_t size)
+ssize_t usb_endpointWriteTimeout(int ep, const void *buffer, ssize_t size,
+                               ticks_t timeout)
 {
        int ep_num = usb_ep_logical_to_hw(ep);
        ssize_t max_size = sizeof(ep_buffer[ep_num]);
@@ -1216,7 +1219,11 @@ ssize_t usb_endpointWrite(int ep, const void *buffer, ssize_t size)
        memcpy(ep_buffer[ep_num], buffer, size);
        __usb_ep_write(ep_num, ep_buffer[ep_num], size,
                                usb_endpointWrite_complete);
-       event_wait(&usb_event_done[ep_num >> 1]);
+       if (timeout < 0)
+               event_wait(&usb_event_done[ep_num >> 1]);
+       else
+               if (!event_waitTimeout(&usb_event_done[ep_num >> 1], timeout))
+                       return 0;
 
        return tx_size;
 }