V.06 11/3

Dependencies:   FT6206 SDFileSystem SPI_TFT_ILI9341 TFT_fonts

Fork of ATT_AWS_IoT_demo by attiot

Committer:
ampembeng
Date:
Fri Dec 02 22:39:56 2016 +0000
Revision:
16:02008a2a2569
Parent:
15:6f2798e45099
Child:
18:6370da1de572
Cleaned up some project TODOs added a quick start guide to the README.md that's in the root folder.

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 16:02008a2a2569 34 INFO("...Using Avnet Shield and AT&T wireless LTE");
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 16:02008a2a2569 63 ret = _tcpsocket->connect(host, AWS_IOT_MQTT_PORT);
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 16:02008a2a2569 82 DEBUG("...mbedtls_net_set_block");
ampembeng 15:6f2798e45099 83 _tcpsocket->set_blocking (false,1500);
ampembeng 15:6f2798e45099 84 return 0;
ampembeng 15:6f2798e45099 85 }
ampembeng 15:6f2798e45099 86
ampembeng 15:6f2798e45099 87 void mbedtls_net_free( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 88 {
ampembeng 16:02008a2a2569 89 DEBUG("...mbedtls_net_free");
ampembeng 15:6f2798e45099 90 return;
ampembeng 15:6f2798e45099 91 }
ampembeng 16:02008a2a2569 92 #endif
ampembeng 15:6f2798e45099 93
ampembeng 15:6f2798e45099 94 //=====================================================================================================================
ampembeng 15:6f2798e45099 95 //
ampembeng 15:6f2798e45099 96 // Uses FRDM-K64F wired ethernet
ampembeng 15:6f2798e45099 97 //
ampembeng 15:6f2798e45099 98 //=====================================================================================================================
ampembeng 16:02008a2a2569 99 #ifdef USING_FRDM_K64F_LWIP
ampembeng 15:6f2798e45099 100 // Network Socket
ampembeng 15:6f2798e45099 101 TCPSocket* _tcpsocket;
ampembeng 15:6f2798e45099 102
ampembeng 15:6f2798e45099 103 int net_modem_boot()
ampembeng 15:6f2798e45099 104 {
ampembeng 15:6f2798e45099 105 // Do nothing
ampembeng 15:6f2798e45099 106 }
ampembeng 15:6f2798e45099 107
ampembeng 15:6f2798e45099 108 void mbedtls_net_init( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 109 {
ampembeng 15:6f2798e45099 110 DEBUG("...mbedtls_net_init()");
ampembeng 15:6f2798e45099 111 EthernetInterface eth_iface;
ampembeng 15:6f2798e45099 112
ampembeng 15:6f2798e45099 113 eth_iface.connect();
ampembeng 15:6f2798e45099 114 INFO("...Using FRDM-K64F Ethernet LWIP");
ampembeng 15:6f2798e45099 115 const char *ip_addr = eth_iface.get_ip_address();
ampembeng 15:6f2798e45099 116 if (ip_addr) {
ampembeng 15:6f2798e45099 117 INFO("...Client IP Address is %s", ip_addr);
ampembeng 15:6f2798e45099 118 } else {
ampembeng 15:6f2798e45099 119 INFO("...No Client IP Address");
ampembeng 15:6f2798e45099 120 }
ampembeng 15:6f2798e45099 121 _tcpsocket = new TCPSocket(&eth_iface);
ampembeng 15:6f2798e45099 122
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
ampembeng 15:6f2798e45099 131 INFO("...Connecting with %s", host);
ampembeng 16:02008a2a2569 132 ret = _tcpsocket->connect(host, AWS_IOT_MQTT_PORT);
ampembeng 16:02008a2a2569 133 _tcpsocket->bind(host, AWS_IOT_MQTT_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