summaryrefslogtreecommitdiff
path: root/chip/stm32/usb-stream.c
diff options
context:
space:
mode:
Diffstat (limited to 'chip/stm32/usb-stream.c')
-rw-r--r--chip/stm32/usb-stream.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/chip/stm32/usb-stream.c b/chip/stm32/usb-stream.c
index 42d9d3774c..05351a8ca3 100644
--- a/chip/stm32/usb-stream.c
+++ b/chip/stm32/usb-stream.c
@@ -36,7 +36,7 @@ static size_t tx_write(struct usb_stream_config const *config)
{
size_t count = consumer_read_memcpy(&config->consumer,
config->tx_ram,
- USB_MAX_PACKET_SIZE,
+ config->tx_size,
memcpy_to_usbram);
btable_ep[config->endpoint].tx_count = count;
@@ -120,6 +120,14 @@ void usb_stream_rx(struct usb_stream_config const *config)
}
}
+static usb_uint usb_ep_rx_size(size_t bytes)
+{
+ if (bytes < 64)
+ return bytes << 9;
+ else
+ return 0x8000 | ((bytes - 32) << 5);
+}
+
void usb_stream_reset(struct usb_stream_config const *config)
{
int i = config->endpoint;
@@ -128,7 +136,7 @@ void usb_stream_reset(struct usb_stream_config const *config)
btable_ep[i].tx_count = 0;
btable_ep[i].rx_addr = usb_sram_addr(config->rx_ram);
- btable_ep[i].rx_count = 0x8000 | ((USB_MAX_PACKET_SIZE / 32 - 1) << 10);
+ btable_ep[i].rx_count = usb_ep_rx_size(config->rx_size);
config->state->rx_waiting = 0;