This library controls the WNC. There is a derived class for usage from the K64F board.

Fork of WncControllerLibrary by Fred Kellerman

Revision:
28:eece2151e1e5
Parent:
27:c2b9ef5ccbef
Child:
29:69ada8524b4a
--- a/WncController.cpp	Wed Sep 21 02:31:23 2016 +0000
+++ b/WncController.cpp	Fri Sep 23 03:14:34 2016 +0000
@@ -367,27 +367,31 @@
         // Already open ? Must close if want to re-open with new settings.
         if (m_sSock[numSock].open == true) {
             dbgPuts("Socket already open, close then re-open!");
-            at_sockclose_wnc(m_sSock[numSock].numWncSock);
-            m_sSock[numSock].open = false;
+            if (true == at_sockclose_wnc(m_sSock[numSock].numWncSock))
+                m_sSock[numSock].open = false;
+            else
+                return (false);
         }
         
         m_sSock[numSock].myPort = port;
         m_sSock[numSock].isTcp = tcp;
         m_sSock[numSock].timeOutSec = timeOutSec;
         
-        int numWncSock = at_sockopen_wnc(m_sSock[numSock].myIpAddressStr.c_str(), port, numSock, tcp, timeOutSec);
+        int16_t numWncSock = at_sockopen_wnc(m_sSock[numSock].myIpAddressStr.c_str(), port, numSock, tcp, timeOutSec);
         m_sSock[numSock].numWncSock = numWncSock;
         if (numWncSock > 0 && numWncSock <= MAX_NUM_WNC_SOCKETS)
             m_sSock[numSock].open = true;
-        else
+        else {
             m_sSock[numSock].open = false;
-            
-        if (m_sSock[numSock].open == false) {
             dbgPuts("Socket open fail!!!!");
-            // Work-around.  If the sock open fails it needs to be told
-            // to close.  If 6 sock opens happen with a fail, it further
-            // crashes the WNC.  Not sure why the sock won't open.
-            at_sockclose_wnc(m_sSock[numSock].numWncSock);
+            
+            // If the modem is not responding don't bother it.
+            if (WNC_NO_RESPONSE != getWncStatus()) {
+                // Work-around.  If the sock open fails it needs to be told
+                // to close.  If 6 sock opens happen with a fail, it further
+                // crashes the WNC.  Not sure why the sock won't open.
+                at_sockclose_wnc(m_sSock[numSock].numWncSock);
+            }
         }
     }
     else {
@@ -416,7 +420,7 @@
     
     AtCmdErr_e cmdRes = at_sockwrite_wnc(s, n, m_sSock[numSock].numWncSock, isTcp);
     if (cmdRes != WNC_AT_CMD_OK) {
-        if ((cmdRes == WNC_AT_CMD_ERREXT) || (cmdRes == WNC_AT_CMD_TIMEOUT) || (cmdRes == WNC_AT_CMD_ERRCME))
+        if ((cmdRes == WNC_AT_CMD_ERREXT) || (cmdRes == WNC_AT_CMD_ERRCME))
         {
             // This may throw away any data that hasn't been written out of the WNC
             //  but at this point with the way the WNC currently works we have
@@ -512,7 +516,10 @@
                 else {
                     theBuf += readStr; // Append what if any we got before it errored.
                     dbgPuts("Sockread failed!");
-                    if (cmdRes == WNC_AT_CMD_ERREXT || cmdRes == WNC_AT_CMD_TIMEOUT)
+                    if (WNC_NO_RESPONSE == getWncStatus()) {
+                        i = 0;
+                    }
+                    else if ((cmdRes == WNC_AT_CMD_ERREXT) || (cmdRes == WNC_AT_CMD_ERRCME))
                     {
                         // This may throw away any data that hasn't been read out of the WNC
                         //  but at this point with the way the WNC currently works we have
@@ -579,7 +586,10 @@
                 }
                 else {
                     dbgPuts("Sockread failed!");
-                    if (cmdRes == WNC_AT_CMD_ERREXT || cmdRes == WNC_AT_CMD_TIMEOUT)
+                    if (WNC_NO_RESPONSE == getWncStatus()) {
+                        i = 0;
+                    }
+                    else if ((cmdRes == WNC_AT_CMD_ERREXT) || (cmdRes == WNC_AT_CMD_ERRCME))
                     {
                         // This may throw away any data that hasn't been read out of the WNC
                         //  but at this point with the way the WNC currently works we have
@@ -850,17 +860,26 @@
     // Try to open and close the socket
     do {
         dbgPuts("Try to close and re-open socket");
-        at_sockclose_wnc(m_sSock[numSock].numWncSock);
+        if (false == at_sockclose_wnc(m_sSock[numSock].numWncSock)) {
+            if (WNC_NO_RESPONSE == getWncStatus()) {
+                dbgPuts("No response for closeOpenSocket1");
+                return ;
+            }
+        }        
 
         int numWncSock = at_sockopen_wnc(m_sSock[numSock].myIpAddressStr.c_str(), m_sSock[numSock].myPort, numSock, m_sSock[numSock].isTcp, m_sSock[numSock].timeOutSec);
         m_sSock[numSock].numWncSock = numWncSock;
         if (numWncSock > 0 && numWncSock <= MAX_NUM_WNC_SOCKETS)
             m_sSock[numSock].open = true;
-        else
+        else {
             m_sSock[numSock].open = false;
-
-        if (m_sSock[numSock].open == false)
             dbgPuts("Failed to re-open socket!");
+        }
+        
+        if (WNC_NO_RESPONSE == getWncStatus()) {
+            dbgPuts("No response for closeOpenSocket2");
+            return ;
+        }
     } while (m_sSock[numSock].open == false);
 }
 
@@ -1930,7 +1949,7 @@
  
     if (cmd && n > 0) {
         sendCmd(cmd, crLf);
-//        sendCmdSlow(cmd, n, 500);  // 3rd arg is micro seconds between chars sent
+//        sendCmd(cmd, n, 1000, crLf);  // 3rd arg is micro seconds between chars sent
     }
 
     startTimerA();