summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/class/cdc/cdc_device.c2
-rw-r--r--src/common/tusb_fifo.c19
-rw-r--r--src/common/tusb_fifo.h1
3 files changed, 21 insertions, 1 deletions
diff --git a/src/class/cdc/cdc_device.c b/src/class/cdc/cdc_device.c
index 6c0f5fc7a..6f71cb781 100644
--- a/src/class/cdc/cdc_device.c
+++ b/src/class/cdc/cdc_device.c
@@ -356,7 +356,7 @@ bool cdcd_control_request(uint8_t rhport, tusb_control_request_t const * request
p_cdc->line_state = (uint8_t) request->wValue;
// Disable fifo overwriting if DTR bit is set
- p_cdc->tx_ff.overwritable = dtr ? false : true;
+ tu_fifo_change_mode(&p_cdc->tx_ff, (dtr?false:true));
TU_LOG2(" Set Control Line State: DTR = %d, RTS = %d\r\n", dtr, rts);
diff --git a/src/common/tusb_fifo.c b/src/common/tusb_fifo.c
index 6ab158cca..fdd8c3e35 100644
--- a/src/common/tusb_fifo.c
+++ b/src/common/tusb_fifo.c
@@ -319,3 +319,22 @@ bool tu_fifo_clear(tu_fifo_t *f)
return true;
}
+
+/******************************************************************************/
+/*!
+ @brief Change the fifo mode to overwritable or not overwritable
+
+ @param[in] f
+ Pointer to the FIFO buffer to manipulate
+*/
+/******************************************************************************/
+bool tu_fifo_change_mode(tu_fifo_t *f, bool overwritable)
+{
+ tu_fifo_lock(f);
+
+ f->overwritable = overwritable;
+
+ tu_fifo_unlock(f);
+
+ return true;
+}
diff --git a/src/common/tusb_fifo.h b/src/common/tusb_fifo.h
index fb0c896f3..7957d83af 100644
--- a/src/common/tusb_fifo.h
+++ b/src/common/tusb_fifo.h
@@ -76,6 +76,7 @@ typedef struct
.overwritable = _overwritable, \
}
+bool tu_fifo_change_mode(tu_fifo_t *f, bool overwritable);
bool tu_fifo_clear(tu_fifo_t *f);
bool tu_fifo_config(tu_fifo_t *f, void* buffer, uint16_t depth, uint16_t item_size, bool overwritable);