mirror of
https://github.com/hathach/tinyusb.git
synced 2026-02-06 05:35:48 +00:00
fix edpt stream write/read to endpoint not yet opened
This commit is contained in:
@ -43,8 +43,6 @@
|
||||
//--------------------------------------------------------------------+
|
||||
// MACRO CONSTANT TYPEDEF
|
||||
//--------------------------------------------------------------------+
|
||||
#define BULK_PACKET_SIZE (TUD_OPT_HIGH_SPEED ? 512 : 64)
|
||||
|
||||
typedef struct {
|
||||
uint8_t rhport;
|
||||
uint8_t itf_num;
|
||||
|
||||
@ -171,15 +171,12 @@ uint32_t tud_midi_n_stream_read(uint8_t itf, uint8_t cable_num, void *buffer, ui
|
||||
bool tud_midi_n_packet_read(uint8_t itf, uint8_t packet[4]) {
|
||||
midid_interface_t *p_midi = &_midid_itf[itf];
|
||||
tu_edpt_stream_t *ep_str = &p_midi->ep_stream.rx;
|
||||
TU_VERIFY(tu_edpt_stream_is_opened(ep_str));
|
||||
return 4 == tu_edpt_stream_read(ep_str, packet, 4);
|
||||
}
|
||||
|
||||
uint32_t tud_midi_n_packet_read_n(uint8_t itf, uint8_t packets[], uint32_t max_packets) {
|
||||
midid_interface_t *p_midi = &_midid_itf[itf];
|
||||
tu_edpt_stream_t *ep_str = &p_midi->ep_stream.rx;
|
||||
TU_VERIFY(tu_edpt_stream_is_opened(ep_str), 0);
|
||||
|
||||
const uint32_t num_read = tu_edpt_stream_read(ep_str, packets, 4u * max_packets);
|
||||
return num_read >> 2u;
|
||||
}
|
||||
|
||||
@ -289,7 +289,7 @@ static void ff_pull_n(const tu_fifo_t *f, void *app_buf, uint16_t n, uint16_t rd
|
||||
|
||||
// Advance an absolute index
|
||||
// "absolute" index is only in the range of [0..2*depth)
|
||||
TU_ATTR_ALWAYS_INLINE static inline uint16_t advance_index(uint16_t depth, uint16_t idx, uint16_t offset) {
|
||||
static uint16_t advance_index(uint16_t depth, uint16_t idx, uint16_t offset) {
|
||||
// We limit the index space of p such that a correct wrap around happens
|
||||
// Check for a wrap around or if we are in unused index space - This has to be checked first!!
|
||||
// We are exploiting the wrap around to the correct index
|
||||
@ -313,7 +313,7 @@ TU_ATTR_ALWAYS_INLINE static inline uint16_t idx2ptr(uint16_t depth, uint16_t id
|
||||
|
||||
// Works on local copies of w
|
||||
// When an overwritable fifo is overflowed, rd_idx will be re-index so that it forms a full fifo
|
||||
TU_ATTR_ALWAYS_INLINE static inline uint16_t correct_read_index(tu_fifo_t *f, uint16_t wr_idx) {
|
||||
static uint16_t correct_read_index(tu_fifo_t *f, uint16_t wr_idx) {
|
||||
uint16_t rd_idx;
|
||||
if (wr_idx >= f->depth) {
|
||||
rd_idx = wr_idx - f->depth;
|
||||
|
||||
@ -332,6 +332,7 @@ bool tu_edpt_stream_init(tu_edpt_stream_t *s, bool is_host, bool is_tx, bool ove
|
||||
}
|
||||
|
||||
static bool stream_claim(tu_edpt_stream_t *s) {
|
||||
TU_VERIFY(s->ep_addr != 0); // must be opened
|
||||
if (s->is_host) {
|
||||
#if CFG_TUH_ENABLED
|
||||
return usbh_edpt_claim(s->hwid, s->ep_addr);
|
||||
@ -446,6 +447,7 @@ uint32_t tu_edpt_stream_write_available(tu_edpt_stream_t *s) {
|
||||
#if CFG_TUSB_EDPT_STREAM_NO_FIFO_ENABLED
|
||||
if (0 == tu_fifo_depth(&s->ff)) {
|
||||
// non-fifo mode
|
||||
TU_VERIFY(s->ep_addr > 0); // must be opened
|
||||
bool is_busy = true;
|
||||
if (s->is_host) {
|
||||
#if CFG_TUH_ENABLED
|
||||
|
||||
Reference in New Issue
Block a user