Cellular library for MTS Socket Modem Arduino Shield devices from Multi-Tech Systems

Dependents:   mtsas mtsas mtsas mtsas

Files at this revision

API Documentation at this revision

Comitter:
Vanger
Date:
Tue Jul 01 19:50:39 2014 +0000
Parent:
27:ec44d5a9544f
Child:
29:edc613ed3f2e
Commit message:
Made ping() more robust under EasyIP.; Tweaked disconnect() under EasyIP to be more reliable.;

Changed in this revision

Cellular/EasyIP.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/Cellular/EasyIP.cpp	Mon Jun 30 17:13:00 2014 +0000
+++ b/Cellular/EasyIP.cpp	Tue Jul 01 19:50:39 2014 +0000
@@ -126,21 +126,25 @@
 
 void EasyIP::disconnect()
 {
+    bool complete = false;
+    Timer dctmr;
     //AT#SGACT=1,0: Close a PPP connection
-    logDebug("Closing PPP Connection");
-
+    logDebug("Closing PPP Connection");    
     if(socketOpened) {
         close(); //Calls another EasyIP 
                  //function to close socket before disconnect
     }
     //Sends AT#SGACT=1,0 command
-    
-    if(sendBasicCommand("AT#SGACT=1,0", 10000) == MTS_SUCCESS) {
-        logDebug("Successfully closed PPP Connection");
-    } else {
-        logError("Closing PPP Connection. Continuing ...");
-    }
-    pppConnected = false; //We can do this since the cell will drop their side after timeout
+    dctmr.start();
+    do {
+        if(sendBasicCommand("AT#SGACT=1,0", 10000) == MTS_SUCCESS) {
+            complete = true;
+        } else {
+            wait(0.050);
+        }
+    } while((!complete) && (dctmr.read() < 5));
+    logDebug("Successfully closed PPP Connection");
+    pppConnected = false; //Cell will drop connection if we go silent
 }
 
 bool EasyIP::isConnected()
@@ -259,13 +263,29 @@
     int Timeout=0;
     
     //Format parameters for sending to radio
-    sprintf(buffer, "AT#PING=%s,1,32,%d", address.c_str(), (10*PINGDELAY));
+    sprintf(buffer, "AT#PING=%s,1,32,%d", address.c_str(), (5*PINGDELAY));
     
     for(int pngs=0; pngs<PINGNUM; pngs++) {
-        std::string response = sendCommand(buffer, (PINGDELAY*1500)); //Send 1 ping
-        if(response.empty()) continue; //Skip current loop if send command fails
+        std::string response = sendCommand(buffer, (PINGDELAY*1000)); //Send 1 ping
+        //printf("Response [%s]\n", response.c_str()); //remove
+        if(response.empty()) {
+            //printf("Response empty!\n"); //remove
+            continue; //Skip current loop if send command fails
+        }
+        if(response.find("ERROR") != std::string::npos) {
+            //printf("ERROR found\n"); //remove
+            continue; //Skip current loop if send command fails
+        }
         parts = Text::split(response, "\r\n");
+        if(parts.size() < 2) {
+            //printf("Response newline-split size %d\n", parts.size()); //remove
+            continue;
+        }
         parts = Text::split(parts[1], ",");
+        if(parts.size() < 4) {
+            //printf("Response comma-split size %d\n", parts.size()); //remove
+            continue;
+        }
         //Parse TTL and Timeout values
         Timeout = std::atoi(parts[2].c_str());
         TTL = std::atoi(parts[3].c_str());