V.06 11/3

Dependencies:   FT6206 SDFileSystem SPI_TFT_ILI9341 TFT_fonts

Fork of ATT_AWS_IoT_demo by attiot

Committer:
ampembeng
Date:
Tue Dec 06 22:31:15 2016 +0000
Revision:
18:6370da1de572
Parent:
16:02008a2a2569
Child:
23:b9ff83dc965f
Added code to support SD card access.  The key/cert and MQTT information required for the demo can now be pulled from the SD card file system.

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