Increase memory for MQTT data. Add memory limit checks.
This commit is contained in:
+12
-4
@@ -94,9 +94,10 @@ WiFiClientSecure wifiClient = WiFiClientSecure();
|
|||||||
MqttClient mqttClient(wifiClient);
|
MqttClient mqttClient(wifiClient);
|
||||||
|
|
||||||
void mqttMessageHandler(int messageSize) {
|
void mqttMessageHandler(int messageSize) {
|
||||||
uint8_t mgaData[512 * 4]; //Most incoming data is around 500 bytes but may be larger
|
const uint16_t mgaCountLimit = 16384;
|
||||||
int mgaCount = 0;
|
uint8_t *mgaData = new uint8_t[mgaCountLimit];
|
||||||
Serial.print(F("Pushed data from "));
|
uint16_t mgaCount = 0;
|
||||||
|
Serial.print(F("Pushing data from "));
|
||||||
Serial.print(mqttClient.messageTopic());
|
Serial.print(mqttClient.messageTopic());
|
||||||
Serial.println(F(" topic to ZED"));
|
Serial.println(F(" topic to ZED"));
|
||||||
while (mqttClient.available())
|
while (mqttClient.available())
|
||||||
@@ -104,9 +105,14 @@ void mqttMessageHandler(int messageSize) {
|
|||||||
char ch = mqttClient.read();
|
char ch = mqttClient.read();
|
||||||
//Serial.write(ch); //Pipe to serial port is fine but beware, it's a lot of binary data
|
//Serial.write(ch); //Pipe to serial port is fine but beware, it's a lot of binary data
|
||||||
mgaData[mgaCount++] = ch;
|
mgaData[mgaCount++] = ch;
|
||||||
if (mgaCount == sizeof(mgaData))
|
if (mgaCount == mgaCountLimit)
|
||||||
|
{
|
||||||
|
Serial.print(F("Warning!! MQTT data exceeded "));
|
||||||
|
Serial.print(mgaCountLimit);
|
||||||
|
Serial.println(F(" bytes!!"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mgaCount > 0)
|
if (mgaCount > 0)
|
||||||
{
|
{
|
||||||
@@ -114,6 +120,8 @@ void mqttMessageHandler(int messageSize) {
|
|||||||
myGNSS.pushRawData(mgaData, mgaCount, false);
|
myGNSS.pushRawData(mgaData, mgaCount, false);
|
||||||
lastReceived_ms = millis();
|
lastReceived_ms = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete[] mgaData;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Connect to MQTT broker, receive MGA, and push to ZED module over I2C
|
//Connect to MQTT broker, receive MGA, and push to ZED module over I2C
|
||||||
|
|||||||
@@ -248,9 +248,11 @@ WiFiClientSecure wifiClient = WiFiClientSecure();
|
|||||||
MqttClient mqttClient(wifiClient);
|
MqttClient mqttClient(wifiClient);
|
||||||
|
|
||||||
void mqttMessageHandler(int messageSize) {
|
void mqttMessageHandler(int messageSize) {
|
||||||
uint8_t spartnData[512 * 4]; //Most incoming data is around 500 bytes but may be larger
|
// Testing with /pp/ubx/0236/ip + /pp/ip/eu + /pp/ubx/mga shows the initial data length can be more than 13KBytes
|
||||||
int spartnCount = 0;
|
const uint16_t spartnCountLimit = 16384;
|
||||||
Serial.print(F("Pushed data from "));
|
uint8_t *spartnData = new uint8_t[spartnCountLimit];
|
||||||
|
uint16_t spartnCount = 0;
|
||||||
|
Serial.print(F("Pushing data from "));
|
||||||
Serial.print(mqttClient.messageTopic());
|
Serial.print(mqttClient.messageTopic());
|
||||||
Serial.println(F(" topic to ZED"));
|
Serial.println(F(" topic to ZED"));
|
||||||
while (mqttClient.available())
|
while (mqttClient.available())
|
||||||
@@ -258,9 +260,23 @@ void mqttMessageHandler(int messageSize) {
|
|||||||
char ch = mqttClient.read();
|
char ch = mqttClient.read();
|
||||||
//Serial.write(ch); //Pipe to serial port is fine but beware, it's a lot of binary data
|
//Serial.write(ch); //Pipe to serial port is fine but beware, it's a lot of binary data
|
||||||
spartnData[spartnCount++] = ch;
|
spartnData[spartnCount++] = ch;
|
||||||
if (spartnCount == sizeof(spartnData))
|
if (spartnCount == spartnCountLimit)
|
||||||
|
{
|
||||||
|
Serial.print(F("Warning!! MQTT data exceeded "));
|
||||||
|
Serial.print(spartnCountLimit);
|
||||||
|
Serial.println(F(" bytes!!"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint16_t maxSpartnCount = 0;
|
||||||
|
if (spartnCount > maxSpartnCount)
|
||||||
|
{
|
||||||
|
maxSpartnCount = spartnCount;
|
||||||
|
Serial.print(F("Maximum MQTT data length is "));
|
||||||
|
Serial.print(maxSpartnCount);
|
||||||
|
Serial.println(F(" bytes"));
|
||||||
|
}
|
||||||
|
|
||||||
if (spartnCount > 0)
|
if (spartnCount > 0)
|
||||||
{
|
{
|
||||||
@@ -268,6 +284,8 @@ void mqttMessageHandler(int messageSize) {
|
|||||||
myGNSS.pushRawData(spartnData, spartnCount, false);
|
myGNSS.pushRawData(spartnData, spartnCount, false);
|
||||||
lastReceived_ms = millis();
|
lastReceived_ms = millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete[] spartnData;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Connect to STARTN MQTT broker, receive RTCM, and push to ZED module over I2C
|
//Connect to STARTN MQTT broker, receive RTCM, and push to ZED module over I2C
|
||||||
|
|||||||
Reference in New Issue
Block a user