Skip to content

Commit cf2087b

Browse files
committed
more fault tolerant parsing
1 parent 9abc6c3 commit cf2087b

File tree

1 file changed

+45
-43
lines changed

1 file changed

+45
-43
lines changed

src/SparkFun_u-blox_SARA-R5_Arduino_Library.cpp

Lines changed: 45 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ bool SARA_R5::processURCEvent(const char *event)
320320
{
321321
{ // URC: +UUSORD (Read Socket Data)
322322
int socket, length;
323-
int ret = sscanf(event, "+UUSORD: %d,%d", &socket, &length);
323+
int ret = sscanf(event, "+UUSORD:%d,%d", &socket, &length);
324324
if (ret == 2)
325325
{
326326
if (_printDebug == true)
@@ -345,7 +345,7 @@ bool SARA_R5::processURCEvent(const char *event)
345345
}
346346
{ // URC: +UUSORF (Receive From command (UDP only))
347347
int socket, length;
348-
int ret = sscanf(event, "+UUSORF: %d,%d", &socket, &length);
348+
int ret = sscanf(event, "+UUSORF:%d,%d", &socket, &length);
349349
if (ret == 2)
350350
{
351351
if (_printDebug == true)
@@ -365,7 +365,7 @@ bool SARA_R5::processURCEvent(const char *event)
365365
int localIPstore[4] = {0,0,0,0};
366366

367367
int ret = sscanf(event,
368-
"+UUSOLI: %d,\"%d.%d.%d.%d\",%u,%d,\"%d.%d.%d.%d\",%u",
368+
"+UUSOLI:%d,\"%d.%d.%d.%d\",%u,%d,\"%d.%d.%d.%d\",%u",
369369
&socket,
370370
&remoteIPstore[0], &remoteIPstore[1], &remoteIPstore[2], &remoteIPstore[3],
371371
&port, &listenSocket,
@@ -388,7 +388,7 @@ bool SARA_R5::processURCEvent(const char *event)
388388
}
389389
{ // URC: +UUSOCL (Close Socket)
390390
int socket;
391-
int ret = sscanf(event, "+UUSOCL: %d", &socket);
391+
int ret = sscanf(event, "+UUSOCL:%d", &socket);
392392
if (ret == 1)
393393
{
394394
if (_printDebug == true)
@@ -418,7 +418,7 @@ bool SARA_R5::processURCEvent(const char *event)
418418

419419
// This assumes the ULOC response type is "0" or "1" - as selected by gpsRequest detailed
420420
scanNum = sscanf(event,
421-
"+UULOC: %d/%d/%d,%d:%d:%d.%d,%d.%[^,],%d.%[^,],%d,%lu,%u,%u,%*s",
421+
"+UULOC:%d/%d/%d,%d:%d:%d.%d,%d.%[^,],%d.%[^,],%d,%lu,%u,%u,%*s",
422422
&dateStore[0], &dateStore[1], &clck.date.year,
423423
&dateStore[2], &dateStore[3], &dateStore[4], &clck.time.ms,
424424
&latH, latL, &lonH, lonL, &alt, &uncertainty,
@@ -502,7 +502,7 @@ bool SARA_R5::processURCEvent(const char *event)
502502
int scanNum;
503503
int remoteIPstore[4];
504504

505-
scanNum = sscanf(event, "+UUPSDA: %d,\"%d.%d.%d.%d\"",
505+
scanNum = sscanf(event, "+UUPSDA:%d,\"%d.%d.%d.%d\"",
506506
&result, &remoteIPstore[0], &remoteIPstore[1], &remoteIPstore[2], &remoteIPstore[3]);
507507

508508
if (scanNum == 5)
@@ -527,7 +527,7 @@ bool SARA_R5::processURCEvent(const char *event)
527527
int profile, command, result;
528528
int scanNum;
529529

530-
scanNum = sscanf(event, "+UUHTTPCR: %d,%d,%d", &profile, &command, &result);
530+
scanNum = sscanf(event, "+UUHTTPCR:%d,%d,%d", &profile, &command, &result);
531531

532532
if (scanNum == 3)
533533
{
@@ -621,7 +621,7 @@ bool SARA_R5::processURCEvent(const char *event)
621621
{ // URC: +A
622622
int status = 0;
623623
unsigned int lac = 0, ci = 0, Act = 0;
624-
int scanNum = sscanf(event, "+CREG: %d,\"%4x\",\"%4x\",%d", &status, &lac, &ci, &Act);
624+
int scanNum = sscanf(event, "+CREG:%d,\"%4x\",\"%4x\",%d", &status, &lac, &ci, &Act);
625625
if (scanNum == 4)
626626
{
627627
if (_printDebug == true)
@@ -638,7 +638,7 @@ bool SARA_R5::processURCEvent(const char *event)
638638
{ // URC: +CEREG
639639
int status = 0;
640640
unsigned int tac = 0, ci = 0, Act = 0;
641-
int scanNum = sscanf(event, "+CEREG: %d,\"%4x\",\"%4x\",%d", &status, &tac, &ci, &Act);
641+
int scanNum = sscanf(event, "+CEREG:%d,\"%4x\",\"%4x\",%d", &status, &tac, &ci, &Act);
642642
if (scanNum == 4)
643643
{
644644
if (_printDebug == true)
@@ -1124,7 +1124,7 @@ SARA_R5_error_t SARA_R5::clock(uint8_t *y, uint8_t *mo, uint8_t *d,
11241124
{
11251125
char *searchPtr = strstr(response, "+CCLK:");
11261126
if (searchPtr != NULL)
1127-
scanNum = sscanf(searchPtr, "+CCLK: \"%d/%d/%d,%d:%d:%d%c%d\"\r\n",
1127+
scanNum = sscanf(searchPtr, "+CCLK:\"%d/%d/%d,%d:%d:%d%c%d\"\r\n",
11281128
&iy, &imo, &id, &ih, &imin, &is, &tzPlusMinus, &itz);
11291129
if (scanNum == 8)
11301130
{
@@ -1259,7 +1259,7 @@ SARA_R5_error_t SARA_R5::getUtimeMode(SARA_R5_utime_mode_t *mode, SARA_R5_utime_
12591259
int mStore, sStore, scanned = 0;
12601260
char *searchPtr = strstr(response, "+UTIME:");
12611261
if (searchPtr != NULL)
1262-
scanned = sscanf(searchPtr, "+UTIME: %d,%d\r\n", &mStore, &sStore);
1262+
scanned = sscanf(searchPtr, "+UTIME:%d,%d\r\n", &mStore, &sStore);
12631263
m = (SARA_R5_utime_mode_t)mStore;
12641264
s = (SARA_R5_utime_sensor_t)sStore;
12651265
if (scanned == 2)
@@ -1326,7 +1326,7 @@ SARA_R5_error_t SARA_R5::getUtimeIndication(SARA_R5_utime_urc_configuration_t *c
13261326
int cStore, scanned = 0;
13271327
char *searchPtr = strstr(response, "+UTIMEIND:");
13281328
if (searchPtr != NULL)
1329-
scanned = sscanf(searchPtr, "+UTIMEIND: %d\r\n", &cStore);
1329+
scanned = sscanf(searchPtr, "+UTIMEIND:%d\r\n", &cStore);
13301330
c = (SARA_R5_utime_urc_configuration_t)cStore;
13311331
if (scanned == 1)
13321332
{
@@ -1392,9 +1392,9 @@ SARA_R5_error_t SARA_R5::getUtimeConfiguration(int32_t *offsetNanoseconds, int32
13921392
char *searchPtr = strstr(response, "+UTIMECFG:");
13931393
if (searchPtr != NULL)
13941394
#if defined(ARDUINO_ARCH_ESP32) || defined(ARDUINO_ARCH_ESP8266)
1395-
scanned = sscanf(searchPtr, "+UTIMECFG: %d,%d\r\n", &ons, &os);
1395+
scanned = sscanf(searchPtr, "+UTIMECFG:%d,%d\r\n", &ons, &os);
13961396
#else
1397-
scanned = sscanf(searchPtr, "+UTIMECFG: %ld,%ld\r\n", &ons, &os);
1397+
scanned = sscanf(searchPtr, "+UTIMECFG:%ld,%ld\r\n", &ons, &os);
13981398
#endif
13991399
if (scanned == 2)
14001400
{
@@ -1458,7 +1458,7 @@ int8_t SARA_R5::rssi(void)
14581458
int scanned = 0;
14591459
char *searchPtr = strstr(response, "+CSQ:");
14601460
if (searchPtr != NULL)
1461-
scanned = sscanf(searchPtr, "+CSQ: %d,%*d", &rssi);
1461+
scanned = sscanf(searchPtr, "+CSQ:%d,%*d", &rssi);
14621462
if (scanned != 1)
14631463
{
14641464
rssi = -1;
@@ -1502,7 +1502,7 @@ SARA_R5_registration_status_t SARA_R5::registration(bool eps)
15021502
const char *startTag = eps ? "+CEREG:" : "+CREG:";
15031503
char *searchPtr = strstr(response, startTag);
15041504
if (searchPtr != NULL) {
1505-
const char *format = eps ? "+CEREG: %*d,%d" : "+CREG: %*d,%d";
1505+
const char *format = eps ? "+CEREG:%*d,%d" : "+CREG:%*d,%d";
15061506
scanned = sscanf(searchPtr, format, &status);
15071507
}
15081508
if (scanned != 1)
@@ -1668,7 +1668,7 @@ SARA_R5_error_t SARA_R5::getAPN(int cid, String *apn, IPAddress *ip, SARA_R5_pdp
16681668
char strApn[128];
16691669
int ipOct[4];
16701670

1671-
searchPtr += strlen("+CGDCONT:"); // Point to the cid
1671+
searchPtr += 6; // Point to the cid
16721672
scanned = sscanf(searchPtr, "%d,\"%[^\"]\",\"%[^\"]\",\"%d.%d.%d.%d",
16731673
&rcid, strPdpType, strApn,
16741674
&ipOct[0], &ipOct[1], &ipOct[2], &ipOct[3]);
@@ -1687,13 +1687,13 @@ SARA_R5_error_t SARA_R5::getAPN(int cid, String *apn, IPAddress *ip, SARA_R5_pdp
16871687
keepGoing = false;
16881688
}
16891689
}
1690-
else // We don't have a match so let's clear the APN and IP address
1690+
else // We don't have a match so let's clear the APN and IP address
16911691
{
1692-
if (apn) *apn = "";
1693-
if (pdpType) *pdpType = PDP_TYPE_INVALID;
1694-
if (ip) *ip = {0, 0, 0, 0};
1695-
keepGoing = false;
1696-
}
1692+
if (apn) *apn = "";
1693+
if (pdpType) *pdpType = PDP_TYPE_INVALID;
1694+
if (ip) *ip = {0, 0, 0, 0};
1695+
keepGoing = false;
1696+
}
16971697
}
16981698
}
16991699
else
@@ -1731,7 +1731,7 @@ SARA_R5_error_t SARA_R5::getSimStatus(String* code)
17311731
char c[16];
17321732
char *searchPtr = strstr(response, "+CPIN:");
17331733
if (searchPtr != NULL)
1734-
scanned = sscanf(searchPtr, "+CPIN: %s\r\n", c);
1734+
scanned = sscanf(searchPtr, "+CPIN:%s\r\n", c);
17351735
if (scanned == 1)
17361736
{
17371737
if(code)
@@ -1805,7 +1805,7 @@ SARA_R5_error_t SARA_R5::getSIMstateReportingMode(int *mode)
18051805
int scanned = 0;
18061806
char *searchPtr = strstr(response, "+USIMSTAT:");
18071807
if (searchPtr != NULL)
1808-
scanned = sscanf(searchPtr, "+USIMSTAT: %d\r\n", &m);
1808+
scanned = sscanf(searchPtr, "+USIMSTAT:%d\r\n", &m);
18091809
if (scanned == 1)
18101810
{
18111811
*mode = m;
@@ -2160,7 +2160,7 @@ SARA_R5_error_t SARA_R5::getPreferredMessageStorage(int *used, int *total, Strin
21602160
int scanned = 0;
21612161
char *searchPtr = strstr(response, "+CPMS:");
21622162
if (searchPtr != NULL)
2163-
scanned = sscanf(searchPtr, "+CPMS: %d,%d", &u, &t);
2163+
scanned = sscanf(searchPtr, "+CPMS:%d,%d", &u, &t);
21642164
if (scanned == 2)
21652165
{
21662166
if (_printDebug == true)
@@ -2485,7 +2485,7 @@ int SARA_R5::socketOpen(SARA_R5_socket_protocol_t protocol, unsigned int localPo
24852485
return -1;
24862486
}
24872487

2488-
sscanf(responseStart, "+USOCR: %d", &sockId);
2488+
sscanf(responseStart, "+USOCR:%d", &sockId);
24892489
_lastSocketProtocol[sockId] = (int)protocol;
24902490

24912491
free(command);
@@ -2763,7 +2763,7 @@ SARA_R5_error_t SARA_R5::socketRead(int socket, int length, char *readDest, int
27632763
// Extract the data
27642764
char *searchPtr = strstr(response, "+USORD:");
27652765
if (searchPtr != NULL)
2766-
scanNum = sscanf(searchPtr, "+USORD: %d,%d",
2766+
scanNum = sscanf(searchPtr, "+USORD:%d,%d",
27672767
&socketStore, &readLength);
27682768
if (scanNum != 2)
27692769
{
@@ -2876,7 +2876,7 @@ SARA_R5_error_t SARA_R5::socketReadAvailable(int socket, int *length)
28762876
{
28772877
char *searchPtr = strstr(response, "+USORD:");
28782878
if (searchPtr != NULL)
2879-
scanNum = sscanf(searchPtr, "+USORD: %d,%d",
2879+
scanNum = sscanf(searchPtr, "+USORD:%d,%d",
28802880
&socketStore, &readLength);
28812881
if (scanNum != 2)
28822882
{
@@ -2973,7 +2973,7 @@ SARA_R5_error_t SARA_R5::socketReadUDP(int socket, int length, char *readDest,
29732973
// Extract the data
29742974
char *searchPtr = strstr(response, "+USORF:");
29752975
if (searchPtr != NULL)
2976-
scanNum = sscanf(searchPtr, "+USORF: %d,\"%d.%d.%d.%d\",%d,%d",
2976+
scanNum = sscanf(searchPtr, "+USORF:%d,\"%d.%d.%d.%d\",%d,%d",
29772977
&socketStore, &remoteIPstore[0], &remoteIPstore[1], &remoteIPstore[2], &remoteIPstore[3],
29782978
&portStore, &readLength);
29792979
if (scanNum != 7)
@@ -3106,7 +3106,7 @@ SARA_R5_error_t SARA_R5::socketReadAvailableUDP(int socket, int *length)
31063106
{
31073107
char *searchPtr = strstr(response, "+USORF:");
31083108
if (searchPtr != NULL)
3109-
scanNum = sscanf(searchPtr, "+USORF: %d,%d",
3109+
scanNum = sscanf(searchPtr, "+USORF:%d,%d",
31103110
&socketStore, &readLength);
31113111
if (scanNum != 2)
31123112
{
@@ -3275,7 +3275,7 @@ SARA_R5_error_t SARA_R5::querySocketType(int socket, SARA_R5_socket_protocol_t *
32753275
{
32763276
char *searchPtr = strstr(response, "+USOCTL:");
32773277
if (searchPtr != NULL)
3278-
scanNum = sscanf(searchPtr, "+USOCTL: %d,0,%d",
3278+
scanNum = sscanf(searchPtr, "+USOCTL:%d,0,%d",
32793279
&socketStore, &paramVal);
32803280
if (scanNum != 2)
32813281
{
@@ -3327,7 +3327,7 @@ SARA_R5_error_t SARA_R5::querySocketLastError(int socket, int *error)
33273327
{
33283328
char *searchPtr = strstr(response, "+USOCTL:");
33293329
if (searchPtr != NULL)
3330-
scanNum = sscanf(searchPtr, "+USOCTL: %d,1,%d",
3330+
scanNum = sscanf(searchPtr, "+USOCTL:%d,1,%d",
33313331
&socketStore, &paramVal);
33323332
if (scanNum != 2)
33333333
{
@@ -3378,7 +3378,7 @@ SARA_R5_error_t SARA_R5::querySocketTotalBytesSent(int socket, uint32_t *total)
33783378
{
33793379
char *searchPtr = strstr(response, "+USOCTL:");
33803380
if (searchPtr != NULL)
3381-
scanNum = sscanf(searchPtr, "+USOCTL: %d,2,%lu",
3381+
scanNum = sscanf(searchPtr, "+USOCTL:^%d,2,%lu",
33823382
&socketStore, &paramVal);
33833383
if (scanNum != 2)
33843384
{
@@ -3429,7 +3429,7 @@ SARA_R5_error_t SARA_R5::querySocketTotalBytesReceived(int socket, uint32_t *tot
34293429
{
34303430
char *searchPtr = strstr(response, "+USOCTL:");
34313431
if (searchPtr != NULL)
3432-
scanNum = sscanf(searchPtr, "+USOCTL: %d,3,%lu",
3432+
scanNum = sscanf(searchPtr, "+USOCTL:%d,3,%lu",
34333433
&socketStore, &paramVal);
34343434
if (scanNum != 2)
34353435
{
@@ -3480,7 +3480,7 @@ SARA_R5_error_t SARA_R5::querySocketRemoteIPAddress(int socket, IPAddress *addre
34803480
{
34813481
char *searchPtr = strstr(response, "+USOCTL:");
34823482
if (searchPtr != NULL)
3483-
scanNum = sscanf(searchPtr, "+USOCTL: %d,4,\"%d.%d.%d.%d\",%d",
3483+
scanNum = sscanf(searchPtr, "+USOCTL:%d,4,\"%d.%d.%d.%d\",%d",
34843484
&socketStore,
34853485
&paramVals[0], &paramVals[1], &paramVals[2], &paramVals[3],
34863486
&paramVals[4]);
@@ -3536,7 +3536,7 @@ SARA_R5_error_t SARA_R5::querySocketStatusTCP(int socket, SARA_R5_tcp_socket_sta
35363536
{
35373537
char *searchPtr = strstr(response, "+USOCTL:");
35383538
if (searchPtr != NULL)
3539-
scanNum = sscanf(searchPtr, "+USOCTL: %d,10,%d",
3539+
scanNum = sscanf(searchPtr, "+USOCTL:%d,10,%d",
35403540
&socketStore, &paramVal);
35413541
if (scanNum != 2)
35423542
{
@@ -3587,7 +3587,7 @@ SARA_R5_error_t SARA_R5::querySocketOutUnackData(int socket, uint32_t *total)
35873587
{
35883588
char *searchPtr = strstr(response, "+USOCTL:");
35893589
if (searchPtr != NULL)
3590-
scanNum = sscanf(searchPtr, "+USOCTL: %d,11,%lu",
3590+
scanNum = sscanf(searchPtr, "+USOCTL:%d,11,%lu",
35913591
&socketStore, &paramVal);
35923592
if (scanNum != 2)
35933593
{
@@ -3638,7 +3638,7 @@ int SARA_R5::socketGetLastError()
36383638
{
36393639
char *searchPtr = strstr(response, "+USOER:");
36403640
if (searchPtr != NULL)
3641-
sscanf(searchPtr, "+USOER: %d", &errorCode);
3641+
sscanf(searchPtr, "+USOER:%d", &errorCode);
36423642
}
36433643

36443644
free(command);
@@ -4454,7 +4454,7 @@ SARA_R5_error_t SARA_R5::getNetworkAssignedIPAddress(int profile, IPAddress *add
44544454
{
44554455
char *searchPtr = strstr(response, "+UPSND:");
44564456
if (searchPtr != NULL)
4457-
scanNum = sscanf(searchPtr, "+UPSND: %d,%d,\"%d.%d.%d.%d\"",
4457+
scanNum = sscanf(searchPtr, "+UPSND:%d,%d,\"%d.%d.%d.%d\"",
44584458
&profileStore, &paramTag,
44594459
&paramVals[0], &paramVals[1], &paramVals[2], &paramVals[3]);
44604460
if (scanNum != 6)
@@ -5104,7 +5104,7 @@ SARA_R5_error_t SARA_R5::getFileSize(String filename, int *size)
51045104
}
51055105

51065106
int fileSize;
5107-
sscanf(responseStart, "+ULSTFILE: %d", &fileSize);
5107+
sscanf(responseStart, "+ULSTFILE:%d", &fileSize);
51085108
*size = fileSize;
51095109

51105110
free(command);
@@ -5420,7 +5420,7 @@ SARA_R5_error_t SARA_R5::getMNOprofile(mobile_network_operator_t *mno)
54205420
int scanned = 0;
54215421
char *searchPtr = strstr(response, "+UMNOPROF:");
54225422
if (searchPtr != NULL)
5423-
scanned = sscanf(searchPtr, "+UMNOPROF: %d,%d,%d,%d", &oStore, &d, &r, &u);
5423+
scanned = sscanf(searchPtr, "+UMNOPROF:%d,%d,%d,%d", &oStore, &d, &r, &u);
54245424
o = (mobile_network_operator_t)oStore;
54255425

54265426
if (scanned >= 1)
@@ -5830,7 +5830,9 @@ SARA_R5_error_t SARA_R5::parseSocketCloseIndication(String *closeIndication)
58305830
int search;
58315831
int socket;
58325832

5833-
search = closeIndication->indexOf("UUSOCL:") + strlen("UUSOCL:");
5833+
search = closeIndication->indexOf("UUSOCL:");
5834+
search += 7;
5835+
if (closeIndication->charAt(search) == ' ') search ++;
58345836

58355837
// Socket will be first integer, should be single-digit number between 0-6:
58365838
socket = closeIndication->substring(search, search + 1).toInt();

0 commit comments

Comments
 (0)