V.06 11/3

Dependencies:   FT6206 SDFileSystem SPI_TFT_ILI9341 TFT_fonts

Fork of ATT_AWS_IoT_demo by attiot

Committer:
ampembeng
Date:
Thu Dec 01 18:05:38 2016 +0000
Revision:
15:6f2798e45099
Child:
16:02008a2a2569
Initial commit.  Demo works with both the FRDM wired Ethernet and the Avnet Shield wireless modem.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ampembeng 15:6f2798e45099 1 /**
ampembeng 15:6f2798e45099 2 * @file timer.c
ampembeng 15:6f2798e45099 3 * @brief mbed-os implementation of the network interface needed for AWS.
ampembeng 15:6f2798e45099 4 */
ampembeng 15:6f2798e45099 5 #include "network_interface.h"
ampembeng 15:6f2798e45099 6 #include "EthernetInterface.h"
ampembeng 15:6f2798e45099 7
ampembeng 15:6f2798e45099 8 #include "aws_iot_config.h"
ampembeng 15:6f2798e45099 9 #include "aws_iot_log.h"
ampembeng 15:6f2798e45099 10
ampembeng 15:6f2798e45099 11 #include "mbedtls/net_sockets.h"
ampembeng 15:6f2798e45099 12
ampembeng 15:6f2798e45099 13 //=====================================================================================================================
ampembeng 15:6f2798e45099 14 //
ampembeng 15:6f2798e45099 15 // Uses Avnet Sheild (AT&T wireless LTE)
ampembeng 15:6f2798e45099 16 //
ampembeng 15:6f2798e45099 17 //=====================================================================================================================
ampembeng 15:6f2798e45099 18 #ifdef USING_AVNET_SHIELD
ampembeng 15:6f2798e45099 19 #include "WNCInterface.h"
ampembeng 15:6f2798e45099 20 #include "WNCTCPSocketConnection.h"
ampembeng 15:6f2798e45099 21
ampembeng 15:6f2798e45099 22 // Expose serial for WNC boot
ampembeng 15:6f2798e45099 23 extern MODSERIAL pc;
ampembeng 15:6f2798e45099 24
ampembeng 15:6f2798e45099 25 // Network socket
ampembeng 15:6f2798e45099 26 WNCTCPSocketConnection* _tcpsocket;
ampembeng 15:6f2798e45099 27
ampembeng 15:6f2798e45099 28 int net_modem_boot()
ampembeng 15:6f2798e45099 29 {
ampembeng 15:6f2798e45099 30 INFO("Booting WNC modem...");
ampembeng 15:6f2798e45099 31 int rc = -1;
ampembeng 15:6f2798e45099 32 WNCInterface eth_iface;
ampembeng 15:6f2798e45099 33
ampembeng 15:6f2798e45099 34 INFO("...Using Avnet AT&T wireless Shield");
ampembeng 15:6f2798e45099 35 rc = eth_iface.init(NULL, &pc);
ampembeng 15:6f2798e45099 36 INFO("WNC Module %s initialized (%02X).", rc?"IS":"IS NOT", rc);
ampembeng 15:6f2798e45099 37 if( !rc ) {
ampembeng 15:6f2798e45099 38 ERROR("DHCP failed.");
ampembeng 15:6f2798e45099 39 return rc;
ampembeng 15:6f2798e45099 40 }
ampembeng 15:6f2798e45099 41
ampembeng 15:6f2798e45099 42 eth_iface.connect();
ampembeng 15:6f2798e45099 43 INFO("...IP Address: %s ", eth_iface.getIPAddress());
ampembeng 15:6f2798e45099 44 return rc;
ampembeng 15:6f2798e45099 45 }
ampembeng 15:6f2798e45099 46
ampembeng 15:6f2798e45099 47 void mbedtls_net_init( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 48 {
ampembeng 15:6f2798e45099 49 DEBUG("...mbedtls_net_init()");
ampembeng 15:6f2798e45099 50
ampembeng 15:6f2798e45099 51 _tcpsocket = new WNCTCPSocketConnection;
ampembeng 15:6f2798e45099 52
ampembeng 15:6f2798e45099 53 return;
ampembeng 15:6f2798e45099 54 }
ampembeng 15:6f2798e45099 55
ampembeng 15:6f2798e45099 56 int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto )
ampembeng 15:6f2798e45099 57 {
ampembeng 15:6f2798e45099 58 DEBUG("...mbedtls_net_connect");
ampembeng 15:6f2798e45099 59 int ret = -1;
ampembeng 15:6f2798e45099 60
ampembeng 15:6f2798e45099 61 /* Connect to the server */
ampembeng 15:6f2798e45099 62 INFO("Connecting with %s\r\n", host);
ampembeng 15:6f2798e45099 63 ret = _tcpsocket->connect(host, AWS_IOT_MQTT_PORT); //TODO
ampembeng 15:6f2798e45099 64
ampembeng 15:6f2798e45099 65 return ret;
ampembeng 15:6f2798e45099 66 }
ampembeng 15:6f2798e45099 67
ampembeng 15:6f2798e45099 68 int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, uint32_t timeout )
ampembeng 15:6f2798e45099 69 {
ampembeng 15:6f2798e45099 70 DEBUG("...mbedtls_net_recv_timeout len: %d, timeout: %d", len, timeout);
ampembeng 15:6f2798e45099 71 return (int)_tcpsocket->receive((char*)buf, len);
ampembeng 15:6f2798e45099 72 }
ampembeng 15:6f2798e45099 73
ampembeng 15:6f2798e45099 74 int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len )
ampembeng 15:6f2798e45099 75 {
ampembeng 15:6f2798e45099 76 DEBUG("...mbedtls_net_send");
ampembeng 15:6f2798e45099 77 return _tcpsocket->send((char*)buf, len);
ampembeng 15:6f2798e45099 78 }
ampembeng 15:6f2798e45099 79
ampembeng 15:6f2798e45099 80 int mbedtls_net_set_block( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 81 {
ampembeng 15:6f2798e45099 82 _tcpsocket->set_blocking (false,1500);
ampembeng 15:6f2798e45099 83 return 0;
ampembeng 15:6f2798e45099 84 }
ampembeng 15:6f2798e45099 85
ampembeng 15:6f2798e45099 86 void mbedtls_net_free( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 87 {
ampembeng 15:6f2798e45099 88 DEBUG("...TODO: mbedtls_net_free");
ampembeng 15:6f2798e45099 89 return;
ampembeng 15:6f2798e45099 90 }
ampembeng 15:6f2798e45099 91
ampembeng 15:6f2798e45099 92
ampembeng 15:6f2798e45099 93 //=====================================================================================================================
ampembeng 15:6f2798e45099 94 //
ampembeng 15:6f2798e45099 95 // Uses FRDM-K64F wired ethernet
ampembeng 15:6f2798e45099 96 //
ampembeng 15:6f2798e45099 97 //=====================================================================================================================
ampembeng 15:6f2798e45099 98 #else
ampembeng 15:6f2798e45099 99 // Network Socket
ampembeng 15:6f2798e45099 100 TCPSocket* _tcpsocket;
ampembeng 15:6f2798e45099 101
ampembeng 15:6f2798e45099 102 int net_modem_boot()
ampembeng 15:6f2798e45099 103 {
ampembeng 15:6f2798e45099 104 // Do nothing
ampembeng 15:6f2798e45099 105 }
ampembeng 15:6f2798e45099 106
ampembeng 15:6f2798e45099 107 void mbedtls_net_init( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 108 {
ampembeng 15:6f2798e45099 109 DEBUG("...mbedtls_net_init()");
ampembeng 15:6f2798e45099 110 EthernetInterface eth_iface;
ampembeng 15:6f2798e45099 111
ampembeng 15:6f2798e45099 112 eth_iface.connect();
ampembeng 15:6f2798e45099 113 INFO("...Using FRDM-K64F Ethernet LWIP");
ampembeng 15:6f2798e45099 114 const char *ip_addr = eth_iface.get_ip_address();
ampembeng 15:6f2798e45099 115 if (ip_addr) {
ampembeng 15:6f2798e45099 116 INFO("...Client IP Address is %s", ip_addr);
ampembeng 15:6f2798e45099 117 } else {
ampembeng 15:6f2798e45099 118 INFO("...No Client IP Address");
ampembeng 15:6f2798e45099 119 }
ampembeng 15:6f2798e45099 120 _tcpsocket = new TCPSocket(&eth_iface);
ampembeng 15:6f2798e45099 121
ampembeng 15:6f2798e45099 122 //ctx->fd = -1;
ampembeng 15:6f2798e45099 123 return;
ampembeng 15:6f2798e45099 124 }
ampembeng 15:6f2798e45099 125
ampembeng 15:6f2798e45099 126 int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto )
ampembeng 15:6f2798e45099 127 {
ampembeng 15:6f2798e45099 128 DEBUG("...mbedtls_net_connect");
ampembeng 15:6f2798e45099 129 int ret;
ampembeng 15:6f2798e45099 130 uint16_t _port = AWS_IOT_MQTT_PORT; // TODO
ampembeng 15:6f2798e45099 131
ampembeng 15:6f2798e45099 132 INFO("...Connecting with %s", host);
ampembeng 15:6f2798e45099 133 ret = _tcpsocket->connect(host, _port);
ampembeng 15:6f2798e45099 134 _tcpsocket->bind(host, _port);
ampembeng 15:6f2798e45099 135 if (ret != NSAPI_ERROR_OK) {
ampembeng 15:6f2798e45099 136 ERROR("Failed to connect");
ampembeng 15:6f2798e45099 137 return ret;
ampembeng 15:6f2798e45099 138 }
ampembeng 15:6f2798e45099 139
ampembeng 15:6f2798e45099 140 INFO("...Connected to Amazon!");
ampembeng 15:6f2798e45099 141 return ret;
ampembeng 15:6f2798e45099 142 }
ampembeng 15:6f2798e45099 143
ampembeng 15:6f2798e45099 144 int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, uint32_t timeout )
ampembeng 15:6f2798e45099 145 {
ampembeng 15:6f2798e45099 146 DEBUG("...mbedtls_net_recv_timeout len: %d, timeout: %d", len, timeout);
ampembeng 15:6f2798e45099 147
ampembeng 15:6f2798e45099 148 int recv = -1;
ampembeng 15:6f2798e45099 149 //TCPSocket *socket = static_cast<TCPSocket *>(ctx);
ampembeng 15:6f2798e45099 150 //socket->set_blocking(false);
ampembeng 15:6f2798e45099 151 //recv = socket->recv(buf, len);
ampembeng 15:6f2798e45099 152 //_tcpsocket->set_blocking(true);
ampembeng 15:6f2798e45099 153 _tcpsocket->set_timeout(timeout);
ampembeng 15:6f2798e45099 154 recv = _tcpsocket->recv(buf, len);
ampembeng 15:6f2798e45099 155
ampembeng 15:6f2798e45099 156 if(NSAPI_ERROR_WOULD_BLOCK == recv ||
ampembeng 15:6f2798e45099 157 recv == 0){
ampembeng 15:6f2798e45099 158 DEBUG("...NSAPI_ERROR_WOULD_BLOCK");
ampembeng 15:6f2798e45099 159 return 0;
ampembeng 15:6f2798e45099 160 }else if(recv < 0){
ampembeng 15:6f2798e45099 161 ERROR("...RECV FAIL");
ampembeng 15:6f2798e45099 162 return -1;
ampembeng 15:6f2798e45099 163 }else{
ampembeng 15:6f2798e45099 164 DEBUG("...RECV OK: %d, %d", len, recv);
ampembeng 15:6f2798e45099 165 return recv;
ampembeng 15:6f2798e45099 166 }
ampembeng 15:6f2798e45099 167 }
ampembeng 15:6f2798e45099 168
ampembeng 15:6f2798e45099 169 int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len )
ampembeng 15:6f2798e45099 170 {
ampembeng 15:6f2798e45099 171 DEBUG("...mbedtls_net_send");
ampembeng 15:6f2798e45099 172
ampembeng 15:6f2798e45099 173 int size = -1;
ampembeng 15:6f2798e45099 174 //TCPSocket *socket = static_cast<TCPSocket *>(ctx);
ampembeng 15:6f2798e45099 175 //size = socket->send(buf, len);
ampembeng 15:6f2798e45099 176 size = _tcpsocket->send(buf, len);
ampembeng 15:6f2798e45099 177
ampembeng 15:6f2798e45099 178 if(NSAPI_ERROR_WOULD_BLOCK == size){
ampembeng 15:6f2798e45099 179 DEBUG("...SEND OK, len = %d", len);
ampembeng 15:6f2798e45099 180 return len;
ampembeng 15:6f2798e45099 181 }else if(size < 0){
ampembeng 15:6f2798e45099 182 ERROR("...SEND FAIL");
ampembeng 15:6f2798e45099 183 return -1;
ampembeng 15:6f2798e45099 184 }else{
ampembeng 15:6f2798e45099 185 DEBUG("...SEND OK, size = %d", size);
ampembeng 15:6f2798e45099 186 return size;
ampembeng 15:6f2798e45099 187 }
ampembeng 15:6f2798e45099 188 }
ampembeng 15:6f2798e45099 189
ampembeng 15:6f2798e45099 190 int mbedtls_net_set_block( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 191 {
ampembeng 15:6f2798e45099 192 _tcpsocket->set_blocking(false);
ampembeng 15:6f2798e45099 193 return 0;
ampembeng 15:6f2798e45099 194 }
ampembeng 15:6f2798e45099 195
ampembeng 15:6f2798e45099 196 void mbedtls_net_free( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 197 {
ampembeng 15:6f2798e45099 198 DEBUG("...TODO: mbedtls_net_free");
ampembeng 15:6f2798e45099 199 return;
ampembeng 15:6f2798e45099 200 }
ampembeng 15:6f2798e45099 201 #endif