HardwareSerial::write(const char*, ...) API compatibility to AVR, ESP8266, et al (#3585)

* API compatibility to AVR, ESP8266, et al

* Add non-blocking HardwareSerial::read(buffer, size) extension (ESP8266 portability)

* Refactor for fewer indirect calls.
This commit is contained in:
Dirk O. Kaar 2020-01-20 14:54:50 +01:00 committed by Me No Dev
parent 6e77f7f3e5
commit 0607d36734
2 changed files with 27 additions and 1 deletions

View File

@ -131,6 +131,24 @@ int HardwareSerial::read(void)
return -1; return -1;
} }
// read characters into buffer
// terminates if size characters have been read, or no further are pending
// returns the number of characters placed in the buffer
// the buffer is NOT null terminated.
size_t HardwareSerial::read(uint8_t *buffer, size_t size)
{
size_t avail = available();
if (size < avail) {
avail = size;
}
size_t count = 0;
while(count < avail) {
*buffer++ = uartRead(_uart);
count++;
}
return count;
}
void HardwareSerial::flush(void) void HardwareSerial::flush(void)
{ {
uartFlush(_uart); uartFlush(_uart);

View File

@ -62,11 +62,19 @@ public:
int availableForWrite(void); int availableForWrite(void);
int peek(void); int peek(void);
int read(void); int read(void);
size_t read(uint8_t *buffer, size_t size);
inline size_t read(char * buffer, size_t size)
{
return read((uint8_t*) buffer, size);
}
void flush(void); void flush(void);
void flush( bool txOnly); void flush( bool txOnly);
size_t write(uint8_t); size_t write(uint8_t);
size_t write(const uint8_t *buffer, size_t size); size_t write(const uint8_t *buffer, size_t size);
inline size_t write(const char * buffer, size_t size)
{
return write((uint8_t*) buffer, size);
}
inline size_t write(const char * s) inline size_t write(const char * s)
{ {
return write((uint8_t*) s, strlen(s)); return write((uint8_t*) s, strlen(s));