@@ -1065,14 +1065,28 @@ bool DevUBLOXGNSS::checkUblox(uint8_t requestedClass, uint8_t requestedID)
10651065bool DevUBLOXGNSS::checkUbloxInternal(ubxPacket *incomingUBX, uint8_t requestedClass, uint8_t requestedID)
10661066{
10671067 if (!lock()) return false;
1068+
1069+ // Update storedClass and storedID if either requestedClass or requestedID is non-zero,
1070+ // otherwise leave unchanged. This allows calls of checkUblox() (which defaults to checkUblox(0,0))
1071+ // by other threads without changing the requested / expected Class and ID.
1072+ volatile static uint8_t storedClass = 0;
1073+ volatile static uint8_t storedID = 0;
1074+ if (requestedClass || requestedID) // If either is non-zero, store the requested Class and ID
1075+ {
1076+ storedClass = requestedClass;
1077+ storedID = requestedID;
1078+ }
1079+
10681080 bool ok = false;
10691081 if (_commType == COMM_TYPE_I2C)
1070- ok = (checkUbloxI2C(incomingUBX, requestedClass, requestedID ));
1082+ ok = (checkUbloxI2C(incomingUBX, storedClass, storedID ));
10711083 else if (_commType == COMM_TYPE_SERIAL)
1072- ok = (checkUbloxSerial(incomingUBX, requestedClass, requestedID ));
1084+ ok = (checkUbloxSerial(incomingUBX, storedClass, storedID ));
10731085 else if (_commType == COMM_TYPE_SPI)
1074- ok = (checkUbloxSpi(incomingUBX, requestedClass, requestedID));
1086+ ok = (checkUbloxSpi(incomingUBX, storedClass, storedID));
1087+
10751088 unlock();
1089+
10761090 return ok;
10771091}
10781092
0 commit comments