@@ -1527,6 +1527,165 @@ SARA_R5_error_t SARA_R5::sendSMS(String number, String message)
1527
1527
return err;
1528
1528
}
1529
1529
1530
+ SARA_R5_error_t SARA_R5::getPreferredMessageStorage (int *used, int *total, String memory)
1531
+ {
1532
+ SARA_R5_error_t err;
1533
+ char *command;
1534
+ char *response;
1535
+ int u;
1536
+ int t;
1537
+
1538
+ command = sara_r5_calloc_char (strlen (SARA_R5_PREF_MESSAGE_STORE) + 6 );
1539
+ if (command == NULL )
1540
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
1541
+ sprintf (command, " %s=\" %s\" " , SARA_R5_PREF_MESSAGE_STORE, memory.c_str ());
1542
+
1543
+ response = sara_r5_calloc_char (48 );
1544
+ if (response == NULL )
1545
+ {
1546
+ free (command);
1547
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
1548
+ }
1549
+
1550
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
1551
+ SARA_R5_3_MIN_TIMEOUT);
1552
+
1553
+ if (err != SARA_R5_ERROR_SUCCESS)
1554
+ {
1555
+ free (command);
1556
+ free (response);
1557
+ return err;
1558
+ }
1559
+
1560
+ int ret = sscanf (response, " \r\n +CPMS: %d,%d" , &u, &t);
1561
+ if (ret == 2 )
1562
+ {
1563
+ if (_printDebug == true )
1564
+ {
1565
+ _debugPort->print (" getPreferredMessageStorage: memory: " );
1566
+ _debugPort->print (memory);
1567
+ _debugPort->print (" used: " );
1568
+ _debugPort->print (u);
1569
+ _debugPort->print (" total: " );
1570
+ _debugPort->println (t);
1571
+ }
1572
+ *used = u;
1573
+ *total = t;
1574
+ }
1575
+ else
1576
+ {
1577
+ err = SARA_R5_ERROR_INVALID;
1578
+ }
1579
+
1580
+ free (response);
1581
+ free (command);
1582
+ return err;
1583
+ }
1584
+
1585
+ SARA_R5_error_t SARA_R5::readSMSmessage (int location, String *unread, String *from, String *dateTime, String *message)
1586
+ {
1587
+ SARA_R5_error_t err;
1588
+ char *command;
1589
+ char *response;
1590
+
1591
+ command = sara_r5_calloc_char (strlen (SARA_R5_READ_TEXT_MESSAGE) + 5 );
1592
+ if (command == NULL )
1593
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
1594
+ sprintf (command, " %s=%d" , SARA_R5_READ_TEXT_MESSAGE, location);
1595
+
1596
+ response = sara_r5_calloc_char (1024 );
1597
+ if (response == NULL )
1598
+ {
1599
+ free (command);
1600
+ return SARA_R5_ERROR_OUT_OF_MEMORY;
1601
+ }
1602
+
1603
+ err = sendCommandWithResponse (command, SARA_R5_RESPONSE_OK, response,
1604
+ SARA_R5_10_SEC_TIMEOUT);
1605
+
1606
+ if (err == SARA_R5_ERROR_SUCCESS)
1607
+ {
1608
+ char *searchPtr = response;
1609
+
1610
+ // Find the first occurrence of +CGDCONT:
1611
+ searchPtr = strstr (searchPtr, " +CMGR: " );
1612
+ if (searchPtr != NULL )
1613
+ {
1614
+ searchPtr += strlen (" +CMGR: " ); // Point to the originator address
1615
+ int pointer = 0 ;
1616
+ while ((*(++searchPtr) != ' \" ' ) && (*searchPtr != ' \0 ' ) && (pointer < 12 ))
1617
+ {
1618
+ unread->concat (*(searchPtr));
1619
+ pointer++;
1620
+ }
1621
+ if ((*searchPtr == ' \0 ' ) || (pointer == 12 ))
1622
+ {
1623
+ free (command);
1624
+ free (response);
1625
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
1626
+ }
1627
+ // Search to the next quote
1628
+ searchPtr = strchr (++searchPtr, ' \" ' );
1629
+ pointer = 0 ;
1630
+ while ((*(++searchPtr) != ' \" ' ) && (*searchPtr != ' \0 ' ) && (pointer < 24 ))
1631
+ {
1632
+ from->concat (*(searchPtr));
1633
+ pointer++;
1634
+ }
1635
+ if ((*searchPtr == ' \0 ' ) || (pointer == 24 ))
1636
+ {
1637
+ free (command);
1638
+ free (response);
1639
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
1640
+ }
1641
+ // Skip two commas
1642
+ searchPtr = strchr (++searchPtr, ' ,' );
1643
+ searchPtr = strchr (++searchPtr, ' ,' );
1644
+ // Search to the next quote
1645
+ searchPtr = strchr (++searchPtr, ' \" ' );
1646
+ pointer = 0 ;
1647
+ while ((*(++searchPtr) != ' \" ' ) && (*searchPtr != ' \0 ' ) && (pointer < 24 ))
1648
+ {
1649
+ dateTime->concat (*(searchPtr));
1650
+ pointer++;
1651
+ }
1652
+ if ((*searchPtr == ' \0 ' ) || (pointer == 24 ))
1653
+ {
1654
+ free (command);
1655
+ free (response);
1656
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
1657
+ }
1658
+ // Search to the next new line
1659
+ searchPtr = strchr (++searchPtr, ' \n ' );
1660
+ pointer = 0 ;
1661
+ while ((*(++searchPtr) != ' \r ' ) && (*searchPtr != ' \n ' ) && (*searchPtr != ' \0 ' ) && (pointer < 512 ))
1662
+ {
1663
+ message->concat (*(searchPtr));
1664
+ pointer++;
1665
+ }
1666
+ if ((*searchPtr == ' \0 ' ) || (pointer == 512 ))
1667
+ {
1668
+ free (command);
1669
+ free (response);
1670
+ return SARA_R5_ERROR_UNEXPECTED_RESPONSE;
1671
+ }
1672
+ }
1673
+ else
1674
+ {
1675
+ err = SARA_R5_ERROR_UNEXPECTED_RESPONSE;
1676
+ }
1677
+ }
1678
+ else
1679
+ {
1680
+ err = SARA_R5_ERROR_UNEXPECTED_RESPONSE;
1681
+ }
1682
+
1683
+ free (command);
1684
+ free (response);
1685
+
1686
+ return err;
1687
+ }
1688
+
1530
1689
SARA_R5_error_t SARA_R5::setBaud (unsigned long baud)
1531
1690
{
1532
1691
SARA_R5_error_t err;
@@ -2450,11 +2609,12 @@ SARA_R5_error_t SARA_R5::waitForResponse(const char *expectedResponse, const cha
2450
2609
2451
2610
timeIn = millis ();
2452
2611
2453
- while ((!found) && (timeIn + timeout > millis ()))
2612
+ while ((!found) && (( timeIn + timeout) > millis ()))
2454
2613
{
2455
2614
if (hwAvailable ())
2456
2615
{
2457
2616
char c = readChar ();
2617
+ if (_printDebug == true ) _debugPort->print ((String)c);
2458
2618
if (c == expectedResponse[responseIndex])
2459
2619
{
2460
2620
if (++responseIndex == strlen (expectedResponse))
@@ -2515,7 +2675,7 @@ SARA_R5_error_t SARA_R5::sendCommandWithResponse(
2515
2675
int backlogIndex = sendCommand (command, at);// Sending command needs to dump data to backlog buffer as well.
2516
2676
unsigned long timeIn = millis ();
2517
2677
2518
- while ((!found) && (timeIn + commandTimeout > millis ()))
2678
+ while ((!found) && (( timeIn + commandTimeout) > millis ()))
2519
2679
{
2520
2680
if (hwAvailable ())
2521
2681
{
@@ -2933,11 +3093,11 @@ boolean SARA_R5::parseGPRMCString(char *rmcString, PositionData *pos,
2933
3093
unsigned long tTemp;
2934
3094
char tempData[TEMP_NMEA_DATA_SIZE];
2935
3095
2936
- if (_printDebug == true )
2937
- {
2938
- _debugPort->println (F (" parseGPRMCString: rmcString: " ));
2939
- _debugPort->println (rmcString);
2940
- }
3096
+ // if (_printDebug == true)
3097
+ // {
3098
+ // _debugPort->println(F("parseGPRMCString: rmcString: "));
3099
+ // _debugPort->println(rmcString);
3100
+ // }
2941
3101
2942
3102
// Fast-forward test to first value:
2943
3103
ptr = strchr (rmcString, ' ,' );
0 commit comments