Skip to content

Commit 96a369f

Browse files
authored
Update Serial.cpp
Separated call back events UART_EVENT_TX_COMPLETE and UART_EVENT_TX_DATA_EMPTY and used UART_EVEN_TX_COMPLETE to determine when flush() should return
1 parent c77faa4 commit 96a369f

File tree

1 file changed

+15
-9
lines changed

1 file changed

+15
-9
lines changed

cores/arduino/Serial.cpp

+15-9
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,16 @@ void UART::WrapperCallback(uart_callback_args_t *p_args) {
5858
{
5959
break;
6060
}
61-
case UART_EVENT_TX_COMPLETE:
62-
case UART_EVENT_TX_DATA_EMPTY:
61+
case UART_EVENT_TX_COMPLETE: // This is call when the transmission is complete
62+
{
63+
uart_ptr->tx_complete = true;
64+
break;
65+
}
66+
case UART_EVENT_TX_DATA_EMPTY: // This is called when the buffer is empty
6367
{
6468
//uint8_t to_enqueue = uart_ptr->txBuffer.available() < uart_ptr->uart_ctrl.fifo_depth ? uart_ptr->txBuffer.available() : uart_ptr->uart_ctrl.fifo_depth;
6569
//while (to_enqueue) {
66-
uart_ptr->tx_done = true;
70+
uart_ptr->tx_empty = true;
6771
break;
6872
}
6973
case UART_EVENT_RX_CHAR:
@@ -109,9 +113,10 @@ bool UART::setUpUartIrqs(uart_cfg_t &cfg) {
109113
size_t UART::write(uint8_t c) {
110114
/* -------------------------------------------------------------------------- */
111115
if(init_ok) {
112-
tx_done = false;
116+
tx_empty = false;
117+
tx_complete = false;
113118
R_SCI_UART_Write(&uart_ctrl, &c, 1);
114-
while (!tx_done) {}
119+
while (!tx_empty) {}
115120
return 1;
116121
}
117122
else {
@@ -121,9 +126,10 @@ size_t UART::write(uint8_t c) {
121126

122127
size_t UART::write(uint8_t* c, size_t len) {
123128
if(init_ok) {
124-
tx_done = false;
129+
tx_empty = false;
130+
tx_complete = false;
125131
R_SCI_UART_Write(&uart_ctrl, c, len);
126-
while (!tx_done) {}
132+
while (!tx_empty) {}
127133
return len;
128134
}
129135
else {
@@ -322,7 +328,7 @@ int UART::read() {
322328
/* -------------------------------------------------------------------------- */
323329
void UART::flush() {
324330
/* -------------------------------------------------------------------------- */
325-
while(txBuffer.available());
331+
while(!tx_complete);
326332
}
327333

328334
/* -------------------------------------------------------------------------- */
@@ -335,4 +341,4 @@ size_t UART::write_raw(uint8_t* c, size_t len) {
335341
i++;
336342
}
337343
return len;
338-
}
344+
}

0 commit comments

Comments
 (0)