Remote I/O Sensor bus with AT&T flow and M2X cloud

Dependencies:   DHT11 FXOS8700CQ MODSERIAL mbed

Fork of Avnet_ATT_Cellular_IOT by Avnet

Revision:
75:8cc98a3b9c62
Parent:
74:3e3ee15584e5
Parent:
73:da723fedfdd2
Child:
77:c65eae5b9958
--- a/wnc_control.cpp	Sat Aug 13 15:08:11 2016 +0000
+++ b/wnc_control.cpp	Sat Aug 13 17:46:30 2016 +0000
@@ -59,12 +59,12 @@
     cmd_str += MY_APN_STR;
     cmd_str += ",IP";
     at_send_wnc_cmd(cmd_str.c_str(), &pRespStr, 4*WNC_TIMEOUT_MS); // Set APN, cmd seems to take a little longer sometimes
-    PUTS(cmd_str.c_str());
  }   
 
   static bool reportStatus = true;
   do
   {
+      PUTS("------------ software_init_mdm! --------->\r\n");
       if (check_wnc_ready() == 0)
       {
           if (reportStatus == false)
@@ -290,6 +290,8 @@
   
     // SIM card OK, now check for signal and cellular network registration
     cmdRes1 = at_send_wnc_cmd("AT+CREG?", &pRespStr, WNC_TIMEOUT_MS);      // Check if registered on network
+    if (pRespStr->size() > 0)
+    {
     pos = pRespStr->find("CREG: ");
     if (pos != string::npos)
     {
@@ -309,7 +311,15 @@
 #ifdef WNC_CMD_DEBUG_ON_VERBOSE
     PUTS("------------ WNC Ready ---------------->\r\n");
 #endif
-  
+    }
+    else
+    {
+#ifdef WNC_CMD_DEBUG_ON_VERBOSE
+        PUTS("------------ CREG No Reply !----------->\r\n");
+#endif
+        return (-2);
+    }
+
     return (0);
 }
 
@@ -326,6 +336,7 @@
      PUTS("FAIL send cmd: ");
      #ifdef WNC_CMD_DEBUG_ON_VERBOSE
      PUTS(s);
+
      #else
      string truncStr(s, 50);
      truncStr += "\r\n";
@@ -366,7 +377,7 @@
      pc.printf("[[WNC_MDM_ERR = WNC_EXTERR]] \r\n");
   }
 
-  if (cmdRes == 0)
+ if (cmdRes == 0)
      WNC_MDM_ERR = WNC_OK;
   
   return (cmdRes);
@@ -375,8 +386,7 @@
 int at_send_wnc_cmd(const char * s, string ** r, int ms_timeout)
 {
    //Eaddy
-  static const char * rsp_lst[] = { "OK", "ERROR","@EXTERR", "+CME",NULL };
-  //static const char * rsp_lst[] = { "OK", "ERROR", NULL };
+  static const char * rsp_lst[] = { "OK", "ERROR","@EXTERR", "+CME", NULL };
   int len;
 
 #ifdef WNC_CMD_DEBUG_ON
@@ -416,6 +426,7 @@
       PUTS("]\r\n");
       #endif
 #endif
+
 #if 0
       if (res > 0)
           return -1;
@@ -428,7 +439,7 @@
           return 0;
       } else if (res == 2) {
           /* @EXTERR */
-          pc.printf("@EXTERR and res = %d \r\n", res);
+          PRINTF("@EXTERR and res = %d \r\n", res);
           return -3;
       } else
           return -1;
@@ -522,7 +533,11 @@
   cmd_str += "\",";
   cmd_str += port;
   cmd_str += ",30";
-  send_wnc_cmd(cmd_str.c_str(), &pRespStr, 31000);
+  int cmd = send_wnc_cmd(cmd_str.c_str(), &pRespStr, 31000);
+  if (cmd != WNC_OK) {
+      // Per WNC: re-close even if open fails!
+      at_sockclose_wnc();
+  }
 }
 
 void at_sockclose_wnc(void)
@@ -588,7 +603,6 @@
     }
     cmd_str += "\"";
     res = send_wnc_cmd(cmd_str.c_str(), &pRespStr, 120000);
-    
     if (res == -3)
         PUTS("sockwrite is disconnect \r\n");
   }
@@ -619,29 +633,35 @@
       // between each retry.
       wait_ms(10);
       
-      send_wnc_cmd(cmd_str.c_str(), &pRespStr, WNC_TIMEOUT_MS);
-      
-      size_t pos_start = pRespStr->find("\"")  + 1;
-      size_t pos_end   = pRespStr->rfind("\"") - 1;
+      if (send_wnc_cmd(cmd_str.c_str(), &pRespStr, WNC_TIMEOUT_MS) == 0)
+      {
+        size_t pos_start = pRespStr->find("\"")  + 1;
+        size_t pos_end   = pRespStr->rfind("\"") - 1;
       
-      // Make sure search finds what it's looking for!
-      if (pos_start != string::npos && pos_end != string::npos)
+        // Make sure search finds what it's looking for!
+        if (pos_start != string::npos && pos_end != string::npos)
           i = (pos_end - pos_start + 1);  // Num hex chars, 2 per byte
-      else
+        else
           i = 0;
           
-      if (i > 0)
+        if (i > 0)
+        {
+            retries = 1;  // If any data found retry 1 more time to catch data that might be in another
+                          //  WNC payload
+            string byte;
+            while (pos_start < pos_end)
+            {
+              byte = pRespStr->substr(pos_start, 2);
+              *pS += (char)strtol(byte.c_str(), NULL, 16);
+              pos_start += 2;
+            }
+            numBytes += i/2;
+        }
+      }
+      else
       {
-        retries = 1;  // If any data found retry 1 more time to catch data that might be in another
-                      //  WNC payload
-        string byte;
-        while (pos_start < pos_end)
-        {
-          byte = pRespStr->substr(pos_start, 2);
-          *pS += (char)strtol(byte.c_str(), NULL, 16);
-          pos_start += 2;
-        }
-        numBytes += i/2;
+          PUTS("no readsock reply!\r\n");
+          return (0);
       }
     }
   }