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:
Sun Jun 15 17:39:07 2014 +0000
Revision:
12:160f28111a34
Parent:
11:9daf07113ef6
Child:
13:92847e20c246
Configure out the altimeter, seems to fail only when all resources are created; suggests out of memory

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