Skip to content

Commit 93aaa86

Browse files
committed
Merge pull request #1166 from alltheblinkythings/SerialStuff
Always arm the "TX FIFO Empty" interrupt after we write into _tx_buffer.
2 parents 6d32c67 + d8417c2 commit 93aaa86

File tree

2 files changed

+9
-13
lines changed

2 files changed

+9
-13
lines changed

cores/esp8266/HardwareSerial.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -617,18 +617,15 @@ size_t HardwareSerial::write(uint8_t c) {
617617
size_t room = uart_get_tx_fifo_room(_uart);
618618
if(room > 0 && _tx_buffer->empty()) {
619619
uart_transmit_char(_uart, c);
620-
if(room < 10) {
621-
uart_arm_tx_interrupt(_uart);
622-
}
623620
return 1;
624621
}
625622

626623
while(_tx_buffer->room() == 0) {
627624
yield();
628-
uart_arm_tx_interrupt(_uart);
629625
}
630626

631627
_tx_buffer->write(c);
628+
uart_arm_tx_interrupt(_uart);
632629
return 1;
633630
}
634631

cores/esp8266/cbuf.h

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,6 @@ class cbuf {
4242
if(_end >= _begin) {
4343
return _size - (_end - _begin) - 1;
4444
}
45-
if(_begin == _end) {
46-
return _size;
47-
}
4845
return _begin - _end - 1;
4946
}
5047

@@ -62,7 +59,7 @@ class cbuf {
6259
if(getSize() == 0) return -1;
6360

6461
char result = *_begin;
65-
if(++_begin == _bufend) _begin = _buf;
62+
_begin = wrap_if_bufend(_begin + 1);
6663
return static_cast<int>(result);
6764
}
6865

@@ -78,16 +75,15 @@ class cbuf {
7875
dst += top_size;
7976
}
8077
memcpy(dst, _begin, size_to_read);
81-
_begin += size_to_read;
82-
if(_begin == _bufend) _begin = _buf;
78+
_begin = wrap_if_bufend(_begin + size_to_read);
8379
return size_read;
8480
}
8581

8682
size_t write(char c) {
8783
if(room() == 0) return 0;
8884

8985
*_end = c;
90-
if(++_end == _bufend) _end = _buf;
86+
_end = wrap_if_bufend(_end + 1);
9187
return 1;
9288
}
9389

@@ -103,8 +99,7 @@ class cbuf {
10399
src += top_size;
104100
}
105101
memcpy(_end, src, size_to_write);
106-
_end += size_to_write;
107-
if(_end == _bufend) _end = _buf;
102+
_end = wrap_if_bufend(_end + size_to_write);
108103
return size_written;
109104
}
110105

@@ -114,6 +109,10 @@ class cbuf {
114109
}
115110

116111
private:
112+
inline char* wrap_if_bufend(char* ptr) {
113+
return (ptr == _bufend) ? _buf : ptr;
114+
}
115+
117116
size_t _size;
118117
char* _buf;
119118
char* _bufend;

0 commit comments

Comments
 (0)