Demo starter application to connect WiGo to NSP and expose on-board sensors

Dependencies:   NVIC_set_all_priorities cc3000_hostdriver_mbedsocket mbed nsdl_lib TEMT6200 TSI Wi-Go_eCompass_Lib_V3 WiGo_BattCharger

This is the mbed project for the IoT World Hackathon event, June 17th and 18th in Palo Also.

The setup instructions for participants are at the Setup page of this wiki:

http://mbed.org/teams/MBED_DEMOS/code/IoT_World_Hackathon_WiGo_NSP_Demo/wiki/Setup-Guide-for-the-IoT-World-Hackathon

Committer:
michaeljkoster
Date:
Wed Jul 09 04:35:49 2014 +0000
Revision:
18:11b9d98ecae2
Parent:
17:b4cdafc4241d
Checkpoint

Who changed what in which revision?

UserRevisionLine numberNew contents of line
michaeljkoster 0:07581223f90c 1 #include "mbed.h"
michaeljkoster 0:07581223f90c 2 #include "cc3000.h"
michaeljkoster 0:07581223f90c 3 #include "nsdl_support.h"
michaeljkoster 0:07581223f90c 4 #include "dbg.h"
michaeljkoster 0:07581223f90c 5 #include "UDPSocket.h"
michaeljkoster 0:07581223f90c 6 #include "Endpoint.h"
michaeljkoster 4:727f1aeb717a 7 #include "battery.h"
michaeljkoster 5:bacf25e9419b 8 #include "light.h"
michaeljkoster 5:bacf25e9419b 9 #include "temperature.h"
michaeljkoster 5:bacf25e9419b 10 #include "altitude.h"
michaeljkoster 6:b542b2a759e8 11 #include "slider.h"
michaeljkoster 9:6501da9e384e 12 #include "accelerometer.h"
michaeljkoster 10:948f99b285c4 13 #include "magnetometer.h"
michaeljkoster 11:9daf07113ef6 14 #include "rgbled.h"
michaeljkoster 0:07581223f90c 15
michaeljkoster 0:07581223f90c 16 extern Serial pc;
michaeljkoster 0:07581223f90c 17
michaeljkoster 0:07581223f90c 18 // ****************************************************************************
michaeljkoster 0:07581223f90c 19 // Configuration section
michaeljkoster 0:07581223f90c 20
michaeljkoster 0:07581223f90c 21 // default timeout values for DHCP, ARP, keepalive, disable socket timeout
michaeljkoster 0:07581223f90c 22 uint32_t dhcp = 14400;
michaeljkoster 0:07581223f90c 23 uint32_t arp = 3600;
michaeljkoster 0:07581223f90c 24 uint32_t keep_alive = 10;
michaeljkoster 0:07581223f90c 25 uint32_t inactivity = 0;
michaeljkoster 0:07581223f90c 26 int32_t to_rtn;
michaeljkoster 0:07581223f90c 27
michaeljkoster 0:07581223f90c 28 // NSP configuration
michaeljkoster 0:07581223f90c 29 /* Change this IP address to that of your NanoService Platform installation */
michaeljkoster 14:4775c2432e90 30 static const char* NSP_ADDRESS = "192.168.1.220"; /* Arndale board running NSP on local network for Hackathon */
michaeljkoster 18:11b9d98ecae2 31 //static const char* NSP_ADDRESS = "198.41.30.241"; /* Eclipse LWM2M sandbox */
michaeljkoster 14:4775c2432e90 32 //static const char* NSP_ADDRESS = "217.140.101.20"; /* public mbed demo server */
michaeljkoster 0:07581223f90c 33 static const int NSP_PORT = 5683;
michaeljkoster 18:11b9d98ecae2 34 //static const int NSP_PORT = 5684; /* lwm2m sandbox port */
michaeljkoster 2:4a6a726423bb 35 char endpoint_name[24] = "mbed-";
michaeljkoster 18:11b9d98ecae2 36 //char endpoint_name[24] = "urn:mac:";
michaeljkoster 0:07581223f90c 37 uint8_t ep_type[] = {"mbed_device"};
michaeljkoster 0:07581223f90c 38 uint8_t lifetime_ptr[] = {"120000"}; //30+ hours
michaeljkoster 0:07581223f90c 39
michaeljkoster 2:4a6a726423bb 40 uint8_t myMAC[8];
michaeljkoster 5:bacf25e9419b 41 char MAC[20];
michaeljkoster 2:4a6a726423bb 42
michaeljkoster 0:07581223f90c 43 // ****************************************************************************
michaeljkoster 0:07581223f90c 44 // Ethernet initialization
michaeljkoster 0:07581223f90c 45
michaeljkoster 0:07581223f90c 46 // EthernetInterface eth;
michaeljkoster 0:07581223f90c 47 extern cc3000 wifi;
michaeljkoster 0:07581223f90c 48
michaeljkoster 0:07581223f90c 49 static void ethernet_init()
michaeljkoster 0:07581223f90c 50 {
michaeljkoster 0:07581223f90c 51
michaeljkoster 0:07581223f90c 52 // set timeout values to disable socket timeout
michaeljkoster 0:07581223f90c 53 to_rtn = wifi._netapp.timeout_values(&dhcp, &arp, &keep_alive, &inactivity);
michaeljkoster 0:07581223f90c 54 pc.printf("timeout set: %d\r\n", to_rtn);
michaeljkoster 0:07581223f90c 55
michaeljkoster 3:4cfa5d26f35e 56 // make a unique name from the MAC address
michaeljkoster 2:4a6a726423bb 57 wifi.get_mac_address(myMAC);
michaeljkoster 2:4a6a726423bb 58 printf("MAC address %02x:%02x:%02x:%02x:%02x:%02x \r\n", myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]);
michaeljkoster 5:bacf25e9419b 59 sprintf(MAC, "%02X%02X%02X%02X%02X%02X", myMAC[0], myMAC[1], myMAC[2], myMAC[3], myMAC[4], myMAC[5]);
michaeljkoster 5:bacf25e9419b 60 pc.printf("MAC: %s", MAC);
michaeljkoster 1:8f4625466fbd 61
michaeljkoster 1:8f4625466fbd 62 // mbed_uid[32] = '\0';
michaeljkoster 5:bacf25e9419b 63 // strncat(endpoint_name, mbed_uid + 27, 15 - len(endpoint_name));
michaeljkoster 5:bacf25e9419b 64 strncat(endpoint_name, MAC, 12);
michaeljkoster 1:8f4625466fbd 65 pc.printf("EP NAME: %s\r\n",endpoint_name);
michaeljkoster 0:07581223f90c 66
michaeljkoster 0:07581223f90c 67 NSDL_DEBUG("IP Address:%s ", wifi.getIPAddress());
michaeljkoster 0:07581223f90c 68 }
michaeljkoster 0:07581223f90c 69
michaeljkoster 0:07581223f90c 70 // ****************************************************************************
michaeljkoster 0:07581223f90c 71 // NSP initialization
michaeljkoster 0:07581223f90c 72
sam_grove 16:d6812604cf92 73 extern UDPSocket server;
sam_grove 16:d6812604cf92 74 extern Endpoint nsp;
michaeljkoster 0:07581223f90c 75
michaeljkoster 0:07581223f90c 76 static void nsp_init()
michaeljkoster 0:07581223f90c 77 {
michaeljkoster 0:07581223f90c 78 server.init();
michaeljkoster 0:07581223f90c 79 server.bind(NSP_PORT);
michaeljkoster 0:07581223f90c 80
michaeljkoster 0:07581223f90c 81 nsp.set_address(NSP_ADDRESS, NSP_PORT);
michaeljkoster 0:07581223f90c 82
michaeljkoster 0:07581223f90c 83 NSDL_DEBUG("name: %s", endpoint_name);
michaeljkoster 0:07581223f90c 84 NSDL_DEBUG("NSP=%s - port %d\n", NSP_ADDRESS, NSP_PORT);
michaeljkoster 0:07581223f90c 85 }
michaeljkoster 0:07581223f90c 86
michaeljkoster 0:07581223f90c 87 // ****************************************************************************
michaeljkoster 0:07581223f90c 88 // Resource creation
michaeljkoster 0:07581223f90c 89
michaeljkoster 0:07581223f90c 90 static int create_resources()
michaeljkoster 0:07581223f90c 91 {
michaeljkoster 0:07581223f90c 92 sn_nsdl_resource_info_s *resource_ptr = NULL;
michaeljkoster 0:07581223f90c 93 sn_nsdl_ep_parameters_s *endpoint_ptr = NULL;
michaeljkoster 0:07581223f90c 94
michaeljkoster 0:07581223f90c 95 NSDL_DEBUG("Creating resources");
michaeljkoster 0:07581223f90c 96
michaeljkoster 0:07581223f90c 97 /* Create resources */
michaeljkoster 0:07581223f90c 98 resource_ptr = (sn_nsdl_resource_info_s*)nsdl_alloc(sizeof(sn_nsdl_resource_info_s));
michaeljkoster 0:07581223f90c 99 if(!resource_ptr)
michaeljkoster 0:07581223f90c 100 return 0;
michaeljkoster 0:07581223f90c 101 memset(resource_ptr, 0, sizeof(sn_nsdl_resource_info_s));
michaeljkoster 0:07581223f90c 102
michaeljkoster 0:07581223f90c 103 resource_ptr->resource_parameters_ptr = (sn_nsdl_resource_parameters_s*)nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s));
michaeljkoster 0:07581223f90c 104 if(!resource_ptr->resource_parameters_ptr)
michaeljkoster 0:07581223f90c 105 {
michaeljkoster 0:07581223f90c 106 nsdl_free(resource_ptr);
michaeljkoster 0:07581223f90c 107 return 0;
michaeljkoster 0:07581223f90c 108 }
michaeljkoster 0:07581223f90c 109 memset(resource_ptr->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
michaeljkoster 0:07581223f90c 110
michaeljkoster 0:07581223f90c 111 // Static resources
michaeljkoster 2:4a6a726423bb 112 nsdl_create_static_resource(resource_ptr, sizeof("dev/mfg")-1, (uint8_t*) "dev/mfg", 0, 0, (uint8_t*) "AvnetFreescale", sizeof("AvnetFreescale")-1);
michaeljkoster 2:4a6a726423bb 113 nsdl_create_static_resource(resource_ptr, sizeof("dev/mdl")-1, (uint8_t*) "dev/mdl", 0, 0, (uint8_t*) "WiGoSystem", sizeof("WiGiSystem")-1);
michaeljkoster 0:07581223f90c 114
michaeljkoster 0:07581223f90c 115 // Dynamic resources
michaeljkoster 5:bacf25e9419b 116 create_battery_resource(resource_ptr);
michaeljkoster 5:bacf25e9419b 117 create_light_resource(resource_ptr);
michaeljkoster 5:bacf25e9419b 118 create_temp_resource(resource_ptr);
sam_grove 16:d6812604cf92 119 create_alt_resource(resource_ptr);
michaeljkoster 6:b542b2a759e8 120 create_slider_resource(resource_ptr);
michaeljkoster 9:6501da9e384e 121 create_accel_resource(resource_ptr);
sam_grove 17:b4cdafc4241d 122 create_magnet_resource(resource_ptr);
michaeljkoster 11:9daf07113ef6 123 create_rgbled_resource(resource_ptr);
michaeljkoster 0:07581223f90c 124
michaeljkoster 0:07581223f90c 125 /* Register with NSP */
michaeljkoster 0:07581223f90c 126 endpoint_ptr = nsdl_init_register_endpoint(endpoint_ptr, (uint8_t*)endpoint_name, ep_type, lifetime_ptr);
michaeljkoster 0:07581223f90c 127 if(sn_nsdl_register_endpoint(endpoint_ptr) != 0)
michaeljkoster 0:07581223f90c 128 pc.printf("NSP registering failed\r\n");
michaeljkoster 0:07581223f90c 129 else
michaeljkoster 0:07581223f90c 130 pc.printf("NSP registering OK\r\n");
michaeljkoster 0:07581223f90c 131 nsdl_clean_register_endpoint(&endpoint_ptr);
michaeljkoster 0:07581223f90c 132
michaeljkoster 0:07581223f90c 133 nsdl_free(resource_ptr->resource_parameters_ptr);
michaeljkoster 0:07581223f90c 134 nsdl_free(resource_ptr);
michaeljkoster 0:07581223f90c 135 return 1;
michaeljkoster 0:07581223f90c 136 }
michaeljkoster 0:07581223f90c 137
michaeljkoster 0:07581223f90c 138 // ****************************************************************************
michaeljkoster 0:07581223f90c 139 // Program entry point
michaeljkoster 3:4cfa5d26f35e 140 // this modified to startup as an option in the Wi-Go demo
michaeljkoster 0:07581223f90c 141
michaeljkoster 0:07581223f90c 142 void nsdl_run()
michaeljkoster 0:07581223f90c 143 {
michaeljkoster 0:07581223f90c 144 // lcd.cls();
michaeljkoster 0:07581223f90c 145 // lcd.locate(0,0);
michaeljkoster 0:07581223f90c 146 // lcd.printf("mbed NanoService demo");
michaeljkoster 0:07581223f90c 147 NSDL_DEBUG("ARM mbed NanoService Demo on Wi-Go for IoT World Hackathon\n");
michaeljkoster 0:07581223f90c 148
michaeljkoster 0:07581223f90c 149 // Initialize Ethernet interface first
michaeljkoster 0:07581223f90c 150 ethernet_init();
michaeljkoster 0:07581223f90c 151
michaeljkoster 0:07581223f90c 152 // Initialize NSP node
michaeljkoster 0:07581223f90c 153 nsp_init();
michaeljkoster 0:07581223f90c 154
michaeljkoster 0:07581223f90c 155 // Initialize NSDL stack
michaeljkoster 0:07581223f90c 156 nsdl_init();
michaeljkoster 0:07581223f90c 157
michaeljkoster 0:07581223f90c 158 // Create NSDL resources
michaeljkoster 0:07581223f90c 159 create_resources();
michaeljkoster 0:07581223f90c 160
michaeljkoster 0:07581223f90c 161 // Run the NSDL event loop (never returns)
michaeljkoster 0:07581223f90c 162 nsdl_event_loop();
michaeljkoster 0:07581223f90c 163 }
michaeljkoster 0:07581223f90c 164