Skip to content

Commit 004eb4a

Browse files
committed
Allocate memory for _saraRXBuffer, _pruneBuffer & _saraResponseBacklog in begin
1 parent a03c336 commit 004eb4a

File tree

2 files changed

+57
-7
lines changed

2 files changed

+57
-7
lines changed

src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp

Lines changed: 54 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -44,16 +44,39 @@ SARA_R5::SARA_R5(int powerPin, int resetPin, uint8_t maxInitDepth)
4444
_bufferedPollReentrant = false;
4545
_pollReentrant = false;
4646
_currentInitDepth = 0;
47-
48-
memset(_saraRXBuffer, 0, _RXBuffSize);
49-
memset(_pruneBuffer, 0, _RXBuffSize);
50-
memset(_saraResponseBacklog, 0, _RXBuffSize);
5147
_saraResponseBacklogLength = 0;
5248
}
5349

5450
#ifdef SARA_R5_SOFTWARE_SERIAL_ENABLED
5551
bool SARA_R5::begin(SoftwareSerial &softSerial, unsigned long baud)
5652
{
53+
_saraRXBuffer = new char[_RXBuffSize];
54+
if (_saraRXBuffer == NULL)
55+
{
56+
if (_printDebug == true)
57+
_debugPort->println(F("begin: not enough memory for _saraRXBuffer!"));
58+
return false;
59+
}
60+
memset(_saraRXBuffer, 0, _RXBuffSize);
61+
62+
_pruneBuffer = new char[_RXBuffSize];
63+
if (_pruneBuffer == NULL)
64+
{
65+
if (_printDebug == true)
66+
_debugPort->println(F("begin: not enough memory for _pruneBuffer!"));
67+
return false;
68+
}
69+
memset(_pruneBuffer, 0, _RXBuffSize);
70+
71+
_saraResponseBacklog = new char[_RXBuffSize];
72+
if (_saraResponseBacklog == NULL)
73+
{
74+
if (_printDebug == true)
75+
_debugPort->println(F("begin: not enough memory for _saraResponseBacklog!"));
76+
return false;
77+
}
78+
memset(_saraResponseBacklog, 0, _RXBuffSize);
79+
5780
SARA_R5_error_t err;
5881

5982
_softSerial = &softSerial;
@@ -69,6 +92,33 @@ bool SARA_R5::begin(SoftwareSerial &softSerial, unsigned long baud)
6992

7093
bool SARA_R5::begin(HardwareSerial &hardSerial, unsigned long baud)
7194
{
95+
_saraRXBuffer = new char[_RXBuffSize];
96+
if (_saraRXBuffer == NULL)
97+
{
98+
if (_printDebug == true)
99+
_debugPort->println(F("begin: not enough memory for _saraRXBuffer!"));
100+
return false;
101+
}
102+
memset(_saraRXBuffer, 0, _RXBuffSize);
103+
104+
_pruneBuffer = new char[_RXBuffSize];
105+
if (_pruneBuffer == NULL)
106+
{
107+
if (_printDebug == true)
108+
_debugPort->println(F("begin: not enough memory for _pruneBuffer!"));
109+
return false;
110+
}
111+
memset(_pruneBuffer, 0, _RXBuffSize);
112+
113+
_saraResponseBacklog = new char[_RXBuffSize];
114+
if (_saraResponseBacklog == NULL)
115+
{
116+
if (_printDebug == true)
117+
_debugPort->println(F("begin: not enough memory for _saraResponseBacklog!"));
118+
return false;
119+
}
120+
memset(_saraResponseBacklog, 0, _RXBuffSize);
121+
72122
SARA_R5_error_t err;
73123

74124
_hardSerial = &hardSerial;

src/SparkFun_u-blox_SARA-R5_Arduino_Library.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -832,9 +832,9 @@ class SARA_R5 : public Print
832832

833833
#define _RXBuffSize 2056
834834
const unsigned long _rxWindowMillis = 2; // 1ms is not quite long enough for a single char at 9600 baud. millis roll over much less often than micros.
835-
char _saraRXBuffer[_RXBuffSize];
836-
char _pruneBuffer[_RXBuffSize];
837-
char _saraResponseBacklog[_RXBuffSize];
835+
char *_saraRXBuffer; // Allocated in SARA_R5::begin
836+
char *_pruneBuffer;
837+
char *_saraResponseBacklog;
838838
int _saraResponseBacklogLength = 0; // The backlog could contain binary data so we can't use strlen to find its length
839839

840840
void (*_socketListenCallback)(int, IPAddress, unsigned int, int, IPAddress, unsigned int);

0 commit comments

Comments
 (0)