29#if (CFG_TUD_ENABLED && CFG_TUD_VENDOR)
44 CFG_TUD_MEM_ALIGN uint8_t epout_buf[CFG_TUD_VENDOR_EPSIZE];
45 CFG_TUD_MEM_ALIGN uint8_t epin_buf[CFG_TUD_VENDOR_EPSIZE];
49 #if CFG_TUD_VENDOR_TX_BUFSIZE > 0
50 uint8_t ff_buf[CFG_TUD_VENDOR_TX_BUFSIZE];
56 #if CFG_TUD_VENDOR_RX_BUFSIZE > 0
57 uint8_t ff_buf[CFG_TUD_VENDOR_RX_BUFSIZE];
65#define ITF_MEM_RESET_SIZE (offsetof(vendord_interface_t, itf_num) + sizeof(((vendord_interface_t *)0)->itf_num))
72 TU_VERIFY(itf < CFG_TUD_VENDOR);
81 TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
88 TU_VERIFY(itf < CFG_TUD_VENDOR);
95 TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
97 uint8_t
const rhport = 0;
103 TU_VERIFY(itf < CFG_TUD_VENDOR, );
105 uint8_t
const rhport = 0;
115 TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
117 uint8_t
const rhport = 0;
123 TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
125 uint8_t
const rhport = 0;
131 TU_VERIFY(itf < CFG_TUD_VENDOR, 0);
133 uint8_t
const rhport = 0;
144 for(uint8_t i=0; i<CFG_TUD_VENDOR; i++) {
148 #if CFG_TUD_VENDOR_RX_BUFSIZE > 0
155 rx_ff_buf, CFG_TUD_VENDOR_RX_BUFSIZE,
156 p_itf->
epout_buf, CFG_TUD_VENDOR_EPSIZE);
159 #if CFG_TUD_VENDOR_TX_BUFSIZE > 0
166 tx_ff_buf, CFG_TUD_VENDOR_TX_BUFSIZE,
167 p_itf->
epin_buf, CFG_TUD_VENDOR_EPSIZE);
172 for(uint8_t i=0; i<CFG_TUD_VENDOR; i++) {
183 for(uint8_t i=0; i<CFG_TUD_VENDOR; i++) {
185 tu_memclr(p_itf, ITF_MEM_RESET_SIZE);
196 const uint8_t* desc_end = p_desc + max_len;
200 for(uint8_t i=0; i<CFG_TUD_VENDOR; i++) {
206 TU_VERIFY(p_vendor, 0);
209 uint8_t found_ep = 0;
210 while (found_ep < desc_itf->bNumEndpoints) {
215 if (p_desc >= desc_end) {
234 return (uint16_t) ((uintptr_t) p_desc - (uintptr_t) desc_itf);
243 for ( ; ; itf++, p_itf++) {
244 if (itf >= CFG_TUD_VENDOR)
return false;
264 #if CFG_TUD_VENDOR_TX_BUFSIZE > 0
AUDIO Channel Cluster Descriptor (4.1)
uint8_t bInterfaceClass
Class code (assigned by the USB-IF).
uint8_t bInterfaceNumber
Number of this interface. Zero-based value identifying the index in the array of concurrent interface...
struct vendord_interface_t::@53 rx
uint8_t ff_buf[CFG_TUD_VENDOR_TX_BUFSIZE]
CFG_TUD_MEM_ALIGN uint8_t epin_buf[CFG_TUD_VENDOR_EPSIZE]
CFG_TUD_MEM_ALIGN uint8_t epout_buf[CFG_TUD_VENDOR_EPSIZE]
struct vendord_interface_t::@52 tx
bool tu_edpt_stream_write_zlp_if_needed(uint8_t hwid, tu_edpt_stream_t *s, uint32_t last_xferred_bytes)
static TU_ATTR_ALWAYS_INLINE bool tu_edpt_stream_clear(tu_edpt_stream_t *s)
static TU_ATTR_ALWAYS_INLINE void tu_edpt_stream_close(tu_edpt_stream_t *s)
static TU_ATTR_ALWAYS_INLINE bool tu_edpt_stream_peek(tu_edpt_stream_t *s, uint8_t *ch)
static TU_ATTR_ALWAYS_INLINE uint32_t tu_edpt_stream_read_available(tu_edpt_stream_t *s)
uint32_t tu_edpt_stream_read_xfer(uint8_t hwid, tu_edpt_stream_t *s)
uint32_t tu_edpt_stream_read(uint8_t hwid, tu_edpt_stream_t *s, void *buffer, uint32_t bufsize)
uint32_t tu_edpt_stream_write_available(uint8_t hwid, tu_edpt_stream_t *s)
uint32_t tu_edpt_stream_write_xfer(uint8_t hwid, tu_edpt_stream_t *s)
uint32_t tu_edpt_stream_write(uint8_t hwid, tu_edpt_stream_t *s, void const *buffer, uint32_t bufsize)
static TU_ATTR_ALWAYS_INLINE void tu_edpt_stream_read_xfer_complete(tu_edpt_stream_t *s, uint32_t xferred_bytes)
static TU_ATTR_ALWAYS_INLINE void tu_edpt_stream_open(tu_edpt_stream_t *s, tusb_desc_endpoint_t const *desc_ep)
bool tu_edpt_stream_init(tu_edpt_stream_t *s, bool is_host, bool is_tx, bool overwritable, void *ff_buf, uint16_t ff_bufsize, uint8_t *ep_buf, uint16_t ep_bufsize)
bool tu_edpt_stream_deinit(tu_edpt_stream_t *s)
@ TUSB_CLASS_VENDOR_SPECIFIC
TU_ATTR_PACKED_END TU_ATTR_BIT_FIELD_ORDER_END static TU_ATTR_ALWAYS_INLINE tusb_dir_t tu_edpt_dir(uint8_t addr)
static TU_ATTR_ALWAYS_INLINE uint8_t tu_desc_type(void const *desc)
static TU_ATTR_ALWAYS_INLINE uint8_t const * tu_desc_next(void const *desc)
bool usbd_edpt_open(uint8_t rhport, tusb_desc_endpoint_t const *desc_ep)
bool vendord_deinit(void)
uint32_t tud_vendor_n_available(uint8_t itf)
void vendord_reset(uint8_t rhport)
uint32_t tud_vendor_n_read(uint8_t itf, void *buffer, uint32_t bufsize)
void tud_vendor_n_read_flush(uint8_t itf)
static CFG_TUD_MEM_SECTION vendord_interface_t _vendord_itf[CFG_TUD_VENDOR]
uint32_t tud_vendor_n_write(uint8_t itf, void const *buffer, uint32_t bufsize)
uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const *desc_itf, uint16_t max_len)
bool tud_vendor_n_peek(uint8_t itf, uint8_t *u8)
uint32_t tud_vendor_n_write_available(uint8_t itf)
bool vendord_xfer_cb(uint8_t rhport, uint8_t ep_addr, xfer_result_t result, uint32_t xferred_bytes)
bool tud_vendor_n_mounted(uint8_t itf)
uint32_t tud_vendor_n_write_flush(uint8_t itf)
TU_ATTR_WEAK void tud_vendor_tx_cb(uint8_t itf, uint32_t sent_bytes)
TU_ATTR_WEAK void tud_vendor_rx_cb(uint8_t itf, uint8_t const *buffer, uint16_t bufsize)