@@ -57,15 +57,15 @@ SARA_R5::SARA_R5(int powerPin, int resetPin, uint8_t maxInitTries)
57
57
58
58
SARA_R5::~SARA_R5 (void ) {
59
59
if (NULL != _saraRXBuffer) {
60
- delete [] _saraRXBuffer;
60
+ delete[] _saraRXBuffer;
61
61
_saraRXBuffer = NULL ;
62
62
}
63
63
if (NULL != _pruneBuffer) {
64
- delete [] _pruneBuffer;
64
+ delete[] _pruneBuffer;
65
65
_pruneBuffer = NULL ;
66
66
}
67
67
if (NULL != _saraResponseBacklog) {
68
- delete [] _saraResponseBacklog;
68
+ delete[] _saraResponseBacklog;
69
69
_saraResponseBacklog = NULL ;
70
70
}
71
71
}
@@ -74,6 +74,7 @@ SARA_R5::~SARA_R5(void) {
74
74
bool SARA_R5::begin (SoftwareSerial &softSerial, unsigned long baud)
75
75
{
76
76
if (NULL == _saraRXBuffer)
77
+ {
77
78
_saraRXBuffer = new char [_RXBuffSize];
78
79
if (NULL == _saraRXBuffer)
79
80
{
@@ -84,9 +85,10 @@ bool SARA_R5::begin(SoftwareSerial &softSerial, unsigned long baud)
84
85
}
85
86
memset (_saraRXBuffer, 0 , _RXBuffSize);
86
87
87
- if (NULL == _pruneBuffer) {
88
+ if (NULL == _pruneBuffer)
89
+ {
88
90
_pruneBuffer = new char [_RXBuffSize];
89
- if (NULL == _pruneBuffer) {
91
+ if (NULL == _pruneBuffer)
90
92
{
91
93
if (_printDebug == true )
92
94
_debugPort->println (F (" begin: not enough memory for _pruneBuffer!" ));
@@ -95,14 +97,16 @@ bool SARA_R5::begin(SoftwareSerial &softSerial, unsigned long baud)
95
97
}
96
98
memset (_pruneBuffer, 0 , _RXBuffSize);
97
99
98
- if (NULL == _saraResponseBacklog) {
99
- saraResponseBacklog = new char [_RXBuffSize];
100
- if (NULL == _saraResponseBacklog) {
100
+ if (NULL == _saraResponseBacklog)
101
+ {
102
+ _saraResponseBacklog = new char [_RXBuffSize];
103
+ if (NULL == _saraResponseBacklog)
101
104
{
102
105
if (_printDebug == true )
103
106
_debugPort->println (F (" begin: not enough memory for _saraResponseBacklog!" ));
104
107
return false ;
105
108
}
109
+ }
106
110
memset (_saraResponseBacklog, 0 , _RXBuffSize);
107
111
108
112
SARA_R5_error_t err;
@@ -120,30 +124,39 @@ bool SARA_R5::begin(SoftwareSerial &softSerial, unsigned long baud)
120
124
121
125
bool SARA_R5::begin (HardwareSerial &hardSerial, unsigned long baud)
122
126
{
123
- _saraRXBuffer = new char [_RXBuffSize];
124
- if (_saraRXBuffer == NULL )
127
+ if (NULL == _saraRXBuffer)
125
128
{
126
- if (_printDebug == true )
127
- _debugPort->println (F (" begin: not enough memory for _saraRXBuffer!" ));
128
- return false ;
129
+ _saraRXBuffer = new char [_RXBuffSize];
130
+ if (NULL == _saraRXBuffer)
131
+ {
132
+ if (_printDebug == true )
133
+ _debugPort->println (F (" begin: not enough memory for _saraRXBuffer!" ));
134
+ return false ;
135
+ }
129
136
}
130
137
memset (_saraRXBuffer, 0 , _RXBuffSize);
131
138
132
- _pruneBuffer = new char [_RXBuffSize];
133
- if (_pruneBuffer == NULL )
139
+ if (NULL == _pruneBuffer)
134
140
{
135
- if (_printDebug == true )
136
- _debugPort->println (F (" begin: not enough memory for _pruneBuffer!" ));
137
- return false ;
141
+ _pruneBuffer = new char [_RXBuffSize];
142
+ if (NULL == _pruneBuffer)
143
+ {
144
+ if (_printDebug == true )
145
+ _debugPort->println (F (" begin: not enough memory for _pruneBuffer!" ));
146
+ return false ;
147
+ }
138
148
}
139
149
memset (_pruneBuffer, 0 , _RXBuffSize);
140
-
141
- _saraResponseBacklog = new char [_RXBuffSize];
142
- if (_saraResponseBacklog == NULL )
150
+
151
+ if (NULL == _saraResponseBacklog)
143
152
{
144
- if (_printDebug == true )
145
- _debugPort->println (F (" begin: not enough memory for _saraResponseBacklog!" ));
146
- return false ;
153
+ _saraResponseBacklog = new char [_RXBuffSize];
154
+ if (NULL == _saraResponseBacklog)
155
+ {
156
+ if (_printDebug == true )
157
+ _debugPort->println (F (" begin: not enough memory for _saraResponseBacklog!" ));
158
+ return false ;
159
+ }
147
160
}
148
161
memset (_saraResponseBacklog, 0 , _RXBuffSize);
149
162
@@ -212,7 +225,14 @@ bool SARA_R5::bufferedPoll(void)
212
225
213
226
if ((hwAvailable () > 0 ) || (backlogLen > 0 )) // If either new data is available, or backlog had data.
214
227
{
215
- // Wait for up to _rxWindowMillis for new serial data to arrive.
228
+ // Check for incoming serial data. Copy it into the backlog
229
+
230
+ // Important note:
231
+ // On ESP32, Serial.available only provides an update every ~120 bytes during the reception of long messages:
232
+ // https://gitter.im/espressif/arduino-esp32?at=5e25d6370a1cf54144909c85
233
+ // Be aware that if a long message is being received, the code below will timeout after _rxWindowMillis = 2 millis.
234
+ // At 115200 baud, hwAvailable takes ~120 * 10 / 115200 = 10.4 millis before it indicates that data is being received.
235
+
216
236
while (((millis () - timeIn) < _rxWindowMillis) && (avail < _RXBuffSize))
217
237
{
218
238
if (hwAvailable () > 0 ) // hwAvailable can return -1 if the serial port is NULL
@@ -2558,7 +2578,7 @@ SARA_R5_error_t SARA_R5::socketWrite(int socket, const char *str, int len)
2558
2578
{
2559
2579
unsigned long writeDelay = millis ();
2560
2580
while (millis () < (writeDelay + 50 ))
2561
- delay (1 ); // uBlox specification says to wait 50ms after receiving "@" to write data.
2581
+ delay (1 ); // u-blox specification says to wait 50ms after receiving "@" to write data.
2562
2582
2563
2583
if (len == -1 )
2564
2584
{
@@ -5626,7 +5646,14 @@ SARA_R5_error_t SARA_R5::sendCustomCommandWithResponse(const char *command, cons
5626
5646
5627
5647
void SARA_R5::sendCommand (const char *command, bool at)
5628
5648
{
5629
- // Spend up to _rxWindowMillis milliseconds copying any incoming serial data into the backlog
5649
+ // Check for incoming serial data. Copy it into the backlog
5650
+
5651
+ // Important note:
5652
+ // On ESP32, Serial.available only provides an update every ~120 bytes during the reception of long messages:
5653
+ // https://gitter.im/espressif/arduino-esp32?at=5e25d6370a1cf54144909c85
5654
+ // Be aware that if a long message is being received, the code below will timeout after _rxWindowMillis = 2 millis.
5655
+ // At 115200 baud, hwAvailable takes ~120 * 10 / 115200 = 10.4 millis before it indicates that data is being received.
5656
+
5630
5657
unsigned long timeIn = millis ();
5631
5658
if (hwAvailable () > 0 ) // hwAvailable can return -1 if the serial port is NULL
5632
5659
{
0 commit comments