summaryrefslogtreecommitdiff
path: root/src/class/vendor
diff options
context:
space:
mode:
authorHa Thach <[email protected]>2025-11-27 11:42:31 +0700
committerGitHub <[email protected]>2025-11-27 11:42:31 +0700
commit5ef55bfa30d6f8cf175b3d327f621c76aae7b138 (patch)
tree26fd4779ccaa8b7b2d6cb5aa3badc02fa1cd6a67 /src/class/vendor
parent38842491bb55260c0cc7d7709abe5b0e73a0de61 (diff)
parent8cf2c3b00b2f8188571e4bd9f0e66ffc5ae188a3 (diff)
Merge pull request #3359 from hathach/xfer-fifo
remove ep buffer for port with dedicated hw fifo
Diffstat (limited to 'src/class/vendor')
-rw-r--r--src/class/vendor/vendor_device.c47
1 files changed, 18 insertions, 29 deletions
diff --git a/src/class/vendor/vendor_device.c b/src/class/vendor/vendor_device.c
index 7da4d2239..c7903375d 100644
--- a/src/class/vendor/vendor_device.c
+++ b/src/class/vendor/vendor_device.c
@@ -37,6 +37,7 @@
// MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+
typedef struct {
+ uint8_t rhport;
uint8_t itf_num;
/*------------- From this point, data is not cleared by bus reset -------------*/
@@ -97,32 +98,26 @@ bool tud_vendor_n_mounted(uint8_t itf) {
uint32_t tud_vendor_n_available(uint8_t itf) {
TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
vendord_interface_t* p_itf = &_vendord_itf[itf];
-
return tu_edpt_stream_read_available(&p_itf->rx.stream);
}
bool tud_vendor_n_peek(uint8_t itf, uint8_t* u8) {
TU_VERIFY(itf < CFG_TUD_VENDOR);
vendord_interface_t* p_itf = &_vendord_itf[itf];
-
return tu_edpt_stream_peek(&p_itf->rx.stream, u8);
}
uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize) {
TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
vendord_interface_t* p_itf = &_vendord_itf[itf];
- const uint8_t rhport = 0;
-
- return tu_edpt_stream_read(rhport, &p_itf->rx.stream, buffer, bufsize);
+ return tu_edpt_stream_read(p_itf->rhport, &p_itf->rx.stream, buffer, bufsize);
}
void tud_vendor_n_read_flush (uint8_t itf) {
TU_VERIFY(itf < CFG_TUD_VENDOR, );
vendord_interface_t* p_itf = &_vendord_itf[itf];
- const uint8_t rhport = 0;
-
tu_edpt_stream_clear(&p_itf->rx.stream);
- tu_edpt_stream_read_xfer(rhport, &p_itf->rx.stream);
+ tu_edpt_stream_read_xfer(p_itf->rhport, &p_itf->rx.stream);
}
//--------------------------------------------------------------------+
@@ -131,25 +126,19 @@ void tud_vendor_n_read_flush (uint8_t itf) {
uint32_t tud_vendor_n_write (uint8_t itf, const void* buffer, uint32_t bufsize) {
TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
vendord_interface_t* p_itf = &_vendord_itf[itf];
- const uint8_t rhport = 0;
-
- return tu_edpt_stream_write(rhport, &p_itf->tx.stream, buffer, (uint16_t) bufsize);
+ return tu_edpt_stream_write(p_itf->rhport, &p_itf->tx.stream, buffer, (uint16_t)bufsize);
}
uint32_t tud_vendor_n_write_flush (uint8_t itf) {
TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
vendord_interface_t* p_itf = &_vendord_itf[itf];
- const uint8_t rhport = 0;
-
- return tu_edpt_stream_write_xfer(rhport, &p_itf->tx.stream);
+ return tu_edpt_stream_write_xfer(p_itf->rhport, &p_itf->tx.stream);
}
uint32_t tud_vendor_n_write_available (uint8_t itf) {
TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
vendord_interface_t* p_itf = &_vendord_itf[itf];
- const uint8_t rhport = 0;
-
- return tu_edpt_stream_write_available(rhport, &p_itf->tx.stream);
+ return tu_edpt_stream_write_available(p_itf->rhport, &p_itf->tx.stream);
}
//--------------------------------------------------------------------+
@@ -162,23 +151,21 @@ void vendord_init(void) {
vendord_interface_t* p_itf = &_vendord_itf[i];
vendord_epbuf_t* p_epbuf = &_vendord_epbuf[i];
- uint8_t* rx_ff_buf =
- #if CFG_TUD_VENDOR_RX_BUFSIZE > 0
- p_itf->rx.ff_buf;
- #else
- NULL;
- #endif
+ #if CFG_TUD_VENDOR_RX_BUFSIZE > 0
+ uint8_t *rx_ff_buf = p_itf->rx.ff_buf;
+ #else
+ uint8_t *rx_ff_buf = NULL;
+ #endif
tu_edpt_stream_init(&p_itf->rx.stream, false, false, false,
rx_ff_buf, CFG_TUD_VENDOR_RX_BUFSIZE,
p_epbuf->epout, CFG_TUD_VENDOR_EPSIZE);
- uint8_t* tx_ff_buf =
- #if CFG_TUD_VENDOR_TX_BUFSIZE > 0
- p_itf->tx.ff_buf;
- #else
- NULL;
- #endif
+ #if CFG_TUD_VENDOR_TX_BUFSIZE > 0
+ uint8_t *tx_ff_buf = p_itf->tx.ff_buf;
+ #else
+ uint8_t* tx_ff_buf = NULL;
+ #endif
tu_edpt_stream_init(&p_itf->tx.stream, false, true, false,
tx_ff_buf, CFG_TUD_VENDOR_TX_BUFSIZE,
@@ -225,7 +212,9 @@ uint16_t vendord_open(uint8_t rhport, const tusb_desc_interface_t* desc_itf, uin
}
TU_VERIFY(p_vendor, 0);
+ p_vendor->rhport = rhport;
p_vendor->itf_num = desc_itf->bInterfaceNumber;
+
while (tu_desc_in_bounds(p_desc, desc_end)) {
const uint8_t desc_type = tu_desc_type(p_desc);
if (desc_type == TUSB_DESC_INTERFACE || desc_type == TUSB_DESC_INTERFACE_ASSOCIATION) {