Skip to content

Commit 94ad6fa

Browse files
committed
Increase memory for MQTT data. Add memory limit checks.
1 parent 7ee5458 commit 94ad6fa

File tree

2 files changed

+34
-8
lines changed

2 files changed

+34
-8
lines changed

examples/AssistNow/AssistNow_Online/Example5_AssistNowOnline_MQTT/Example5_AssistNowOnline_MQTT.ino

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,18 +94,24 @@ WiFiClientSecure wifiClient = WiFiClientSecure();
9494
MqttClient mqttClient(wifiClient);
9595

9696
void mqttMessageHandler(int messageSize) {
97-
uint8_t mgaData[512 * 4]; //Most incoming data is around 500 bytes but may be larger
98-
int mgaCount = 0;
99-
Serial.print(F("Pushed data from "));
97+
const uint16_t mgaCountLimit = 16384;
98+
uint8_t *mgaData = new uint8_t[mgaCountLimit];
99+
uint16_t mgaCount = 0;
100+
Serial.print(F("Pushing data from "));
100101
Serial.print(mqttClient.messageTopic());
101102
Serial.println(F(" topic to ZED"));
102103
while (mqttClient.available())
103104
{
104105
char ch = mqttClient.read();
105106
//Serial.write(ch); //Pipe to serial port is fine but beware, it's a lot of binary data
106107
mgaData[mgaCount++] = ch;
107-
if (mgaCount == sizeof(mgaData))
108+
if (mgaCount == mgaCountLimit)
109+
{
110+
Serial.print(F("Warning!! MQTT data exceeded "));
111+
Serial.print(mgaCountLimit);
112+
Serial.println(F(" bytes!!"));
108113
break;
114+
}
109115
}
110116

111117
if (mgaCount > 0)
@@ -114,6 +120,8 @@ void mqttMessageHandler(int messageSize) {
114120
myGNSS.pushRawData(mgaData, mgaCount, false);
115121
lastReceived_ms = millis();
116122
}
123+
124+
delete[] mgaData;
117125
}
118126

119127
//Connect to MQTT broker, receive MGA, and push to ZED module over I2C

examples/ZED-F9P/Example18_PointPerfectClient/Example18_PointPerfectClient.ino

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,18 +248,34 @@ WiFiClientSecure wifiClient = WiFiClientSecure();
248248
MqttClient mqttClient(wifiClient);
249249

250250
void mqttMessageHandler(int messageSize) {
251-
uint8_t spartnData[512 * 4]; //Most incoming data is around 500 bytes but may be larger
252-
int spartnCount = 0;
253-
Serial.print(F("Pushed data from "));
251+
// Testing with /pp/ubx/0236/ip + /pp/ip/eu + /pp/ubx/mga shows the initial data length can be more than 13KBytes
252+
const uint16_t spartnCountLimit = 16384;
253+
uint8_t *spartnData = new uint8_t[spartnCountLimit];
254+
uint16_t spartnCount = 0;
255+
Serial.print(F("Pushing data from "));
254256
Serial.print(mqttClient.messageTopic());
255257
Serial.println(F(" topic to ZED"));
256258
while (mqttClient.available())
257259
{
258260
char ch = mqttClient.read();
259261
//Serial.write(ch); //Pipe to serial port is fine but beware, it's a lot of binary data
260262
spartnData[spartnCount++] = ch;
261-
if (spartnCount == sizeof(spartnData))
263+
if (spartnCount == spartnCountLimit)
264+
{
265+
Serial.print(F("Warning!! MQTT data exceeded "));
266+
Serial.print(spartnCountLimit);
267+
Serial.println(F(" bytes!!"));
262268
break;
269+
}
270+
}
271+
272+
static uint16_t maxSpartnCount = 0;
273+
if (spartnCount > maxSpartnCount)
274+
{
275+
maxSpartnCount = spartnCount;
276+
Serial.print(F("Maximum MQTT data length is "));
277+
Serial.print(maxSpartnCount);
278+
Serial.println(F(" bytes"));
263279
}
264280

265281
if (spartnCount > 0)
@@ -268,6 +284,8 @@ void mqttMessageHandler(int messageSize) {
268284
myGNSS.pushRawData(spartnData, spartnCount, false);
269285
lastReceived_ms = millis();
270286
}
287+
288+
delete[] spartnData;
271289
}
272290

273291
//Connect to STARTN MQTT broker, receive RTCM, and push to ZED module over I2C

0 commit comments

Comments
 (0)