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

Dependents:   mtsas mtsas mtsas mtsas

Revision:
52:2cb58398a4f9
Parent:
51:ffc556ba33f7
Child:
55:85c04afa939a
--- a/Cellular/Cellular.cpp	Tue Aug 05 18:35:22 2014 +0000
+++ b/Cellular/Cellular.cpp	Mon Aug 11 16:03:19 2014 +0000
@@ -132,9 +132,6 @@
     return UNKNOWN;
 }
 
-//Removed setAPN to be implemented in the individual cellular classes,
-//as UIP and EasyIP implement it in different ways.
-
 Code Cellular::setDns(const std::string& primary, const std::string& secondary)
 {
     return sendBasicCommand("AT#DNS=1," + primary + "," + secondary, 1000);
@@ -212,47 +209,30 @@
         //Check for a response to signify the completion of the AT command
         //OK, ERROR, CONNECT are the 3 most likely responses
         if(result.size() > (command.size() + 2)) {
-                if(result.find("OK") != std::string::npos) {
-                    done = true;
-                } else if (result.find("ERROR") != std::string::npos) {
-                    done = true;
-                } else if (result.find("NO CARRIER") != std::string::npos) {
-                    done = true;
-                } else if (result.find("RING") != std::string::npos) {
+                if(result.find("OK\r\n",command.size()) != std::string::npos) {
                     done = true;
-                } else if (result.find("BUSY") != std::string::npos) {
-                    done = true;
-                } else if (result.find("NO ANSWER") != std::string::npos) {
+                } else if (result.find("ERROR\r\n") != std::string::npos) {
                     done = true;
-                }
-                
-                if (command.find("AT+CMGS=") != string::npos) {
-                    if (result.find('>') != string::npos) {
-                        done = true;
-                    }
+                } else if (result.find("NO CARRIER\r\n") != std::string::npos) {
+                    done = true;
                 }
                 
                 if(type == MTSMC_H5 || type == MTSMC_G3 || type == MTSMC_EV3 || type == MTSMC_C2) {
-                    if (result.find("CONNECT") != std::string::npos) {
-                        //Could add socketOpened flag check here if CONNECT is found
-                        done = true;
-                    } else if(result.find("NO DIALTONE") != std::string::npos) {
+                    if (result.find("CONNECT\r\n") != std::string::npos) {
                         done = true;
                     } 
                 } else if (type == MTSMC_H5_IP || type == MTSMC_EV3_IP || type == MTSMC_C2_IP) {
-                    if (result.find("Ok_Info_WaitingForData") != std::string::npos) {
+                    if (result.find("Ok_Info_WaitingForData\r\n") != std::string::npos) {
                         done = true;
-                    } else if (result.find("Ok_Info_SocketClosed") != std::string::npos) {
+                    } else if (result.find("Ok_Info_SocketClosed\r\n") != std::string::npos) {
                         done = true;
-                    } else if (result.find("Ok_Info_DataBegin") != std::string::npos) {
+                    } else if (result.find("Ok_Info_PPP\r\n") != std::string::npos) {
                         done = true;
-                    } else if (result.find("Ok_Info_NoMail") != std::string::npos) {
-                        done = true;
-                    } else if (result.find("Ok_Info_Mail") != std::string::npos) {
+                    } else if (result.find("Ok_Info_GprsActivation\r\n") != std::string::npos) {
                         done = true;
-                    } else if (result.find("Ok_Info_PPP") != std::string::npos) {
+                    } else if (result.find("alive") != std::string::npos) {
                         done = true;
-                    }
+                    } 
                 }
         }
         
@@ -263,7 +243,7 @@
             done = true;
         }
     } while (!done);
-
+    
     return result;
 }
 
@@ -286,11 +266,13 @@
         logError("CMGF failed");
         return code;
     }
+    
     code = sendBasicCommand(csmp, 1000);
     if (code != MTS_SUCCESS) {
         logError("CSMP failed [%s]", getRadioNames(type).c_str());
         return code;
     }
+    
     string cmd = "AT+CMGS=\"";
     cmd.append("+");
     cmd.append(phoneNumber);
@@ -304,15 +286,20 @@
             logError("CMGS phone number failed");
             return MTS_NO_RESPONSE;
         }
-
         wait(1);
     }
     wait(.2);
-    string  response2 = sendCommand(message, 4000, CTRL_Z);
-    logInfo("SMS Response: [%s]", response2.c_str());
-    if ((response2.find("+CMGS:") == string::npos) || (response2.find("ERROR") != std::string::npos)) {
-        logError("CMGS message failed");
-        return MTS_FAILURE;
+    
+    for (int i = 0; i < 5; i++) {
+        string  response2 = sendCommand(message, 4000, CTRL_Z);
+        if (response2.find("+CMGS:") != string::npos) {
+            break;
+        }
+        if (i >= 5) {
+            logError("CMGS message failed");
+            return MTS_FAILURE;
+        }
+        wait(1);
     }
     return MTS_SUCCESS;
 }