Compare commits

...

6 Commits

Author SHA1 Message Date
Ben Meadors
b77cafbab7 Merge branch 'master' into static-buffer-gps 2025-09-09 06:32:55 -05:00
Ben Meadors
4ed7043aea Remove string 2025-09-05 20:01:22 -05:00
Ben Meadors
7a48bd5e76 Revert "\Update src/gps/GPS.cpp"
This reverts commit 54d64e19f7.
2025-09-05 19:59:41 -05:00
Ben Meadors
a5bb0ee284 Merge branch 'master' into static-buffer-gps 2025-09-05 07:21:07 -05:00
Ben Meadors
54d64e19f7 \Update src/gps/GPS.cpp
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-09-05 07:20:29 -05:00
Ben Meadors
d095b6b92e Use char buffer for probeResponse 2025-09-05 07:15:12 -05:00

View File

@@ -1,5 +1,4 @@
#include <cstring> // Include for strstr #include <cstring> // Include for strstr
#include <string>
#include <vector> #include <vector>
#include "configuration.h" #include "configuration.h"
@@ -1370,34 +1369,42 @@ GnssModel_t GPS::probe(int serialSpeed)
GnssModel_t GPS::getProbeResponse(unsigned long timeout, const std::vector<ChipInfo> &responseMap) GnssModel_t GPS::getProbeResponse(unsigned long timeout, const std::vector<ChipInfo> &responseMap)
{ {
String response = ""; char response[256] = {0}; // Fixed buffer instead of String
uint16_t responseLen = 0;
unsigned long start = millis(); unsigned long start = millis();
while (millis() - start < timeout) { while (millis() - start < timeout) {
if (_serial_gps->available()) { if (_serial_gps->available()) {
response += (char)_serial_gps->read(); char c = _serial_gps->read();
if (response.endsWith(",") || response.endsWith("\r\n")) { // Add char to buffer if there's space
if (responseLen < sizeof(response) - 1) {
response[responseLen++] = c;
response[responseLen] = '\0';
}
if (c == ',' || (responseLen >= 2 && response[responseLen - 2] == '\r' && response[responseLen - 1] == '\n')) {
#ifdef GPS_DEBUG #ifdef GPS_DEBUG
LOG_DEBUG(response.c_str()); LOG_DEBUG(response);
#endif #endif
// check if we can see our chips // check if we can see our chips
for (const auto &chipInfo : responseMap) { for (const auto &chipInfo : responseMap) {
if (strstr(response.c_str(), chipInfo.detectionString.c_str()) != nullptr) { if (strstr(response, chipInfo.detectionString.c_str()) != nullptr) {
LOG_INFO("%s detected", chipInfo.chipName.c_str()); LOG_INFO("%s detected", chipInfo.chipName.c_str());
return chipInfo.driver; return chipInfo.driver;
} }
} }
} }
if (response.endsWith("\r\n")) { if (responseLen >= 2 && response[responseLen - 2] == '\r' && response[responseLen - 1] == '\n') {
response.trim(); // Reset the response buffer for the next potential message
response = ""; // Reset the response string for the next potential message responseLen = 0;
response[0] = '\0';
} }
} }
} }
#ifdef GPS_DEBUG #ifdef GPS_DEBUG
LOG_DEBUG(response.c_str()); LOG_DEBUG(response);
#endif #endif
return GNSS_MODEL_UNKNOWN; // Return empty string on timeout return GNSS_MODEL_UNKNOWN; // Return unknown on timeout
} }
GPS *GPS::createGps() GPS *GPS::createGps()