Skip to content

Commit 8d97f0e

Browse files
authored
Merge pull request #1041 from HiFiPhile/vdc
Fix vendor fifo deadlock, add tud_vendor_n_read_flush
2 parents 155c186 + 4941cde commit 8d97f0e

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

src/class/vendor/vendor_device.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,13 @@ uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize)
103103
return num_read;
104104
}
105105

106+
void tud_vendor_n_read_flush (uint8_t itf)
107+
{
108+
vendord_interface_t* p_itf = &_vendord_itf[itf];
109+
tu_fifo_clear(&p_itf->rx_ff);
110+
_prep_out_transaction(p_itf);
111+
}
112+
106113
//--------------------------------------------------------------------+
107114
// Write API
108115
//--------------------------------------------------------------------+
@@ -199,6 +206,8 @@ uint16_t vendord_open(uint8_t rhport, tusb_desc_interface_t const * itf_desc, ui
199206
TU_BREAKPOINT();
200207
}
201208

209+
maybe_transmit(p_vendor);
210+
202211
return drv_len;
203212
}
204213

src/class/vendor/vendor_device.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ bool tud_vendor_n_mounted (uint8_t itf);
4545
uint32_t tud_vendor_n_available (uint8_t itf);
4646
uint32_t tud_vendor_n_read (uint8_t itf, void* buffer, uint32_t bufsize);
4747
bool tud_vendor_n_peek (uint8_t itf, uint8_t* u8);
48+
void tud_vendor_n_read_flush (uint8_t itf);
4849

4950
uint32_t tud_vendor_n_write (uint8_t itf, void const* buffer, uint32_t bufsize);
5051
uint32_t tud_vendor_n_write_available (uint8_t itf);
@@ -59,6 +60,7 @@ static inline bool tud_vendor_mounted (void);
5960
static inline uint32_t tud_vendor_available (void);
6061
static inline uint32_t tud_vendor_read (void* buffer, uint32_t bufsize);
6162
static inline bool tud_vendor_peek (uint8_t* u8);
63+
static inline void tud_vendor_read_flush (void);
6264
static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize);
6365
static inline uint32_t tud_vendor_write_str (char const* str);
6466
static inline uint32_t tud_vendor_write_available (void);
@@ -99,6 +101,11 @@ static inline bool tud_vendor_peek (uint8_t* u8)
99101
return tud_vendor_n_peek(0, u8);
100102
}
101103

104+
static inline void tud_vendor_read_flush(void)
105+
{
106+
tud_vendor_n_read_flush(0);
107+
}
108+
102109
static inline uint32_t tud_vendor_write (void const* buffer, uint32_t bufsize)
103110
{
104111
return tud_vendor_n_write(0, buffer, bufsize);

0 commit comments

Comments
 (0)