Demo application for using the AT&T IoT Starter Kit Powered by AWS.
Dependencies: SDFileSystem
Fork of ATT_AWS_IoT_demo by
IoT Starter Kit Powered by AWS Demo
This program demonstrates the AT&T IoT Starter Kit sending data directly into AWS IoT. It's explained and used in the Getting Started with the IoT Starter Kit Powered by AWS on starterkit.att.com.
What's required
- AT&T IoT LTE Add-on (also known as the Cellular Shield)
- NXP K64F - for programming
- microSD card - used to store your AWS security credentials
- AWS account
- Python, locally installed
If you don't already have an IoT Starter Kit, you can purchase a kit here. The IoT Starter Kit Powered by AWS includes the LTE cellular shield, K64F, and a microSD card.
Diff: WNCInterface/WNCSocket/WNCTCPSocketConnection.cpp
- Revision:
- 15:6f2798e45099
diff -r 339320b096c5 -r 6f2798e45099 WNCInterface/WNCSocket/WNCTCPSocketConnection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WNCInterface/WNCSocket/WNCTCPSocketConnection.cpp Thu Dec 01 18:05:38 2016 +0000 @@ -0,0 +1,125 @@ +/* ===================================================================== + 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 + +WNCTCPSocketConnection::WNCTCPSocketConnection() : + _is_blocking(0), + _btimeout(0){ +} + +// +// blocking is used to make the WNC keep checking for incoming data for a +// period of time. +// +void WNCTCPSocketConnection::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 WNCTCPSocketConnection::connect(const char* host, const int port) { + WNCSocket::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 WNCTCPSocketConnection::is_connected(void) { + return ( WNCInterface::_pwnc->getWncStatus() == WncController_fk::WncController::WNC_ON )? 1:0; +} + +int WNCTCPSocketConnection::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, data, length) ) + ret = length; + M_ULOCK; + } + return ret; +} + +int WNCTCPSocketConnection::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 WNCTCPSocketConnection::send_all(char* data, int length) { + return send(data,length); +} + +int WNCTCPSocketConnection::receive_all(char* data, int length) { + return receive(data,length); +} + +int WNCTCPSocketConnection::close(void) { + WNCSocket::disconnect(); + M_LOCK; + int ret = ( WNCInterface::_pwnc->getWncStatus() == WncController_fk::WncController::WNC_ON )? 0:-1; + M_ULOCK; + return ret; +} + +