5
5
Do you like this library? Help support SparkFun. Buy a board!
6
6
https://www.sparkfun.com/products/14997
7
7
Written by Jim Lindblom @ SparkFun Electronics, September 5, 2018
8
-
8
+
9
9
This Arduino library provides mechanisms to initialize and use
10
10
the SARA-R4 module over either a SoftwareSerial or hardware serial port.
11
11
@@ -461,7 +461,11 @@ String LTE_Shield::clock(void)
461
461
err = sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK,
462
462
response, LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
463
463
if (err != LTE_SHIELD_ERROR_SUCCESS)
464
+ {
465
+ free (command);
466
+ free (response);
464
467
return " " ;
468
+ }
465
469
466
470
// Response format: \r\n+CCLK: "YY/MM/DD,HH:MM:SS-TZ"\r\n\r\nOK\r\n
467
471
clockBegin = strchr (response, ' \" ' ); // Find first quote
@@ -529,6 +533,8 @@ LTE_Shield_error_t LTE_Shield::clock(uint8_t *y, uint8_t *mo, uint8_t *d,
529
533
}
530
534
}
531
535
536
+ free (command);
537
+ free (response);
532
538
return err;
533
539
}
534
540
@@ -544,6 +550,7 @@ LTE_Shield_error_t LTE_Shield::autoTimeZone(boolean enable)
544
550
545
551
err = sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK,
546
552
NULL , LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
553
+ free (command);
547
554
return err;
548
555
}
549
556
@@ -569,7 +576,11 @@ int8_t LTE_Shield::rssi(void)
569
576
err = sendCommandWithResponse (command,
570
577
LTE_SHIELD_RESPONSE_OK, response, 10000 , AT_COMMAND);
571
578
if (err != LTE_SHIELD_ERROR_SUCCESS)
579
+ {
580
+ free (command);
581
+ free (response);
572
582
return -1 ;
583
+ }
573
584
574
585
if (sscanf (response, " \r\n +CSQ: %d,%*d" , &rssi) != 1 )
575
586
{
@@ -603,7 +614,11 @@ LTE_Shield_registration_status_t LTE_Shield::registration(void)
603
614
err = sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK,
604
615
response, LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT, AT_COMMAND);
605
616
if (err != LTE_SHIELD_ERROR_SUCCESS)
617
+ {
618
+ free (command);
619
+ free (response);
606
620
return LTE_SHIELD_REGISTRATION_INVALID;
621
+ }
607
622
608
623
if (sscanf (response, " \r\n +CREG: %*d,%d" , &status) != 1 )
609
624
{
@@ -676,6 +691,7 @@ LTE_Shield_error_t LTE_Shield::setAPN(String apn, uint8_t cid, LTE_Shield_pdp_ty
676
691
switch (pdpType)
677
692
{
678
693
case PDP_TYPE_INVALID:
694
+ free (command);
679
695
return LTE_SHIELD_ERROR_UNEXPECTED_PARAM;
680
696
break ;
681
697
case PDP_TYPE_IP:
@@ -903,6 +919,7 @@ LTE_Shield_error_t LTE_Shield::registerOperator(struct operator_stats oper)
903
919
err = sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK, NULL ,
904
920
180000 );
905
921
922
+ free (command);
906
923
return err;
907
924
}
908
925
@@ -981,6 +998,7 @@ LTE_Shield_error_t LTE_Shield::deregisterOperator(void)
981
998
err = sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK, NULL ,
982
999
LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
983
1000
1001
+ free (command);
984
1002
return err;
985
1003
}
986
1004
@@ -1038,14 +1056,15 @@ LTE_Shield_error_t LTE_Shield::sendSMS(String number, String message)
1038
1056
1039
1057
err = sendCommandWithResponse (messageCStr, LTE_SHIELD_RESPONSE_OK,
1040
1058
NULL , 180000 , NOT_AT_COMMAND);
1059
+
1060
+ free (messageCStr);
1041
1061
}
1042
1062
else
1043
1063
{
1064
+ free (numberCStr);
1044
1065
err = LTE_SHIELD_ERROR_OUT_OF_MEMORY;
1045
1066
}
1046
1067
1047
- free (messageCStr);
1048
-
1049
1068
return err;
1050
1069
}
1051
1070
@@ -1135,13 +1154,14 @@ LTE_Shield::LTE_Shield_gpio_mode_t LTE_Shield::getGpioMode(LTE_Shield_gpio_t gpi
1135
1154
1136
1155
sprintf (gpioChar, " %d" , gpio); // Convert GPIO to char array
1137
1156
gpioStart = strstr (response, gpioChar); // Find first occurence of GPIO in response
1138
- if (gpioStart == NULL )
1139
- return GPIO_MODE_INVALID; // If not found return invalid
1140
- sscanf (gpioStart, " %*d,%d\r\n " , &gpioMode);
1141
1157
1142
1158
free (command);
1143
1159
free (response);
1144
1160
1161
+ if (gpioStart == NULL )
1162
+ return GPIO_MODE_INVALID; // If not found return invalid
1163
+ sscanf (gpioStart, " %*d,%d\r\n " , &gpioMode);
1164
+
1145
1165
return (LTE_Shield_gpio_mode_t)gpioMode;
1146
1166
}
1147
1167
@@ -1639,7 +1659,6 @@ LTE_Shield_error_t LTE_Shield::setMno(mobile_network_operator_t mno)
1639
1659
{
1640
1660
LTE_Shield_error_t err;
1641
1661
char *command;
1642
- char *response;
1643
1662
1644
1663
command = lte_calloc_char (strlen (LTE_SHIELD_COMMAND_MNO) + 3 );
1645
1664
if (command == NULL )
@@ -1650,7 +1669,6 @@ LTE_Shield_error_t LTE_Shield::setMno(mobile_network_operator_t mno)
1650
1669
NULL , LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
1651
1670
1652
1671
free (command);
1653
- free (response);
1654
1672
1655
1673
return err;
1656
1674
}
@@ -1678,12 +1696,18 @@ LTE_Shield_error_t LTE_Shield::getMno(mobile_network_operator_t *mno)
1678
1696
err = sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK,
1679
1697
response, LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
1680
1698
if (err != LTE_SHIELD_ERROR_SUCCESS)
1699
+ {
1700
+ free (command);
1701
+ free (response);
1681
1702
return err;
1703
+ }
1682
1704
1683
1705
i = strcspn (response, mno_keys); // Find first occurence of MNO key
1684
1706
if (i == strlen (response))
1685
1707
{
1686
1708
*mno = MNO_INVALID;
1709
+ free (command);
1710
+ free (response);
1687
1711
return LTE_SHIELD_ERROR_UNEXPECTED_RESPONSE;
1688
1712
}
1689
1713
*mno = (mobile_network_operator_t )(response[i] - 0x30 ); // Convert to integer
@@ -1694,7 +1718,7 @@ LTE_Shield_error_t LTE_Shield::getMno(mobile_network_operator_t *mno)
1694
1718
return err;
1695
1719
}
1696
1720
1697
- /* LTE_Shield_error_t LTE_Shield::sendCommandWithResponseAndTimeout(const char * command,
1721
+ /* LTE_Shield_error_t LTE_Shield::sendCommandWithResponseAndTimeout(const char * command,
1698
1722
char * expectedResponse, uint16_t commandTimeout, boolean at)
1699
1723
{
1700
1724
unsigned long timeIn = millis();
@@ -1716,7 +1740,7 @@ LTE_Shield_error_t LTE_Shield::getMno(mobile_network_operator_t *mno)
1716
1740
return LTE_SHIELD_ERROR_OUT_OF_MEMORY;
1717
1741
}
1718
1742
readAvailable(response);
1719
-
1743
+
1720
1744
// Check for expected response
1721
1745
if (strcmp(response, expectedResponse) == 0)
1722
1746
{
@@ -1843,7 +1867,10 @@ LTE_Shield_error_t LTE_Shield::parseSocketReadIndication(int socket, int length)
1843
1867
1844
1868
err = socketRead (socket, length, readDest);
1845
1869
if (err != LTE_SHIELD_ERROR_SUCCESS)
1870
+ {
1871
+ free (readDest);
1846
1872
return err;
1873
+ }
1847
1874
1848
1875
if (_socketReadCallback != NULL )
1849
1876
{
@@ -2255,4 +2282,4 @@ static boolean parseGPRMCString(char *rmcString, PositionData *pos,
2255
2282
return true ;
2256
2283
}
2257
2284
return false ;
2258
- }
2285
+ }
0 commit comments