@@ -76,8 +76,8 @@ const char LTE_SHIELD_GPS_GPRMC[] = "+UGRMC";
76
76
const char LTE_SHIELD_RESPONSE_OK[] = " OK\r\n " ;
77
77
78
78
// CTRL+Z and ESC ASCII codes for SMS message sends
79
- # define ASCII_CTRL_Z 0x1A
80
- # define ASCII_ESC 0x1B
79
+ const char ASCII_CTRL_Z = 0x1A ;
80
+ const char ASCII_ESC = 0x1B ;
81
81
82
82
#define NOT_AT_COMMAND false
83
83
#define AT_COMMAND true
@@ -102,7 +102,9 @@ static boolean parseGPRMCString(char * rmcString, PositionData * pos, ClockData
102
102
103
103
LTE_Shield::LTE_Shield (uint8_t powerPin, uint8_t resetPin)
104
104
{
105
+ #ifdef LTE_SHIELD_SOFTWARE_SERIAL_ENABLED
105
106
_softSerial = NULL ;
107
+ #endif
106
108
_hardSerial = NULL ;
107
109
_baud = 0 ;
108
110
_resetPin = resetPin;
@@ -115,6 +117,7 @@ LTE_Shield::LTE_Shield(uint8_t powerPin, uint8_t resetPin)
115
117
memset (lteShieldRXBuffer, 0 , 128 );
116
118
}
117
119
120
+ #ifdef LTE_SHIELD_SOFTWARE_SERIAL_ENABLED
118
121
boolean LTE_Shield::begin (SoftwareSerial & softSerial, unsigned long baud)
119
122
{
120
123
LTE_Shield_error_t err;
@@ -128,6 +131,7 @@ boolean LTE_Shield::begin(SoftwareSerial & softSerial, unsigned long baud)
128
131
}
129
132
return false ;
130
133
}
134
+ #endif
131
135
132
136
boolean LTE_Shield::begin (HardwareSerial &hardSerial, unsigned long baud)
133
137
{
@@ -337,10 +341,11 @@ LTE_Shield_error_t LTE_Shield::enableEcho(boolean enable)
337
341
{
338
342
sprintf (command, " %s0" , LTE_SHIELD_COMMAND_ECHO);
339
343
}
340
-
341
344
err = sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK,
342
345
NULL , LTE_SHIELD_STANDARD_RESPONSE_TIMEOUT);
343
346
347
+ free (command);
348
+
344
349
return err;
345
350
}
346
351
@@ -473,6 +478,8 @@ LTE_Shield_error_t LTE_Shield::clock(uint8_t * y, uint8_t * mo, uint8_t * d,
473
478
char * clockBegin;
474
479
char * clockEnd;
475
480
481
+ int iy, imo, id, ih, imin, is, itz;
482
+
476
483
command = lte_calloc_char (strlen (LTE_SHIELD_COMMAND_CLOCK) + 2 );
477
484
if (command == NULL ) return LTE_SHIELD_ERROR_OUT_OF_MEMORY;
478
485
sprintf (command, " %s?" , LTE_SHIELD_COMMAND_CLOCK);
@@ -486,10 +493,16 @@ LTE_Shield_error_t LTE_Shield::clock(uint8_t * y, uint8_t * mo, uint8_t * d,
486
493
// Response format: \r\n+CCLK: "YY/MM/DD,HH:MM:SS-TZ"\r\n\r\nOK\r\n
487
494
if (err == LTE_SHIELD_ERROR_SUCCESS)
488
495
{
489
- if (sscanf (response, " \r\n +CCLK: \" %hhu/%hhu/%hhu,%hhu:%hhu:%hhu-%hhu \"\r\n " ,
490
- y, mo, d, h, min, s, tz ) == 7 )
496
+ if (sscanf (response, " \r\n +CCLK: \" %d/%d/%d,%d:%d:%d-%d \"\r\n " ,
497
+ &iy, &imo, &id, &ih, &imin, &is, &itz ) == 7 )
491
498
{
492
- // Do nothing?
499
+ *y = iy;
500
+ *mo = imo;
501
+ *d = id;
502
+ *h = ih;
503
+ *min = imin;
504
+ *s = is;
505
+ *tz = itz;
493
506
}
494
507
}
495
508
@@ -661,7 +674,7 @@ LTE_Shield_error_t LTE_Shield::getAPN(String * apn, IPAddress * ip)
661
674
char * command;
662
675
char * response;
663
676
char * searchPtr;
664
- uint8_t ipOctets[4 ];
677
+ int ipOctets[4 ];
665
678
666
679
command = lte_calloc_char (strlen (LTE_SHIELD_MESSAGE_PDP_DEF) + 3 );
667
680
if (command == NULL ) return LTE_SHIELD_ERROR_OUT_OF_MEMORY;
@@ -700,13 +713,13 @@ LTE_Shield_error_t LTE_Shield::getAPN(String * apn, IPAddress * ip)
700
713
// Now get the IP:
701
714
if (searchPtr != NULL )
702
715
{
703
- int scanned = sscanf (searchPtr, " \" ,\" %hhu.%hhu.%hhu.%hhu \" " ,
716
+ int scanned = sscanf (searchPtr, " \" ,\" %d.%d.%d.%d \" " ,
704
717
&ipOctets[0 ], &ipOctets[1 ], &ipOctets[2 ], &ipOctets[3 ]);
705
718
if (scanned == 4 )
706
719
{
707
720
for (int octet = 0 ; octet < 4 ; octet++)
708
721
{
709
- (*ip)[octet] = ipOctets[octet];
722
+ (*ip)[octet] = ( uint8_t ) ipOctets[octet];
710
723
}
711
724
}
712
725
}
@@ -799,7 +812,7 @@ uint8_t LTE_Shield::getOperators(struct operator_stats * opRet, int maxOps)
799
812
int stat;
800
813
char longOp[26 ];
801
814
char shortOp[11 ];
802
- uint8_t act;
815
+ int act;
803
816
unsigned long numOp;
804
817
805
818
opBegin = response;
@@ -972,7 +985,7 @@ LTE_Shield_error_t LTE_Shield::sendSMS(String number, String message)
972
985
messageCStr = lte_calloc_char (message.length () + 1 );
973
986
if (messageCStr == NULL )
974
987
{
975
- hwPrint (ASCII_ESC );
988
+ hwWrite (ASCII_CTRL_Z );
976
989
return LTE_SHIELD_ERROR_OUT_OF_MEMORY;
977
990
}
978
991
message.toCharArray (messageCStr, message.length () + 1 );
@@ -1110,7 +1123,7 @@ LTE_Shield_error_t LTE_Shield::socketClose(int socket, int timeout)
1110
1123
char * command;
1111
1124
1112
1125
command = lte_calloc_char (strlen (LTE_SHIELD_CLOSE_SOCKET) + 10 );
1113
- if (command == NULL ) return - 1 ;
1126
+ if (command == NULL ) return LTE_SHIELD_ERROR_OUT_OF_MEMORY ;
1114
1127
sprintf (command, " %s=%d" , LTE_SHIELD_CLOSE_SOCKET, socket);
1115
1128
1116
1129
return sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK,
@@ -1123,7 +1136,7 @@ LTE_Shield_error_t LTE_Shield::socketConnect(int socket, const char * address,
1123
1136
char * command;
1124
1137
1125
1138
command = lte_calloc_char (strlen (LTE_SHIELD_CONNECT_SOCKET) + strlen (address) + 11 );
1126
- if (command == NULL ) return - 1 ;
1139
+ if (command == NULL ) return LTE_SHIELD_ERROR_OUT_OF_MEMORY ;
1127
1140
sprintf (command, " %s=%d,\" %s\" ,%d" , LTE_SHIELD_CONNECT_SOCKET, socket, address, port);
1128
1141
1129
1142
return sendCommandWithResponse (command, LTE_SHIELD_RESPONSE_OK,
@@ -1522,7 +1535,7 @@ LTE_Shield_error_t LTE_Shield::getMno(mobile_network_operator_t * mno)
1522
1535
*mno = MNO_INVALID;
1523
1536
return LTE_SHIELD_ERROR_UNEXPECTED_RESPONSE;
1524
1537
}
1525
- *mno = *(response + i) - 0x30 ; // Convert to integer
1538
+ *mno = ( mobile_network_operator_t )( *(response + i) - 0x30 ) ; // Convert to integer
1526
1539
1527
1540
free (command);
1528
1541
free (response);
@@ -1561,7 +1574,7 @@ LTE_Shield_error_t LTE_Shield::getMno(mobile_network_operator_t * mno)
1561
1574
return LTE_SHIELD_ERROR_UNEXPECTED_RESPONSE;
1562
1575
}*/
1563
1576
1564
- LTE_Shield_error_t LTE_Shield::waitForResponse (char * expectedResponse, uint16_t timeout)
1577
+ LTE_Shield_error_t LTE_Shield::waitForResponse (const char * expectedResponse, uint16_t timeout)
1565
1578
{
1566
1579
unsigned long timeIn;
1567
1580
boolean found = false ;
@@ -1591,7 +1604,7 @@ LTE_Shield_error_t LTE_Shield::waitForResponse(char * expectedResponse, uint16_t
1591
1604
}
1592
1605
1593
1606
LTE_Shield_error_t LTE_Shield::sendCommandWithResponse (
1594
- const char * command, char * expectedResponse, char * responseDest,
1607
+ const char * command, const char * expectedResponse, char * responseDest,
1595
1608
unsigned long commandTimeout, boolean at)
1596
1609
{
1597
1610
unsigned long timeIn;
@@ -1647,17 +1660,13 @@ LTE_Shield_error_t LTE_Shield::sendCommandWithResponse(
1647
1660
1648
1661
boolean LTE_Shield::sendCommand (const char * command, boolean at)
1649
1662
{
1650
- char * commandToSend;
1651
-
1652
1663
readAvailable (NULL ); // Clear out receive buffer before sending a new command
1653
1664
1654
1665
if (at)
1655
1666
{
1656
- commandToSend = lte_calloc_char (strlen (LTE_SHIELD_COMMAND_AT) + strlen (command) + 2 );
1657
- if (commandToSend == NULL ) return false ;
1658
- sprintf (commandToSend, " %s%s\r " , LTE_SHIELD_COMMAND_AT, command);
1659
- hwPrint (commandToSend);
1660
- free (commandToSend);
1667
+ hwPrint (LTE_SHIELD_COMMAND_AT);
1668
+ hwPrint (command);
1669
+ hwPrint (" \r " );
1661
1670
}
1662
1671
else
1663
1672
{
@@ -1733,6 +1742,22 @@ size_t LTE_Shield::hwPrint(const char * s)
1733
1742
return (size_t ) 0 ;
1734
1743
}
1735
1744
1745
+ size_t LTE_Shield::hwWrite (const char c)
1746
+ {
1747
+ if (_hardSerial != NULL )
1748
+ {
1749
+ return _hardSerial->write (c);
1750
+ }
1751
+ #ifdef LTE_SHIELD_SOFTWARE_SERIAL_ENABLED
1752
+ else if (_softSerial != NULL )
1753
+ {
1754
+ return _softSerial->write (c);
1755
+ }
1756
+ #endif
1757
+
1758
+ return (size_t ) 0 ;
1759
+ }
1760
+
1736
1761
int LTE_Shield::readAvailable (char * inString)
1737
1762
{
1738
1763
int len = 0 ;
@@ -1742,19 +1767,31 @@ int LTE_Shield::readAvailable(char * inString)
1742
1767
while (_hardSerial->available ())
1743
1768
{
1744
1769
char c = (char )_hardSerial->read ();
1745
- inString[len++] = c;
1770
+ if (inString != NULL )
1771
+ {
1772
+ inString[len++] = c;
1773
+ }
1774
+ }
1775
+ if (inString != NULL )
1776
+ {
1777
+ inString[len] = 0 ;
1746
1778
}
1747
- inString[len] = 0 ;
1748
1779
}
1749
1780
#ifdef LTE_SHIELD_SOFTWARE_SERIAL_ENABLED
1750
1781
if (_softSerial != NULL )
1751
1782
{
1752
1783
while (_softSerial->available ())
1753
1784
{
1754
1785
char c = (char )_softSerial->read ();
1755
- inString[len++] = c;
1786
+ if (inString != NULL )
1787
+ {
1788
+ inString[len++] = c;
1789
+ }
1790
+ }
1791
+ if (inString != NULL )
1792
+ {
1793
+ inString[len] = 0 ;
1756
1794
}
1757
- inString[len] = 0 ;
1758
1795
}
1759
1796
#endif
1760
1797
0 commit comments