Jeremy Hammel / Mbed 2 deprecated ATT_Smart_Home

Dependencies:   mbed FXOS8700CQ MODSERIAL

Files at this revision

API Documentation at this revision

Comitter:
fkellermavnet
Date:
Sat Aug 13 15:08:11 2016 +0000
Parent:
72:b500e1507b5f
Child:
75:8cc98a3b9c62
Commit message:
Merged in latest code from Eaddy. This adds in more checks if the socket disconnects and attempts to reconnect it and also to search for the +CME error condition.

Changed in this revision

cell_modem.cpp Show annotated file Show diff for this revision Revisions of this file
wnc_control.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/cell_modem.cpp	Thu Aug 11 21:14:32 2016 +0000
+++ b/cell_modem.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.
@@ -113,7 +113,12 @@
                 while (rsp_list[rsp_idx]) {
                     if (strcasecmp(rsp, rsp_list[rsp_idx]) == 0) {
                         return rsp_idx;
-                    }
+                    } else if (strncmp(rsp, "@EXTERR", 7) == 0){
+                        pc.printf("----- We got EXTERR ---\r\n");
+                        return 2;    
+                    } else if (strncmp(rsp, "+CME", 4) == 0){
+                        return 3;    
+                    } 
                     rsp_idx++;
                 }
             }
@@ -220,7 +225,12 @@
             while (rsp_list[rsp_idx]) {
                 if (strcasecmp(cmd_buf, rsp_list[rsp_idx]) == 0) {
                     return rsp_idx;
-                }
+                } else if (strncmp(cmd_buf, "@EXTERR", 7) == 0){
+                    pc.printf("----- We got EXTERR ---\r\n");
+                    return 2;    
+                } else if (strncmp(cmd_buf, "+CME", 4) == 0){
+                    return 3;    
+                } 
                 rsp_idx++;
             }
         }
@@ -332,4 +342,3 @@
     }
     return iStatus;
 }
-
--- 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");