Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: WncControllerK64F
Dependents: WNCProximityMqtt Pubnub_ATT_IoT_SK_WNC_sync BluemixDemo BluemixQS ... more
See the WNCInterface README in the Wiki tab for detailed information on this library.
Diff: Socket/WncTCPSocketConnection.cpp
- 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;
+}
+

