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 15 18:05:09 2016 +0000
Revision:
23:b9ff83dc965f
Parent:
18:6370da1de572
Child:
28:54d9a550adf1
Added an alternate demo that publishes JSON data to a topic instead of using the device shadow.  The topic (rule) is intended to be used along with DynamoDB and S3 (a static website).

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