V.06 11/3

Dependencies:   FT6206 SDFileSystem SPI_TFT_ILI9341 TFT_fonts

Fork of ATT_AWS_IoT_demo by attiot

Committer:
jilee
Date:
Fri Nov 03 20:28:02 2017 +0000
Revision:
29:f71a0be59b99
Parent:
28:54d9a550adf1
v.06 11/03/2016

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
jilee 29:f71a0be59b99 30 WNCInterface eth_iface;
jilee 29:f71a0be59b99 31
ampembeng 15:6f2798e45099 32 int net_modem_boot()
ampembeng 15:6f2798e45099 33 {
ampembeng 15:6f2798e45099 34 INFO("Booting WNC modem...");
ampembeng 15:6f2798e45099 35 int rc = -1;
ampembeng 23:b9ff83dc965f 36 string str;
jilee 29:f71a0be59b99 37 //WNCInterface eth_iface;
ampembeng 15:6f2798e45099 38
ampembeng 16:02008a2a2569 39 INFO("...Using Avnet Shield and AT&T wireless LTE");
jilee 29:f71a0be59b99 40 rc = eth_iface.init(NULL, &pc);
jilee 29:f71a0be59b99 41 if( !rc )
jilee 29:f71a0be59b99 42 {
jilee 29:f71a0be59b99 43 ERROR("DHCP failed.");
jilee 29:f71a0be59b99 44 return 1;
jilee 29:f71a0be59b99 45 }
ampembeng 15:6f2798e45099 46 INFO("WNC Module %s initialized (%02X).", rc?"IS":"IS NOT", rc);
jilee 28:54d9a550adf1 47
jilee 29:f71a0be59b99 48
jilee 29:f71a0be59b99 49 rc = eth_iface.connect();
jilee 29:f71a0be59b99 50 if(rc !=0 )
jilee 29:f71a0be59b99 51 {
jilee 29:f71a0be59b99 52 ERROR("Connection failed.");
jilee 29:f71a0be59b99 53 return 1;
jilee 29:f71a0be59b99 54 }
jilee 29:f71a0be59b99 55
ampembeng 15:6f2798e45099 56 INFO("...IP Address: %s ", eth_iface.getIPAddress());
ampembeng 23:b9ff83dc965f 57
jilee 29:f71a0be59b99 58
ampembeng 23:b9ff83dc965f 59 // Get SIM card number (ICCID)
ampembeng 23:b9ff83dc965f 60 eth_iface.getICCID(&str);
ampembeng 23:b9ff83dc965f 61 strcpy(iccidName, str.c_str());
ampembeng 23:b9ff83dc965f 62 INFO("...ICCID: %s", iccidName);
jilee 28:54d9a550adf1 63
jilee 28:54d9a550adf1 64 //get object
jilee 28:54d9a550adf1 65 //INFO("Reading Certificate");
jilee 28:54d9a550adf1 66 //eth_iface.getObject();
jilee 28:54d9a550adf1 67
jilee 29:f71a0be59b99 68 return 0;
jilee 29:f71a0be59b99 69 }
jilee 29:f71a0be59b99 70
jilee 29:f71a0be59b99 71 int GetSignalStrength(int16_t *dbm)
jilee 29:f71a0be59b99 72 {
jilee 29:f71a0be59b99 73 INFO("Reading Signal Strength...");
jilee 29:f71a0be59b99 74 int16_t rc = 0;
jilee 29:f71a0be59b99 75 string str;
jilee 29:f71a0be59b99 76
jilee 29:f71a0be59b99 77 rc = eth_iface.getSignalStrength();
jilee 29:f71a0be59b99 78 if(rc ==99 )
jilee 29:f71a0be59b99 79 {
jilee 29:f71a0be59b99 80 ERROR("Get Signal Strength Failed.");
jilee 29:f71a0be59b99 81 return 1;
jilee 29:f71a0be59b99 82 }
jilee 29:f71a0be59b99 83
jilee 29:f71a0be59b99 84 INFO("...Singal Strength: %d", rc);
jilee 29:f71a0be59b99 85
jilee 29:f71a0be59b99 86 *dbm = rc;
jilee 29:f71a0be59b99 87
jilee 29:f71a0be59b99 88 return 0;
ampembeng 15:6f2798e45099 89 }
ampembeng 15:6f2798e45099 90
jilee 29:f71a0be59b99 91 int GetUpdateStatus(unsigned char *cStatus)
jilee 29:f71a0be59b99 92 {
jilee 29:f71a0be59b99 93 INFO("Reading Update Status...");
jilee 29:f71a0be59b99 94 bool rc = 0;
jilee 29:f71a0be59b99 95 string str;
jilee 29:f71a0be59b99 96
jilee 29:f71a0be59b99 97 rc = eth_iface.getUpdateStatus(cStatus);
jilee 29:f71a0be59b99 98 if(rc == false)
jilee 29:f71a0be59b99 99 {
jilee 29:f71a0be59b99 100 ERROR("Get Update Status Failed.");
jilee 29:f71a0be59b99 101 return 1;
jilee 29:f71a0be59b99 102 }
jilee 29:f71a0be59b99 103
jilee 29:f71a0be59b99 104 INFO("...Update Status: %02X", *cStatus);
jilee 29:f71a0be59b99 105
jilee 29:f71a0be59b99 106 return 0;
jilee 29:f71a0be59b99 107 }
jilee 29:f71a0be59b99 108
jilee 29:f71a0be59b99 109 int GetAllObjects()
jilee 29:f71a0be59b99 110 {
jilee 29:f71a0be59b99 111 INFO("Reading All Objects...");
jilee 29:f71a0be59b99 112 int16_t rc = 0;
jilee 29:f71a0be59b99 113 string str;
jilee 29:f71a0be59b99 114
jilee 29:f71a0be59b99 115 rc = eth_iface.getAllObjects();
jilee 29:f71a0be59b99 116 if(rc == 0 )
jilee 29:f71a0be59b99 117 {
jilee 29:f71a0be59b99 118 ERROR("Read All Objects Failed.");
jilee 29:f71a0be59b99 119 return 1;
jilee 29:f71a0be59b99 120 }
jilee 29:f71a0be59b99 121
jilee 29:f71a0be59b99 122
jilee 29:f71a0be59b99 123 return 0;
jilee 29:f71a0be59b99 124 }
jilee 29:f71a0be59b99 125
jilee 29:f71a0be59b99 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
ampembeng 15:6f2798e45099 131 _tcpsocket = new WNCTCPSocketConnection;
ampembeng 15:6f2798e45099 132
ampembeng 15:6f2798e45099 133 return;
ampembeng 15:6f2798e45099 134 }
ampembeng 15:6f2798e45099 135
ampembeng 15:6f2798e45099 136 int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto )
ampembeng 15:6f2798e45099 137 {
ampembeng 15:6f2798e45099 138 DEBUG("...mbedtls_net_connect");
ampembeng 15:6f2798e45099 139 int ret = -1;
ampembeng 15:6f2798e45099 140
ampembeng 15:6f2798e45099 141 /* Connect to the server */
ampembeng 15:6f2798e45099 142 INFO("Connecting with %s\r\n", host);
ampembeng 18:6370da1de572 143 ret = _tcpsocket->connect(host, atoi(port));
ampembeng 15:6f2798e45099 144
ampembeng 15:6f2798e45099 145 return ret;
ampembeng 15:6f2798e45099 146 }
ampembeng 15:6f2798e45099 147
ampembeng 15:6f2798e45099 148 int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, uint32_t timeout )
ampembeng 15:6f2798e45099 149 {
ampembeng 15:6f2798e45099 150 DEBUG("...mbedtls_net_recv_timeout len: %d, timeout: %d", len, timeout);
ampembeng 15:6f2798e45099 151 return (int)_tcpsocket->receive((char*)buf, len);
ampembeng 15:6f2798e45099 152 }
ampembeng 15:6f2798e45099 153
ampembeng 15:6f2798e45099 154 int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len )
ampembeng 15:6f2798e45099 155 {
ampembeng 15:6f2798e45099 156 DEBUG("...mbedtls_net_send");
ampembeng 15:6f2798e45099 157 return _tcpsocket->send((char*)buf, len);
ampembeng 15:6f2798e45099 158 }
ampembeng 15:6f2798e45099 159
ampembeng 15:6f2798e45099 160 int mbedtls_net_set_block( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 161 {
ampembeng 16:02008a2a2569 162 DEBUG("...mbedtls_net_set_block");
ampembeng 15:6f2798e45099 163 _tcpsocket->set_blocking (false,1500);
ampembeng 15:6f2798e45099 164 return 0;
ampembeng 15:6f2798e45099 165 }
ampembeng 15:6f2798e45099 166
ampembeng 15:6f2798e45099 167 void mbedtls_net_free( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 168 {
ampembeng 16:02008a2a2569 169 DEBUG("...mbedtls_net_free");
ampembeng 15:6f2798e45099 170 return;
ampembeng 15:6f2798e45099 171 }
ampembeng 16:02008a2a2569 172 #endif
ampembeng 15:6f2798e45099 173
ampembeng 15:6f2798e45099 174 //=====================================================================================================================
ampembeng 15:6f2798e45099 175 //
ampembeng 15:6f2798e45099 176 // Uses FRDM-K64F wired ethernet
ampembeng 15:6f2798e45099 177 //
ampembeng 15:6f2798e45099 178 //=====================================================================================================================
ampembeng 16:02008a2a2569 179 #ifdef USING_FRDM_K64F_LWIP
ampembeng 15:6f2798e45099 180 // Network Socket
ampembeng 15:6f2798e45099 181 TCPSocket* _tcpsocket;
ampembeng 15:6f2798e45099 182
ampembeng 15:6f2798e45099 183 int net_modem_boot()
ampembeng 15:6f2798e45099 184 {
ampembeng 23:b9ff83dc965f 185 // Do nothing
ampembeng 23:b9ff83dc965f 186 return 0;
ampembeng 15:6f2798e45099 187 }
ampembeng 15:6f2798e45099 188
ampembeng 15:6f2798e45099 189 void mbedtls_net_init( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 190 {
ampembeng 15:6f2798e45099 191 DEBUG("...mbedtls_net_init()");
ampembeng 15:6f2798e45099 192 EthernetInterface eth_iface;
ampembeng 15:6f2798e45099 193
ampembeng 15:6f2798e45099 194 eth_iface.connect();
ampembeng 15:6f2798e45099 195 INFO("...Using FRDM-K64F Ethernet LWIP");
ampembeng 15:6f2798e45099 196 const char *ip_addr = eth_iface.get_ip_address();
ampembeng 15:6f2798e45099 197 if (ip_addr) {
ampembeng 15:6f2798e45099 198 INFO("...Client IP Address is %s", ip_addr);
ampembeng 15:6f2798e45099 199 } else {
ampembeng 15:6f2798e45099 200 INFO("...No Client IP Address");
ampembeng 15:6f2798e45099 201 }
ampembeng 15:6f2798e45099 202 _tcpsocket = new TCPSocket(&eth_iface);
ampembeng 15:6f2798e45099 203
ampembeng 15:6f2798e45099 204 return;
ampembeng 15:6f2798e45099 205 }
ampembeng 15:6f2798e45099 206
ampembeng 15:6f2798e45099 207 int mbedtls_net_connect( mbedtls_net_context *ctx, const char *host, const char *port, int proto )
ampembeng 15:6f2798e45099 208 {
ampembeng 15:6f2798e45099 209 DEBUG("...mbedtls_net_connect");
ampembeng 15:6f2798e45099 210 int ret;
ampembeng 15:6f2798e45099 211
ampembeng 15:6f2798e45099 212 INFO("...Connecting with %s", host);
ampembeng 18:6370da1de572 213 ret = _tcpsocket->connect(host, atoi(port));
ampembeng 15:6f2798e45099 214 if (ret != NSAPI_ERROR_OK) {
ampembeng 15:6f2798e45099 215 ERROR("Failed to connect");
ampembeng 15:6f2798e45099 216 return ret;
ampembeng 15:6f2798e45099 217 }
ampembeng 15:6f2798e45099 218
ampembeng 15:6f2798e45099 219 INFO("...Connected to Amazon!");
ampembeng 15:6f2798e45099 220 return ret;
ampembeng 15:6f2798e45099 221 }
ampembeng 15:6f2798e45099 222
ampembeng 15:6f2798e45099 223 int mbedtls_net_recv_timeout( void *ctx, unsigned char *buf, size_t len, uint32_t timeout )
ampembeng 15:6f2798e45099 224 {
ampembeng 15:6f2798e45099 225 DEBUG("...mbedtls_net_recv_timeout len: %d, timeout: %d", len, timeout);
ampembeng 16:02008a2a2569 226 int recv = -1;
ampembeng 15:6f2798e45099 227
ampembeng 15:6f2798e45099 228 _tcpsocket->set_timeout(timeout);
ampembeng 15:6f2798e45099 229 recv = _tcpsocket->recv(buf, len);
ampembeng 15:6f2798e45099 230
ampembeng 15:6f2798e45099 231 if(NSAPI_ERROR_WOULD_BLOCK == recv ||
ampembeng 15:6f2798e45099 232 recv == 0){
ampembeng 15:6f2798e45099 233 DEBUG("...NSAPI_ERROR_WOULD_BLOCK");
ampembeng 15:6f2798e45099 234 return 0;
ampembeng 15:6f2798e45099 235 }else if(recv < 0){
ampembeng 15:6f2798e45099 236 ERROR("...RECV FAIL");
ampembeng 15:6f2798e45099 237 return -1;
ampembeng 15:6f2798e45099 238 }else{
ampembeng 15:6f2798e45099 239 DEBUG("...RECV OK: %d, %d", len, recv);
ampembeng 15:6f2798e45099 240 return recv;
ampembeng 15:6f2798e45099 241 }
ampembeng 15:6f2798e45099 242 }
ampembeng 15:6f2798e45099 243
ampembeng 15:6f2798e45099 244 int mbedtls_net_send( void *ctx, const unsigned char *buf, size_t len )
ampembeng 15:6f2798e45099 245 {
ampembeng 16:02008a2a2569 246 DEBUG("...mbedtls_net_send");
ampembeng 15:6f2798e45099 247 int size = -1;
ampembeng 16:02008a2a2569 248
ampembeng 15:6f2798e45099 249 size = _tcpsocket->send(buf, len);
ampembeng 15:6f2798e45099 250
ampembeng 15:6f2798e45099 251 if(NSAPI_ERROR_WOULD_BLOCK == size){
ampembeng 15:6f2798e45099 252 DEBUG("...SEND OK, len = %d", len);
ampembeng 15:6f2798e45099 253 return len;
ampembeng 15:6f2798e45099 254 }else if(size < 0){
ampembeng 15:6f2798e45099 255 ERROR("...SEND FAIL");
ampembeng 15:6f2798e45099 256 return -1;
ampembeng 15:6f2798e45099 257 }else{
ampembeng 15:6f2798e45099 258 DEBUG("...SEND OK, size = %d", size);
ampembeng 15:6f2798e45099 259 return size;
ampembeng 15:6f2798e45099 260 }
ampembeng 15:6f2798e45099 261 }
ampembeng 15:6f2798e45099 262
ampembeng 15:6f2798e45099 263 int mbedtls_net_set_block( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 264 {
ampembeng 16:02008a2a2569 265 DEBUG("...mbedtls_net_set_block");
ampembeng 15:6f2798e45099 266 _tcpsocket->set_blocking(false);
ampembeng 15:6f2798e45099 267 return 0;
ampembeng 15:6f2798e45099 268 }
ampembeng 15:6f2798e45099 269
ampembeng 15:6f2798e45099 270 void mbedtls_net_free( mbedtls_net_context *ctx )
ampembeng 15:6f2798e45099 271 {
ampembeng 16:02008a2a2569 272 DEBUG("...mbedtls_net_free");
ampembeng 15:6f2798e45099 273 return;
ampembeng 15:6f2798e45099 274 }
ampembeng 15:6f2798e45099 275 #endif