summaryrefslogtreecommitdiff
path: root/src/tusb.c
diff options
context:
space:
mode:
authorhathach <[email protected]>2025-11-27 18:41:57 +0700
committerhathach <[email protected]>2025-11-27 18:41:57 +0700
commit9a9bf0fd7b5a005fd4701ab6cb5b1728ecc0baa2 (patch)
tree4c67b1edfec639aac4f36b398da38ad267bd0dd7 /src/tusb.c
parentf3dc2186aea9a472fe13ecab06464fbead50f0dd (diff)
change tud_vendor_rx_cb() behavior, buffer and bufsize only available when CFG_TUD_VENDOR_RX_BUFSIZE = 0
update vendor device to omit ep buf when dedicated hwfifo is supported
Diffstat (limited to 'src/tusb.c')
-rw-r--r--src/tusb.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/src/tusb.c b/src/tusb.c
index 2d122885b..94121b174 100644
--- a/src/tusb.c
+++ b/src/tusb.c
@@ -450,12 +450,19 @@ uint32_t tu_edpt_stream_write(uint8_t hwid, tu_edpt_stream_t *s, const void *buf
TU_VERIFY(bufsize > 0); // TODO support ZLP
if (0 == tu_fifo_depth(&s->ff)) {
- // non-fifo mode, ep_buf must be valid
- TU_VERIFY(s->ep_buf != NULL, 0);
+ // non-fifo mode
TU_VERIFY(stream_claim(hwid, s), 0);
- const uint32_t xact_len = tu_min32(bufsize, s->ep_bufsize);
- memcpy(s->ep_buf, buffer, xact_len);
+ uint32_t xact_len;
+ if (s->ep_buf != NULL) {
+ // using ep buf
+ xact_len = tu_min32(bufsize, s->ep_bufsize);
+ memcpy(s->ep_buf, buffer, xact_len);
+ } else {
+ // using hwfifo
+ xact_len = bufsize;
+ }
TU_ASSERT(stream_xfer(hwid, s, (uint16_t) xact_len), 0);
+
return xact_len;
} else {
const uint16_t ret = tu_fifo_write_n(&s->ff, buffer, (uint16_t) bufsize);
@@ -494,7 +501,8 @@ uint32_t tu_edpt_stream_write_available(uint8_t hwid, tu_edpt_stream_t* s) {
//--------------------------------------------------------------------+
uint32_t tu_edpt_stream_read_xfer(uint8_t hwid, tu_edpt_stream_t* s) {
if (0 == tu_fifo_depth(&s->ff)) {
- // non-fifo mode
+ // non-fifo mode: RX need ep buffer
+ TU_VERIFY(s->ep_buf != NULL, 0);
TU_VERIFY(stream_claim(hwid, s), 0);
TU_ASSERT(stream_xfer(hwid, s, s->ep_bufsize), 0);
return s->ep_bufsize;
@@ -507,11 +515,8 @@ uint32_t tu_edpt_stream_read_xfer(uint8_t hwid, tu_edpt_stream_t* s) {
// and slowly move it to the FIFO when read().
// This pre-check reduces endpoint claiming
TU_VERIFY(available >= mps);
-
TU_VERIFY(stream_claim(hwid, s), 0);
-
- // get available again since fifo can be changed before endpoint is claimed
- available = tu_fifo_remaining(&s->ff);
+ available = tu_fifo_remaining(&s->ff); // re-get available since fifo can be changed
if (available >= mps) {
// multiple of packet size limit by ep bufsize
@@ -532,7 +537,7 @@ uint32_t tu_edpt_stream_read(uint8_t hwid, tu_edpt_stream_t* s, void* buffer, ui
if (tu_fifo_depth(&s->ff) > 0) {
num_read = tu_fifo_read_n(&s->ff, buffer, (uint16_t)bufsize);
} else {
- // non-fifo mode
+ // non-fifo mode not support this
num_read = 0;
}