V.06 11/3

Dependencies:   FT6206 SDFileSystem SPI_TFT_ILI9341 TFT_fonts

Fork of ATT_AWS_IoT_demo by attiot

Committer:
jilee
Date:
Mon Oct 09 21:13:49 2017 +0000
Revision:
28:54d9a550adf1
Parent:
23:b9ff83dc965f
Child:
29:f71a0be59b99
V.01

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