This library controls the WNC. There is a derived class for usage from the K64F board.

Fork of WncControllerLibrary by Fred Kellerman

Revision:
6:a656e820d7ff
Parent:
5:20207cc5502e
Child:
7:e6f22159ef23
--- a/WncController.cpp	Tue Sep 06 19:11:14 2016 +0000
+++ b/WncController.cpp	Thu Sep 08 18:57:56 2016 +0000
@@ -320,6 +320,11 @@
     }
 }
 
+void WncController::setWncCmdTimeout(uint16_t toMs)
+{
+    m_sCmdTimeoutMs = toMs;
+}
+
 /**
  *  \brief Opens a WNC socket.
  *
@@ -963,12 +968,12 @@
     return (false);
 }
 
-size_t WncController::readSMSText(const char ** log)
+size_t WncController::readSMSText(const char n, const char ** msg)
 {
-    size_t n;
+    size_t i;
 
-    n = at_readSMStext_wnc(log);
-    if (n == 0)
+    i = at_readSMStext_wnc(n,msg);
+    if (i == 0)
         dbgPuts("readSMSText: Failed!");
         
     return (n);
@@ -1173,7 +1178,6 @@
 bool WncController::at_saveSMStext_wnc(const char * const phoneNum, const char * const text, char * msgIdx)
 {
     string respStr;
-    string * pRespStr;
     size_t l = strlen(text);
     
     if (l <= MAX_WNC_SMS_LENGTH)
@@ -1181,8 +1185,6 @@
         // Check to see if the SMS service is available
         checkCellLink();
         if (m_sReadyForSMS == true) {
-            at_send_wnc_cmd("AT+CMGF=1", &pRespStr, m_sCmdTimeoutMs);
-            at_send_wnc_cmd("AT+CPMS=\"SM\",\"SM\",\"SM\"", &pRespStr, m_sCmdTimeoutMs);
             string cmdStr("AT+CMGW=\"");
             cmdStr += phoneNum;
             cmdStr += "\"";
@@ -1222,19 +1224,27 @@
 size_t WncController::at_readSMSlog_wnc(const char ** log)
 {
     string * pRespStr;
+    static string smsLogStr;
+    
+    smsLogStr.erase();
 
     if (at_send_wnc_cmd("AT+CMGL", &pRespStr, m_sCmdTimeoutMs) == WNC_AT_CMD_OK)
-        *log = pRespStr->c_str();
-    else
-        *log = "\0";
+        smsLogStr = *pRespStr;
         
+    *log = smsLogStr.c_str();
+    
     return (pRespStr->size());
 }
 
-size_t WncController::at_readSMStext_wnc(const char ** log)
+size_t WncController::at_readSMStext_wnc(const char n, const char ** log)
 {
+    static string smsReadTxtStr;
     string * pRespStr;
-
+    string cmdStr;
+        
+    smsReadTxtStr.erase();
+    cmdStr = "AT+CMGR";
+    cmdStr += '1';
     if (at_send_wnc_cmd("AT+CMGR", &pRespStr, m_sCmdTimeoutMs) == WNC_AT_CMD_OK)
         *log = pRespStr->c_str();
     else
@@ -1267,6 +1277,11 @@
   // Quick commands below do not need to check cellular connectivity
   at_send_wnc_cmd("ATE0", &pRespStr, WNC_QUICK_CMD_TIMEOUT_MS);  // Echo Off
   at_send_wnc_cmd("AT+CMEE=2", &pRespStr, m_sCmdTimeoutMs);      // 2 - verbose error, 1 - numeric error, 0 - just ERROR
+
+  // Setup 3 memory slots in the WNC SIM for SMS usage.
+  at_send_wnc_cmd("AT+CMGF=1", &pRespStr, m_sCmdTimeoutMs);
+  at_send_wnc_cmd("AT+CPMS=\"SM\",\"SM\",\"SM\"", &pRespStr, m_sCmdTimeoutMs);
+
   cmdRes = at_send_wnc_cmd("AT", &pRespStr, WNC_QUICK_CMD_TIMEOUT_MS);     // Heartbeat?
   
   // If the simple commands are not working, no chance of more complex.
@@ -1401,9 +1416,9 @@
         cmd_str += _to_string(numSock + 1);
         cmd_str += ",";
         cmd_str += _to_string(n);
-        cmd_str += num2str;
         cmd_str += ",\"";
-        while(*s != '\0') {
+        while(n > 0) {
+            n--;
             num2str = _to_hex_string((uint8_t)*s++);
             // Always 2-digit ascii hex:
             if (strlen(num2str) == 1)