projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add debug support for AVR XMega MCU.
[bertos.git]
/
bertos
/
cpu
/
cortex-m3
/
drv
/
usb_stm32.c
diff --git
a/bertos/cpu/cortex-m3/drv/usb_stm32.c
b/bertos/cpu/cortex-m3/drv/usb_stm32.c
index ac3f55fa40bc2af8ffb05a10130a43adf464647e..393b3cc4a49aa619b272ef802a519136770fdc97 100644
(file)
--- a/
bertos/cpu/cortex-m3/drv/usb_stm32.c
+++ b/
bertos/cpu/cortex-m3/drv/usb_stm32.c
@@
-148,15
+148,12
@@
static stm32_UsbMemSlot *mem_use;
static stm32_UsbMemSlot memory_buffer[EP_MAX_NUM];
/* Endpoint TX and RX buffers */
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);
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];
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;
}
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]);
{
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);
/* 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;
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;
}
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]);
{
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);
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;
}
return tx_size;
}