projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
STM32: USB: support EP0 read/write operations via standard interface
[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 52f208dcec413693386c078c4c7de28c3d1c827f..eff625a45d60868d6c82815d0f6a894b55170f56 100644
(file)
--- 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);
{
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);
/* 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;
}
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)
/* Blocking read */
__usb_ep_read(ep_num, buffer, size, usb_ep_read_complete);
while (!rx_done)
@@
-1140,20
+1143,24
@@
ssize_t usb_ep_write(int ep, const void *buffer, ssize_t size)
{
int ep_num = USB_EpLogToPhysAdd(ep);
{
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);
/* 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);
+ LOG_INFO("%s: size = %d\n", __func__, size);
+ if (!size)
+ USB_StatusHandler(ep_num);
+ else
+ __usb_ep_write(ep_num, buffer, size,
+ USB_StatusHandler);
return size;
}
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)
/* Blocking write */
__usb_ep_write(ep_num, buffer, size, usb_ep_write_complete);
while (!tx_done)