File tree 2 files changed +20
-12
lines changed
2 files changed +20
-12
lines changed Original file line number Diff line number Diff line change @@ -12,6 +12,7 @@ CloudSerialClass::~CloudSerialClass()
12
12
13
13
void CloudSerialClass::begin (int /* baud*/ )
14
14
{
15
+ _txBuffer.clear ();
15
16
_rxBuffer.clear ();
16
17
}
17
18
@@ -30,7 +31,7 @@ int CloudSerialClass::availableForWrite()
30
31
{
31
32
ArduinoCloud.poll ();
32
33
33
- return 1 ;
34
+ return _txBuffer. availableForStore () ;
34
35
}
35
36
36
37
int CloudSerialClass::peek ()
@@ -50,22 +51,26 @@ int CloudSerialClass::read()
50
51
void CloudSerialClass::flush ()
51
52
{
52
53
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);
53
63
}
54
64
55
65
size_t CloudSerialClass::write (const uint8_t data)
56
66
{
57
- return write (&data, sizeof (data));
58
- }
67
+ _txBuffer.store_char (data);
59
68
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 ();
66
71
}
67
72
68
- return size ;
73
+ return 1 ;
69
74
}
70
75
71
76
CloudSerialClass::operator bool ()
Original file line number Diff line number Diff line change 5
5
6
6
#include < RingBuffer.h>
7
7
8
+ #define CLOUD_SERIAL_TX_BUFFER_SIZE 64
9
+ #define CLOUD_SERIAL_RX_BUFFER_SIZE 512
10
+
8
11
class ArduinoCloudClass ;
9
12
10
13
class CloudSerialClass : public Stream
@@ -21,7 +24,6 @@ class CloudSerialClass : public Stream
21
24
int read ();
22
25
void flush ();
23
26
size_t write (const uint8_t data);
24
- size_t write (const uint8_t *buffer, size_t size);
25
27
using Print::write; // pull in write(str) and write(buf, size) from Print
26
28
27
29
operator bool ();
@@ -32,7 +34,8 @@ class CloudSerialClass : public Stream
32
34
void appendStdin (const uint8_t *buffer, size_t size);
33
35
34
36
private:
35
- RingBufferN<512 > _rxBuffer;
37
+ RingBufferN<CLOUD_SERIAL_TX_BUFFER_SIZE> _txBuffer;
38
+ RingBufferN<CLOUD_SERIAL_RX_BUFFER_SIZE> _rxBuffer;
36
39
};
37
40
38
41
extern CloudSerialClass CloudSerial;
You can’t perform that action at this time.
0 commit comments