From 541cd38130c3e86e23f767fc1a57468d7ad50622 Mon Sep 17 00:00:00 2001 From: Michael Ammann Date: Fri, 11 Nov 2022 20:50:59 +0100 Subject: [PATCH] More tolerant AT parser These changes enable are required to support u-blox LENA-R8 cellular CAT 1bis module --- ...parkFun_u-blox_SARA-R5_Arduino_Library.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp b/src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp index f33a83c..dac5d86 100644 --- a/src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp +++ b/src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp @@ -550,10 +550,10 @@ bool SARA_R5::processURCEvent(const char *event) int scanNum; int qos = -1; String topic; - scanNum = sscanf(event, "+UUMQTTC: %d,%d", &command, &result); + scanNum = sscanf(event, "+UUMQTTC:%d,%d", &command, &result); if ((scanNum == 2) && (command == SARA_R5_MQTT_COMMAND_SUBSCRIBE)) { char topicC[100] = ""; - scanNum = sscanf(event, "+UUMQTTC: %*d,%*d,%d,\"%[^\"]\"", &qos, topicC); + scanNum = sscanf(event, "+UUMQTTC:%*d,%*d,%d,\"%[^\"]\"", &qos, topicC); topic = topicC; } if ((scanNum == 2) || (scanNum == 4)) @@ -580,7 +580,7 @@ bool SARA_R5::processURCEvent(const char *event) const char *searchPtr = event; // Try to extract the UUPING retries and payload size - scanNum = sscanf(searchPtr, "+UUPING: %d,%d,", &retry, &p_size); + scanNum = sscanf(searchPtr, "+UUPING:%d,%d,", &retry, &p_size); if (scanNum == 2) { @@ -3952,9 +3952,9 @@ SARA_R5_error_t SARA_R5::getHTTPprotocolError(int profile, int *error_class, int if (err == SARA_R5_ERROR_SUCCESS) { int scanned = 0; - char *searchPtr = strstr(response, "+UHTTPER: "); + char *searchPtr = strstr(response, "+UHTTPER:"); if (searchPtr != NULL) - scanned = sscanf(searchPtr, "+UHTTPER: %d,%d,%d\r\n", + scanned = sscanf(searchPtr, "+UHTTPER:%d,%d,%d\r\n", &rprofile, &eclass, &ecode); if (scanned == 3) { @@ -4129,10 +4129,11 @@ SARA_R5_error_t SARA_R5::readMQTT(int* pQos, String* pTopic, uint8_t *readDest, } // Extract the data - char *searchPtr = strstr(response, "+UMQTTC: 6"); + char *searchPtr = strstr(response, "+UMQTTC:"); + int cmd = 0; if (searchPtr != NULL) - scanNum = sscanf(searchPtr, "+UMQTTC: 6,%d,%d,%d,\"%*[^\"]\",%d,\"", pQos, &total_length, &topic_length, &data_length); - if (scanNum != 4) + scanNum = sscanf(searchPtr, "+UMQTTC:%d,%d,%d,%d,\"%*[^\"]\",%d,\"", &cmd, pQos, &total_length, &topic_length, &data_length); + if ((scanNum != 5) || (cmd != SARA_R5_MQTT_COMMAND_READ)) { if (_printDebug == true) { @@ -4195,7 +4196,7 @@ SARA_R5_error_t SARA_R5::getMQTTprotocolError(int *error_code, int *error_code2) if (err == SARA_R5_ERROR_SUCCESS) { int scanned = 0; - char *searchPtr = strstr(response, "+UMQTTER: "); + char *searchPtr = strstr(response, "+UMQTTER:"); if (searchPtr != NULL) scanned = sscanf(searchPtr, "+UMQTTER:%d,%d\r\n", &code, &code2);