* add C027_Support fork

Fork of C027_Support by u-blox

Revision:
125:25a292afbac6
Parent:
124:65eb7d58f2da
Child:
126:bfbb9e19f6e0
--- a/MDM.cpp	Thu Aug 20 08:07:37 2015 +0000
+++ b/MDM.cpp	Thu Aug 20 13:47:29 2015 +0000
@@ -4,7 +4,7 @@
  #include "C027_api.h"
 #endif
 #include "MDMAPN.h"
-                
+        
 #define PROFILE         "0"   //!< this is the psd profile used
 #define MAX_SIZE        128   //!< max expected messages
 // num sockets
@@ -187,7 +187,7 @@
                     if ((socket != SOCKET_ERROR) && _sockets[socket].connected)
                         _sockets[socket].connected = false;
                 }
-                if (_dev.dev == DEV_LISA_C200) {
+                if (_dev.dev == DEV_LISA_C2) {
                     // CDMA Specific -------------------------------------------
                     // +CREG: <n><SID>,<NID>,<stat>
                     if (sscanf(cmd, "CREG: %*d,%d,%d,%d",&a,&b,&c) == 3) {
@@ -368,7 +368,7 @@
     if (_dev.dev == DEV_UNKNOWN)
         goto failure;
     // device specific init
-    if (_dev.dev == DEV_LISA_C200) {
+    if (_dev.dev == DEV_LISA_C2) {
         // get the manufacturer
         sendFormated("AT+GMI\r\n");
         if (RESP_OK != waitFinalResp(_cbString, _dev.manu))
@@ -396,23 +396,17 @@
         }
 #endif
     } else {
-        if ((_dev.dev == DEV_LISA_U200) || (_dev.dev == DEV_LEON_G200)) {
+        if ((_dev.dev == DEV_LISA_U2) || (_dev.dev == DEV_LEON_G2) || 
+            (_dev.dev == DEV_TOBY_L2)) {
             // enable the network identification feature 
             sendFormated("AT+UGPIOC=20,2\r\n");
             if (RESP_OK != waitFinalResp())
                 goto failure;
-        } else if ((_dev.dev == DEV_SARA_U260) || (_dev.dev == DEV_SARA_U270) || 
-                   (_dev.dev == DEV_SARA_G350)) {
+        } else if ((_dev.dev == DEV_SARA_U2) || (_dev.dev == DEV_SARA_G35)) {
             // enable the network identification feature 
             sendFormated("AT+UGPIOC=16,2\r\n");
             if (RESP_OK != waitFinalResp())
                 goto failure;
-        } else if ((_dev.dev == DEV_TOBY_L200) || (_dev.dev == DEV_TOBY_L201) || 
-                   (_dev.dev == DEV_TOBY_L210)) {
-            // enable the network identification feature 
-            //sendFormated("AT+UGPIOC=20,2\r\n");
-            //if (RESP_OK != waitFinalResp())
-            //    goto failure;
         }
         // check the sim card
         for (int i = 0; (i < 5) && (_dev.sim != SIM_READY); i++) {
@@ -474,7 +468,7 @@
             goto failure;
     } 
     // enable the network registration unsolicited result code
-    sendFormated("AT+CREG=%d\r\n", (_dev.dev == DEV_LISA_C200) ? 1 : 2);
+    sendFormated("AT+CREG=%d\r\n", (_dev.dev == DEV_LISA_C2) ? 1 : 2);
     if (RESP_OK != waitFinalResp())
         goto failure;
     // Setup SMS in text mode 
@@ -517,15 +511,13 @@
 int MDMParser::_cbATI(int type, const char* buf, int len, Dev* dev)
 {
     if ((type == TYPE_UNKNOWN) && dev) {
-        if      (strstr(buf, "SARA-G350")) *dev = DEV_SARA_G350;
-        else if (strstr(buf, "LISA-U200")) *dev = DEV_LISA_U200;
-        else if (strstr(buf, "LISA-C200")) *dev = DEV_LISA_C200;
-        else if (strstr(buf, "SARA-U260")) *dev = DEV_SARA_U260;
-        else if (strstr(buf, "SARA-U270")) *dev = DEV_SARA_U270;
-        else if (strstr(buf, "LEON-G200")) *dev = DEV_LEON_G200;
-        else if (strstr(buf, "TOBY-L200") || strstr(buf, "MPCI-L200")) *dev = DEV_TOBY_L200;
-        else if (strstr(buf, "TOBY-L201") || strstr(buf, "MPCI-L201")) *dev = DEV_TOBY_L201;
-        else if (strstr(buf, "TOBY-L210") || strstr(buf, "MPCI-L210")) *dev = DEV_TOBY_L210;
+        if      (strstr(buf, "SARA-G35"))   *dev = DEV_SARA_G35;
+        else if (strstr(buf, "LISA-U2"))    *dev = DEV_LISA_U2;
+        else if (strstr(buf, "LISA-C2"))    *dev = DEV_LISA_C2;
+        else if (strstr(buf, "SARA-U2"))    *dev = DEV_SARA_U2;
+        else if (strstr(buf, "LEON-G2"))    *dev = DEV_LEON_G2;
+        else if (strstr(buf, "TOBY-L2"))    *dev = DEV_TOBY_L2;
+        else if (strstr(buf, "MPCI-L2"))    *dev = DEV_MPCI_L2;
     }
     return WAIT;
 }
@@ -577,21 +569,20 @@
     // check registration
     sendFormated("AT+CREG?\r\n");
     waitFinalResp();     // don't fail as service could be not subscribed 
-    if (_dev.dev != DEV_LISA_C200) {
+    if (_dev.dev != DEV_LISA_C2) {
         // check PSD registration
         sendFormated("AT+CGREG?\r\n");
         waitFinalResp(); // don't fail as service could be not subscribed 
+        if ((_dev.dev == DEV_TOBY_L2) ||  (_dev.dev == DEV_MPCI_L2)) {
+            // check EPS network registration
+            sendFormated("AT+CEREG?\r\n");
+            waitFinalResp(); // don't fail as service could be not subscribed
+        }
     }
-    if ((_dev.dev == DEV_TOBY_L201) || (_dev.dev == DEV_TOBY_L210)||
-        (_dev.dev == DEV_TOBY_L201)) {
-        // check EPS network registration
-        sendFormated("AT+CEREG?\r\n");
-        waitFinalResp(); // don't fail as service could be not subscribed
-     }
     if (REG_OK(_net.csd) || REG_OK(_net.psd) || REG_OK(_net.eps))
     {
         // check modem specific status messages 
-        if (_dev.dev == DEV_LISA_C200) {
+        if (_dev.dev == DEV_LISA_C2) {
             sendFormated("AT+CSS?\r\n");
             if (RESP_OK != waitFinalResp())
                 goto failure;
@@ -726,7 +717,7 @@
     LOCK();
     INFO("Modem::join\r\n");
     _ip = NOIP;
-    if (_dev.dev == DEV_LISA_C200) {
+    if (_dev.dev == DEV_LISA_C2) {
         // make a dumy dns lookup (which will fail, so ignore the result) 
         sendFormated("AT+UDNSRN=0,\"u-blox.com\"\r\n");
         waitFinalResp(); 
@@ -737,6 +728,7 @@
         sendFormated("AT+CMIP?\r\n");
         if (RESP_OK != waitFinalResp(_cbCMIP, &_ip))
             goto failure;
+    
     } else { 
         // check gprs attach status 
         sendFormated("AT+CGATT=1\r\n");
@@ -762,31 +754,36 @@
             const char* config = NULL;
             if (!apn && !username && !password)
                 config = apnconfig(_dev.imsi);
-            
-            // Set up the dynamic IP address assignment.
-            sendFormated("AT+UPSD=" PROFILE ",7,\"0.0.0.0\"\r\n");
-            if (RESP_OK != waitFinalResp())
-                goto failure;
- 
+/*NOT SUP*/ if ((_dev.dev != DEV_TOBY_L2) && (_dev.dev != DEV_MPCI_L2)) {
+                // Set up the dynamic IP address assignment.
+                sendFormated("AT+UPSD=" PROFILE ",7,\"0.0.0.0\"\r\n");
+                if (RESP_OK != waitFinalResp())
+                    goto failure;
+            }
             do {
                 if (config) {
                     apn      = _APN_GET(config);
                     username = _APN_GET(config);
                     password = _APN_GET(config);
-                    TRACE("Testing APN Settings(\"%s\",\"%s\",\"%s\")\r\n", apn, username, password);
                 }
+                // convert pointer to empty strings
+                apn      = apn      ? apn      : "";
+                username = username ? username : "";
+                password = password ? password : "";
+                auth = (*username && *password) ? auth : AUTH_NONE;
+                TRACE("Testing APN Settings(\"%s\",\"%s\",\"%s\",%d)\r\n", apn, username, password, auth);
                 // Set up the APN
-                if (apn && *apn) {
+                if (*apn) {
                     sendFormated("AT+UPSD=" PROFILE ",1,\"%s\"\r\n", apn);
                     if (RESP_OK != waitFinalResp())
                         goto failure;
                 }
-                if (username && *username) {
+                if (*username) {
                     sendFormated("AT+UPSD=" PROFILE ",2,\"%s\"\r\n", username);
                     if (RESP_OK != waitFinalResp())
                         goto failure;
                 }
-                if (password && *password) {
+                if (*password) {
                     sendFormated("AT+UPSD=" PROFILE ",3,\"%s\"\r\n", password);
                     if (RESP_OK != waitFinalResp())
                         goto failure;
@@ -797,10 +794,12 @@
                 // 2 = CHAP (Challenge Handshake Authentication Protocol)
                 for (int i = AUTH_NONE; i <= AUTH_CHAP && !ok; i ++) {
                     if ((auth == AUTH_DETECT) || (auth == i)) {
-                        // Set up the Authentication Protocol
-                        sendFormated("AT+UPSD=" PROFILE ",6,%d\r\n", i);
-                        if (RESP_OK != waitFinalResp())
-                            goto failure;
+/*NOT SUP*/             if ((_dev.dev != DEV_TOBY_L2) && (_dev.dev != DEV_MPCI_L2)) {
+                            // Set up the Authentication Protocol
+                            sendFormated("AT+UPSD=" PROFILE ",6,%d\r\n",i);
+                            if (RESP_OK != waitFinalResp())
+                                goto failure;
+                        }
                         // Activate the profile and make connection
                         sendFormated("AT+UPSDA=" PROFILE ",3\r\n");
                         if (RESP_OK == waitFinalResp(NULL,NULL,150*1000))
@@ -880,7 +879,7 @@
     LOCK();
     INFO("Modem::disconnect\r\n");
     if (_ip != NOIP) {
-        if (_dev.dev == DEV_LISA_C200) {
+        if (_dev.dev == DEV_LISA_C2) {
             // There something to do here
             _ip = NOIP;
             ok = true;
@@ -935,7 +934,7 @@
     if (socket != SOCKET_ERROR) {
         if (ipproto == IPPROTO_UDP) {
             // sending port can only be set on 2G/3G modules
-            if ((port != -1) && (_dev.dev != DEV_LISA_C200)) {
+            if ((port != -1) && (_dev.dev != DEV_LISA_C2)) {
                 sendFormated("AT+USOCR=17,%d\r\n", port);
             } else {
                 sendFormated("AT+USOCR=17\r\n");
@@ -1339,7 +1338,7 @@
     bool ok = false;
     LOCK();
     *buf = '\0';
-    if (_dev.dev != DEV_LISA_C200) {
+    if (_dev.dev != DEV_LISA_C2) {
         sendFormated("AT+CUSD=1,\"%s\"\r\n",cmd);
         ok = (RESP_OK == waitFinalResp(_cbCUSD, buf));
     }
@@ -1424,10 +1423,8 @@
             _DPRINT dprint, void* param) 
 {
     dprint(param, "Modem::devStatus\r\n");
-    const char* txtDev[] = { "Unknown", 
-                             "SARA-G350", "LISA-U200", "LISA-C200", 
-                             "SARA-U260", "SARA-U270", "LEON-G200",
-                             "TOBY-L200", "TOBY-L201", "TOBY-L210" };
+    const char* txtDev[] = { "Unknown",  "SARA-G35", "LISA-U2", "LISA-C2", 
+                             "SARA-U2",  "LEON-G2",  "TOBY-L2", "MPCI-L2" };
     if (status->dev < sizeof(txtDev)/sizeof(*txtDev) && (status->dev != DEV_UNKNOWN))
         dprint(param, "  Device:       %s\r\n", txtDev[status->dev]);
     const char* txtLpm[] = { "Disabled", "Enabled", "Active" };