@@ -469,7 +469,7 @@ void DevUBLOXGNSS::end(void)
469469 {
470470 if (packetUBXESFMEAS->callbackData != nullptr)
471471 {
472- delete packetUBXESFMEAS->callbackData;
472+ delete[] packetUBXESFMEAS->callbackData;
473473 }
474474 delete packetUBXESFMEAS;
475475 packetUBXESFMEAS = nullptr;
@@ -4466,11 +4466,17 @@ void DevUBLOXGNSS::processUBXpacket(ubxPacket *msg)
44664466 packetUBXESFMEAS->data.calibTtag = extractLong(msg, 8 + (packetUBXESFMEAS->data.flags.bits.numMeas * 4));
44674467
44684468 // Check if we need to copy the data for the callback
4469- if ((packetUBXESFMEAS->callbackData != nullptr) // If RAM has been allocated for the copy of the data
4470- && (packetUBXESFMEAS->automaticFlags.flags.bits.callbackCopyValid == false)) // AND the data is stale
4469+ if (packetUBXESFMEAS->callbackData != nullptr) // If RAM has been allocated for the copy of the data
44714470 {
4472- memcpy(&packetUBXESFMEAS->callbackData->timeTag, &packetUBXESFMEAS->data.timeTag, sizeof(UBX_ESF_MEAS_data_t));
4473- packetUBXESFMEAS->automaticFlags.flags.bits.callbackCopyValid = true;
4471+ for (uint16_t i = 0; i < UBX_ESF_MEAS_CALLBACK_BUFFERS; i++)
4472+ {
4473+ if ((packetUBXESFMEAS->automaticFlags.flags.bits.callbackCopyValid & (1 << i)) == 0) // AND the data is stale
4474+ {
4475+ memcpy(&packetUBXESFMEAS->callbackData[i].timeTag, &packetUBXESFMEAS->data.timeTag, sizeof(UBX_ESF_MEAS_data_t));
4476+ packetUBXESFMEAS->automaticFlags.flags.bits.callbackCopyValid |= (1 << i);
4477+ break; // Only copy once
4478+ }
4479+ }
44744480 }
44754481
44764482 // Check if we need to copy the data into the file buffer
@@ -5937,13 +5943,16 @@ void DevUBLOXGNSS::checkCallbacks(void)
59375943
59385944 if (packetUBXESFMEAS != nullptr) // If RAM has been allocated for message storage
59395945 if (packetUBXESFMEAS->callbackData != nullptr) // If RAM has been allocated for the copy of the data
5940- if (packetUBXESFMEAS->automaticFlags.flags.bits.callbackCopyValid == true) // If the copy of the data is valid
5946+ for (uint16_t i = 0; i < UBX_ESF_MEAS_CALLBACK_BUFFERS; i++)
59415947 {
5942- if (packetUBXESFMEAS->callbackPointerPtr != nullptr ) // If the pointer to the callback has been defined
5948+ if (( packetUBXESFMEAS->automaticFlags.flags.bits.callbackCopyValid & (1 << i)) != 0 ) // If the copy of the data is valid
59435949 {
5944- packetUBXESFMEAS->callbackPointerPtr(packetUBXESFMEAS->callbackData); // Call the callback
5950+ if (packetUBXESFMEAS->callbackPointerPtr != nullptr) // If the pointer to the callback has been defined
5951+ {
5952+ packetUBXESFMEAS->callbackPointerPtr(&packetUBXESFMEAS->callbackData[i]); // Call the callback
5953+ }
5954+ packetUBXESFMEAS->automaticFlags.flags.bits.callbackCopyValid &= ~(1 << i); // Mark the data as stale
59455955 }
5946- packetUBXESFMEAS->automaticFlags.flags.bits.callbackCopyValid = false; // Mark the data as stale
59475956 }
59485957
59495958 if (packetUBXESFRAW != nullptr) // If RAM has been allocated for message storage
@@ -14693,7 +14702,7 @@ bool DevUBLOXGNSS::setAutoESFMEAScallbackPtr(void (*callbackPointerPtr)(UBX_ESF_
1469314702
1469414703 if (packetUBXESFMEAS->callbackData == nullptr) // Check if RAM has been allocated for the callback copy
1469514704 {
14696- packetUBXESFMEAS->callbackData = new UBX_ESF_MEAS_data_t; // Allocate RAM for the main struct
14705+ packetUBXESFMEAS->callbackData = new UBX_ESF_MEAS_data_t[UBX_ESF_MEAS_CALLBACK_BUFFERS] ; // Allocate RAM for the main struct
1469714706 }
1469814707
1469914708 if (packetUBXESFMEAS->callbackData == nullptr)
0 commit comments