I added functionality to get the RSSI, BER, and Cell Neighbor for reporting connection issues to M2X

Dependencies:   WncControllerK64F

Revision:
26:81e520908460
Parent:
25:52bad4105cac
Child:
28:dceb8da78e6d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Socket/WncTCPSocketConnection.cpp	Fri Mar 24 21:43:57 2017 +0000
@@ -0,0 +1,124 @@
+/* =====================================================================
+   Copyright © 2016, Avnet (R)
+   Contributors:
+     * James M Flynn, www.em.avnet.com 
+ 
+   Licensed under the Apache License, Version 2.0 (the "License"); 
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+    http://www.apache.org/licenses/LICENSE-2.0
+   Unless required by applicable law or agreed to in writing, 
+   software distributed under the License is distributed on an 
+   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 
+   either express or implied. See the License for the specific 
+   language governing permissions and limitations under the License.
+    @file          WNCInterface.cpp
+    @version       1.0
+    @date          Sept 2016
+======================================================================== */
+
+#include "../WNCInterface.h"
+
+#include "WncSocket.h"
+#include "WncTCPSocketConnection.h"
+#include <cstring>
+
+#define READ_EVERYMS   500     //number of milliseconds between WNC socket reads
+
+TCPSocketConnection::TCPSocketConnection() :
+        _is_blocking(0),
+        _btimeout(0){
+}
+
+//
+// blocking is used to make the WNC keep checking for incoming data for a
+// period of time.
+//
+void TCPSocketConnection::set_blocking (bool blocking, unsigned int timeout) {
+    _is_blocking = blocking;   // true if we want to wait for request
+    _btimeout = timeout;       // user specs msec
+
+    CHK_WNCFE(( WNCInterface::_pwnc->getWncStatus() == FATAL_FLAG ), void);
+    M_LOCK;
+    WNCInterface::_pwnc->setReadRetryWait(0, 0);
+    WNCInterface::_pwnc->setReadRetries(0, 0);
+    M_ULOCK;
+}
+
+
+int TCPSocketConnection::connect(const char* host, const int port) {
+    Socket::connect((char*)host, SOCK_STREAM, port);
+    _is_blocking = false;   // start out not blocking, user will set it if desired
+    return ( WNCInterface::_pwnc->getWncStatus() == WncController_fk::WncController::WNC_ON )? 0:-1;
+}
+
+bool TCPSocketConnection::is_connected(void) {
+    return ( WNCInterface::_pwnc->getWncStatus() == WncController_fk::WncController::WNC_ON )? 1:0;
+}
+
+int TCPSocketConnection::send(char* data, int length) {
+    int ret = -1;
+    
+    WncController_fk::WncController::WncState_e s = WNCInterface::_pwnc->getWncStatus();
+
+    CHK_WNCFE(( s == FATAL_FLAG ), fail);
+ 
+    if( s == WncController_fk::WncController::WNC_ON ) {
+      M_LOCK;
+      if( WNCInterface::_pwnc->write(0, (const uint8_t*)data, length) )
+        ret = length;
+      M_ULOCK;
+      }
+    return ret;
+}
+
+int TCPSocketConnection::receive(char *readBuf, int length) {
+    Timer t;
+    size_t done, cnt;
+    int ret=-1;
+    WncController_fk::WncController::WncState_e s = WNCInterface::_pwnc->getWncStatus();
+
+    CHK_WNCFE(( s  == FATAL_FLAG ), fail);
+    if( s != WncController_fk::WncController::WNC_ON )
+        return ret;
+
+    M_LOCK;
+    t.start();
+    do {
+        if( !(t.read_ms() % READ_EVERYMS) )
+          cnt = WNCInterface::_pwnc->read(0, (uint8_t *)readBuf, (uint32_t) length);
+        if( _is_blocking )
+            done = cnt;
+        else
+            done = cnt | (t.read_ms() > _btimeout);
+        }
+    while( !done );
+    t.stop();
+    M_ULOCK;
+    
+    if( WNCInterface::_pwnc->getWncStatus() == WNC_GOOD ) {
+        //readBuf[cnt] = '\0';
+        ret = (int)cnt;
+        }
+    else
+        ret = -1;
+    
+    return ret;
+}
+
+int TCPSocketConnection::send_all(char* data, int length) {
+  return send(data,length);
+}
+
+int TCPSocketConnection::receive_all(char* data, int length) {
+  return receive(data,length);
+}
+
+int TCPSocketConnection::close(void) {
+  Socket::disconnect();
+  M_LOCK;
+  int ret = ( WNCInterface::_pwnc->getWncStatus() == WncController_fk::WncController::WNC_ON )? 0:-1;
+  M_ULOCK;
+  return ret;
+}
+