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:
74:3e3ee15584e5
Parent:
68:6e311c747045
Child:
75:8cc98a3b9c62
--- a/wnc_control.cpp	Thu Aug 11 21:14:32 2016 +0000
+++ b/wnc_control.cpp	Sat Aug 13 15:08:11 2016 +0000
@@ -1,5 +1,5 @@
 /* ===================================================================
-Copyright © 2016, AVNET Inc.  
+Copyright c 2016, AVNET Inc.  
 
 Licensed under the Apache License, Version 2.0 (the "License"); 
 you may not use this file except in compliance with the License.
@@ -37,7 +37,8 @@
     WNC_OK =0,
     WNC_CMD_ERR = -1,
     WNC_NO_RESPONSE = -2,
-    WNC_CELL_LINK_DOWN = -3
+    WNC_CELL_LINK_DOWN = -3,
+    WNC_EXTERR = -4
 };
 
 // Contains result of last call to send_wnc_cmd(..)
@@ -156,6 +157,12 @@
       {
         PUTS("Socket Write fail!!!\r\n");
         software_init_mdm();
+      }else if (WNC_MDM_ERR == WNC_EXTERR)
+      {
+        PUTS("Socket Disconnected (broken) !!!\r\n");
+        sockclose_mdm();
+        sockopen_mdm();
+        //software_init_mdm();
       }
     } while (WNC_MDM_ERR != WNC_OK);
     }
@@ -214,7 +221,7 @@
 
 /**                                                                                                                                                          
  * C++ version 0.4 char* style "itoa":                                                                                                                       
- * Written by Lukás Chmela                                                                                                                                   
+ * Written by Lukas Chmela                                                                                                                                   
  * Released under GPLv3.                                                                                                                                     
 */
  
@@ -353,6 +360,11 @@
   
   if (cmdRes == -2)
      WNC_MDM_ERR = WNC_NO_RESPONSE;
+     
+  if (cmdRes == -3) {
+     WNC_MDM_ERR = WNC_EXTERR;
+     pc.printf("[[WNC_MDM_ERR = WNC_EXTERR]] \r\n");
+  }
 
   if (cmdRes == 0)
      WNC_MDM_ERR = WNC_OK;
@@ -362,7 +374,9 @@
 
 int at_send_wnc_cmd(const char * s, string ** r, int ms_timeout)
 {
-  static const char * rsp_lst[] = { "OK", "ERROR", NULL };
+   //Eaddy
+  static const char * rsp_lst[] = { "OK", "ERROR","@EXTERR", "+CME",NULL };
+  //static const char * rsp_lst[] = { "OK", "ERROR", NULL };
   int len;
 
 #ifdef WNC_CMD_DEBUG_ON
@@ -402,11 +416,23 @@
       PUTS("]\r\n");
       #endif
 #endif
-
+#if 0
       if (res > 0)
           return -1;
       else
           return 0;
+#else
+    //Eaddy added         
+       if (res == 0) {
+          /* OK */
+          return 0;
+      } else if (res == 2) {
+          /* @EXTERR */
+          pc.printf("@EXTERR and res = %d \r\n", res);
+          return -3;
+      } else
+          return -1;
+#endif
   }
   else
   {
@@ -541,6 +567,7 @@
   string * pRespStr;
   char num2str[6];
   size_t sLen = strlen(s);
+  int res;
   if (sLen <= 1500)
   {
     string cmd_str("AT@SOCKWRITE=1,");
@@ -560,7 +587,10 @@
       cmd_str += num2str;
     }
     cmd_str += "\"";
-    send_wnc_cmd(cmd_str.c_str(), &pRespStr, 120000);
+    res = send_wnc_cmd(cmd_str.c_str(), &pRespStr, 120000);
+    
+    if (res == -3)
+        PUTS("sockwrite is disconnect \r\n");
   }
   else
     PUTS("sockwrite Err, string to long\r\n");