Skip to content

Commit e5c7cb9

Browse files
committed
Merge pull request #2193 from PaulStoffregen/ide-1.5.x
Add availableForWrite() to HardwareSerial
2 parents 641ea44 + 33cec73 commit e5c7cb9

File tree

3 files changed

+17
-0
lines changed

3 files changed

+17
-0
lines changed

Diff for: build/shared/lib/keywords.txt

+1
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ read KEYWORD2 Serial_Read
177177
print KEYWORD2 Serial_Print
178178
println KEYWORD2 Serial_Println
179179
available KEYWORD2 Serial_Available
180+
availableForWrite KEYWORD2
180181
flush KEYWORD2 Serial_Flush
181182
setTimeout KEYWORD2
182183
find KEYWORD2

Diff for: hardware/arduino/avr/cores/arduino/HardwareSerial.cpp

+15
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,21 @@ int HardwareSerial::read(void)
176176
}
177177
}
178178

179+
int HardwareSerial::availableForWrite(void)
180+
{
181+
#if (SERIAL_TX_BUFFER_SIZE>256)
182+
uint8_t oldSREG = SREG;
183+
cli();
184+
#endif
185+
tx_buffer_index_t head = _tx_buffer_head;
186+
tx_buffer_index_t tail = _tx_buffer_tail;
187+
#if (SERIAL_TX_BUFFER_SIZE>256)
188+
SREG = oldSREG;
189+
#endif
190+
if (head >= tail) return SERIAL_TX_BUFFER_SIZE - 1 - head + tail;
191+
return tail - head - 1;
192+
}
193+
179194
void HardwareSerial::flush()
180195
{
181196
// If we have never written a byte, no need to flush. This special

Diff for: hardware/arduino/avr/cores/arduino/HardwareSerial.h

+1
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ class HardwareSerial : public Stream
112112
virtual int available(void);
113113
virtual int peek(void);
114114
virtual int read(void);
115+
int availableForWrite(void);
115116
virtual void flush(void);
116117
virtual size_t write(uint8_t);
117118
inline size_t write(unsigned long n) { return write((uint8_t)n); }

0 commit comments

Comments
 (0)