Skip to content

Commit 26052c8

Browse files
committed
Add TX buffer to CloudSerial
1 parent fd084c6 commit 26052c8

File tree

2 files changed

+20
-12
lines changed

2 files changed

+20
-12
lines changed

src/CloudSerial.cpp

+15-10
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ CloudSerialClass::~CloudSerialClass()
1212

1313
void CloudSerialClass::begin(int /*baud*/)
1414
{
15+
_txBuffer.clear();
1516
_rxBuffer.clear();
1617
}
1718

@@ -30,7 +31,7 @@ int CloudSerialClass::availableForWrite()
3031
{
3132
ArduinoCloud.poll();
3233

33-
return 1;
34+
return _txBuffer.availableForStore();
3435
}
3536

3637
int CloudSerialClass::peek()
@@ -50,22 +51,26 @@ int CloudSerialClass::read()
5051
void CloudSerialClass::flush()
5152
{
5253
ArduinoCloud.poll();
54+
55+
byte out[CLOUD_SERIAL_TX_BUFFER_SIZE];
56+
int length = 0;
57+
58+
while (_txBuffer.available()) {
59+
out[length++] = _txBuffer.read_char();
60+
}
61+
62+
ArduinoCloud.writeStdout(out, length);
5363
}
5464

5565
size_t CloudSerialClass::write(const uint8_t data)
5666
{
57-
return write(&data, sizeof(data));
58-
}
67+
_txBuffer.store_char(data);
5968

60-
size_t CloudSerialClass::write(const uint8_t *buffer, size_t size)
61-
{
62-
ArduinoCloud.poll();
63-
Serial.write(buffer, size);
64-
if (!ArduinoCloud.writeStdout(buffer, size)) {
65-
return 0;
69+
if (_txBuffer.isFull() || data == '\n') {
70+
flush();
6671
}
6772

68-
return size;
73+
return 1;
6974
}
7075

7176
CloudSerialClass::operator bool()

src/CloudSerial.h

+5-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
#include <RingBuffer.h>
77

8+
#define CLOUD_SERIAL_TX_BUFFER_SIZE 64
9+
#define CLOUD_SERIAL_RX_BUFFER_SIZE 512
10+
811
class ArduinoCloudClass;
912

1013
class CloudSerialClass : public Stream
@@ -21,7 +24,6 @@ class CloudSerialClass : public Stream
2124
int read();
2225
void flush();
2326
size_t write(const uint8_t data);
24-
size_t write(const uint8_t *buffer, size_t size);
2527
using Print::write; // pull in write(str) and write(buf, size) from Print
2628

2729
operator bool();
@@ -32,7 +34,8 @@ class CloudSerialClass : public Stream
3234
void appendStdin(const uint8_t *buffer, size_t size);
3335

3436
private:
35-
RingBufferN<512> _rxBuffer;
37+
RingBufferN<CLOUD_SERIAL_TX_BUFFER_SIZE> _txBuffer;
38+
RingBufferN<CLOUD_SERIAL_RX_BUFFER_SIZE> _rxBuffer;
3639
};
3740

3841
extern CloudSerialClass CloudSerial;

0 commit comments

Comments
 (0)