Demo for the problem with nsdl_lib and rtos on FRDM- K64F

Dependencies:   C12832_lcd WiflyInterface mbed-rtos mbed nsdl_lib

Committer:
lvwei1990
Date:
Fri Jan 16 06:37:29 2015 +0000
Revision:
0:e41e45a41f0f
Demo for the problem with nsdl_lib and rtos on FRDM- K64F

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lvwei1990 0:e41e45a41f0f 1 #include "mbed.h"
lvwei1990 0:e41e45a41f0f 2 #include "WiflyInterface.h"
lvwei1990 0:e41e45a41f0f 3 #include "C12832_lcd.h"
lvwei1990 0:e41e45a41f0f 4 #include "nsdl_support.h"
lvwei1990 0:e41e45a41f0f 5 #include "dbg.h"
lvwei1990 0:e41e45a41f0f 6 #include "rtos.h"
lvwei1990 0:e41e45a41f0f 7 // Include various resources
lvwei1990 0:e41e45a41f0f 8 //#include "temperature.h"
lvwei1990 0:e41e45a41f0f 9 #include "light.h"
lvwei1990 0:e41e45a41f0f 10 //#include "gps.h"
lvwei1990 0:e41e45a41f0f 11 //#include "relay.h"
lvwei1990 0:e41e45a41f0f 12
lvwei1990 0:e41e45a41f0f 13 static C12832_LCD lcd;
lvwei1990 0:e41e45a41f0f 14 Serial pc(USBTX, USBRX); // tx, rx
lvwei1990 0:e41e45a41f0f 15
lvwei1990 0:e41e45a41f0f 16 // ****************************************************************************
lvwei1990 0:e41e45a41f0f 17 // Configuration section
lvwei1990 0:e41e45a41f0f 18
lvwei1990 0:e41e45a41f0f 19 // WiFi configuration (edit this)
lvwei1990 0:e41e45a41f0f 20 #define WIFI_SSID "WIFITest"
lvwei1990 0:e41e45a41f0f 21 #define WIFI_SECURITY WPA // NONE, WEP_128 or WPA
lvwei1990 0:e41e45a41f0f 22 #define WIFI_PASSWORD "54510000"
lvwei1990 0:e41e45a41f0f 23
lvwei1990 0:e41e45a41f0f 24 /* Define this to enable DHCP, otherwise manual address configuration is used */
lvwei1990 0:e41e45a41f0f 25 #define DHCP
lvwei1990 0:e41e45a41f0f 26
lvwei1990 0:e41e45a41f0f 27 /* Manual IP configurations, if DHCP not defined */
lvwei1990 0:e41e45a41f0f 28 #define IP "10.45.0.206"
lvwei1990 0:e41e45a41f0f 29 #define MASK "255.255.255.0"
lvwei1990 0:e41e45a41f0f 30 #define GW "10.45.0.1"
lvwei1990 0:e41e45a41f0f 31
lvwei1990 0:e41e45a41f0f 32 // NSP configuration
lvwei1990 0:e41e45a41f0f 33 /* Change this IP address to that of your NanoService Platform installation */
lvwei1990 0:e41e45a41f0f 34 //static const char* NSP_ADDRESS = "208.111.39.209";
lvwei1990 0:e41e45a41f0f 35 static const char* NSP_ADDRESS = "23.97.178.38"; /* demo NSP, web interface at http://nanoservice-demo.mbed.org*/
lvwei1990 0:e41e45a41f0f 36 static const int NSP_PORT = 5683;
lvwei1990 0:e41e45a41f0f 37 char endpoint_name[32] = "mbed-";
lvwei1990 0:e41e45a41f0f 38 uint8_t ep_type[] = {"mbed_device"};
lvwei1990 0:e41e45a41f0f 39 uint8_t lifetime_ptr[] = {"1200"};
lvwei1990 0:e41e45a41f0f 40
lvwei1990 0:e41e45a41f0f 41 // ****************************************************************************
lvwei1990 0:e41e45a41f0f 42 // WiFi initialization
lvwei1990 0:e41e45a41f0f 43
lvwei1990 0:e41e45a41f0f 44 static WiflyInterface wifly(D1, D0, D3, D2, "WIFITest", "54510000", NONE);
lvwei1990 0:e41e45a41f0f 45
lvwei1990 0:e41e45a41f0f 46 static void wifi_init()
lvwei1990 0:e41e45a41f0f 47 {
lvwei1990 0:e41e45a41f0f 48 char mbed_uid[33]; // for creating unique name for the board
lvwei1990 0:e41e45a41f0f 49 char macbytes[6];
lvwei1990 0:e41e45a41f0f 50
lvwei1990 0:e41e45a41f0f 51 /* Initialize network */
lvwei1990 0:e41e45a41f0f 52 #ifdef DHCP
lvwei1990 0:e41e45a41f0f 53 NSDL_DEBUG("DHCP in use\r\n");
lvwei1990 0:e41e45a41f0f 54 wifly.init();
lvwei1990 0:e41e45a41f0f 55 #else
lvwei1990 0:e41e45a41f0f 56 wifly.init(IP, MASK, GW);
lvwei1990 0:e41e45a41f0f 57 #endif
lvwei1990 0:e41e45a41f0f 58 lcd.printf("wifly.init done\r\n");
lvwei1990 0:e41e45a41f0f 59
lvwei1990 0:e41e45a41f0f 60 if(wifly.connect() == 0)
lvwei1990 0:e41e45a41f0f 61 lcd.printf("Connect OK\n\r");
lvwei1990 0:e41e45a41f0f 62
lvwei1990 0:e41e45a41f0f 63 mbed_mac_address(macbytes);
lvwei1990 0:e41e45a41f0f 64 sprintf(mbed_uid,"%02x%02x%02x%02x%02x%02x", macbytes[0], macbytes[1], macbytes[2], macbytes[3], macbytes[4], macbytes[5]);
lvwei1990 0:e41e45a41f0f 65 strncat(endpoint_name, mbed_uid, 12);
lvwei1990 0:e41e45a41f0f 66
lvwei1990 0:e41e45a41f0f 67
lvwei1990 0:e41e45a41f0f 68 lcd.printf("IP Address:%s ", wifly.getIPAddress());
lvwei1990 0:e41e45a41f0f 69 lcd.cls();
lvwei1990 0:e41e45a41f0f 70 lcd.locate(0,0);
lvwei1990 0:e41e45a41f0f 71 }
lvwei1990 0:e41e45a41f0f 72
lvwei1990 0:e41e45a41f0f 73 // ****************************************************************************
lvwei1990 0:e41e45a41f0f 74 // NSP initialization
lvwei1990 0:e41e45a41f0f 75
lvwei1990 0:e41e45a41f0f 76 UDPSocket server;
lvwei1990 0:e41e45a41f0f 77 Endpoint nsp;
lvwei1990 0:e41e45a41f0f 78
lvwei1990 0:e41e45a41f0f 79 static void nsp_init()
lvwei1990 0:e41e45a41f0f 80 {
lvwei1990 0:e41e45a41f0f 81 server.init();
lvwei1990 0:e41e45a41f0f 82 server.bind(NSP_PORT);
lvwei1990 0:e41e45a41f0f 83
lvwei1990 0:e41e45a41f0f 84 nsp.set_address(NSP_ADDRESS, NSP_PORT);
lvwei1990 0:e41e45a41f0f 85
lvwei1990 0:e41e45a41f0f 86 NSDL_DEBUG("name: %s", endpoint_name);
lvwei1990 0:e41e45a41f0f 87 NSDL_DEBUG("NSP=%s - port %d\n", NSP_ADDRESS, NSP_PORT);
lvwei1990 0:e41e45a41f0f 88
lvwei1990 0:e41e45a41f0f 89 lcd.locate(0,22);
lvwei1990 0:e41e45a41f0f 90 lcd.printf("EP name:%s\n", endpoint_name);
lvwei1990 0:e41e45a41f0f 91 }
lvwei1990 0:e41e45a41f0f 92
lvwei1990 0:e41e45a41f0f 93 // ****************************************************************************
lvwei1990 0:e41e45a41f0f 94 // Resource creation
lvwei1990 0:e41e45a41f0f 95
lvwei1990 0:e41e45a41f0f 96 static int create_resources()
lvwei1990 0:e41e45a41f0f 97 {
lvwei1990 0:e41e45a41f0f 98 sn_nsdl_resource_info_s *resource_ptr = NULL;
lvwei1990 0:e41e45a41f0f 99 sn_nsdl_ep_parameters_s *endpoint_ptr = NULL;
lvwei1990 0:e41e45a41f0f 100
lvwei1990 0:e41e45a41f0f 101 NSDL_DEBUG("Creating resources");
lvwei1990 0:e41e45a41f0f 102
lvwei1990 0:e41e45a41f0f 103 /* Create resources */
lvwei1990 0:e41e45a41f0f 104 resource_ptr = (sn_nsdl_resource_info_s*)nsdl_alloc(sizeof(sn_nsdl_resource_info_s));
lvwei1990 0:e41e45a41f0f 105 if(!resource_ptr)
lvwei1990 0:e41e45a41f0f 106 return 0;
lvwei1990 0:e41e45a41f0f 107 memset(resource_ptr, 0, sizeof(sn_nsdl_resource_info_s));
lvwei1990 0:e41e45a41f0f 108
lvwei1990 0:e41e45a41f0f 109 resource_ptr->resource_parameters_ptr = (sn_nsdl_resource_parameters_s*)nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s));
lvwei1990 0:e41e45a41f0f 110 if(!resource_ptr->resource_parameters_ptr)
lvwei1990 0:e41e45a41f0f 111 {
lvwei1990 0:e41e45a41f0f 112 nsdl_free(resource_ptr);
lvwei1990 0:e41e45a41f0f 113 return 0;
lvwei1990 0:e41e45a41f0f 114 }
lvwei1990 0:e41e45a41f0f 115 memset(resource_ptr->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
lvwei1990 0:e41e45a41f0f 116
lvwei1990 0:e41e45a41f0f 117 // Static resources
lvwei1990 0:e41e45a41f0f 118 nsdl_create_static_resource(resource_ptr, sizeof("dev/mfg")-1, (uint8_t*) "dev/mfg", 0, 0, (uint8_t*) "Sensinode", sizeof("Sensinode")-1);
lvwei1990 0:e41e45a41f0f 119 nsdl_create_static_resource(resource_ptr, sizeof("dev/mdl")-1, (uint8_t*) "dev/mdl", 0, 0, (uint8_t*) "NSDL-C mbed device", sizeof("NSDL-C mbed device")-1);
lvwei1990 0:e41e45a41f0f 120
lvwei1990 0:e41e45a41f0f 121 // Dynamic resources
lvwei1990 0:e41e45a41f0f 122 //create_temperature_resource(resource_ptr);
lvwei1990 0:e41e45a41f0f 123 create_light_resource(resource_ptr);
lvwei1990 0:e41e45a41f0f 124 //create_gps_resource(resource_ptr);
lvwei1990 0:e41e45a41f0f 125 //create_relay_resource(resource_ptr);
lvwei1990 0:e41e45a41f0f 126
lvwei1990 0:e41e45a41f0f 127 /* Register with NSP */
lvwei1990 0:e41e45a41f0f 128 endpoint_ptr = nsdl_init_register_endpoint(endpoint_ptr, (uint8_t*)endpoint_name, ep_type, lifetime_ptr);
lvwei1990 0:e41e45a41f0f 129 if(sn_nsdl_register_endpoint(endpoint_ptr) != 0)
lvwei1990 0:e41e45a41f0f 130 pc.printf("NSP registering failed\r\n");
lvwei1990 0:e41e45a41f0f 131 else
lvwei1990 0:e41e45a41f0f 132 pc.printf("NSP registering OK\r\n");
lvwei1990 0:e41e45a41f0f 133 nsdl_clean_register_endpoint(&endpoint_ptr);
lvwei1990 0:e41e45a41f0f 134
lvwei1990 0:e41e45a41f0f 135 nsdl_free(resource_ptr->resource_parameters_ptr);
lvwei1990 0:e41e45a41f0f 136 nsdl_free(resource_ptr);
lvwei1990 0:e41e45a41f0f 137 return 1;
lvwei1990 0:e41e45a41f0f 138 }
lvwei1990 0:e41e45a41f0f 139
lvwei1990 0:e41e45a41f0f 140 // ****************************************************************************
lvwei1990 0:e41e45a41f0f 141 // Program entry point
lvwei1990 0:e41e45a41f0f 142
lvwei1990 0:e41e45a41f0f 143 int main()
lvwei1990 0:e41e45a41f0f 144 {
lvwei1990 0:e41e45a41f0f 145 lcd.cls();
lvwei1990 0:e41e45a41f0f 146 lcd.locate(0,0);
lvwei1990 0:e41e45a41f0f 147 lcd.printf("mbed NanoService demo\r\n");
lvwei1990 0:e41e45a41f0f 148 NSDL_DEBUG("mbed NanoService Example App 0.1\n");
lvwei1990 0:e41e45a41f0f 149
lvwei1990 0:e41e45a41f0f 150 // Initialize Ethernet interface first
lvwei1990 0:e41e45a41f0f 151 wifi_init();
lvwei1990 0:e41e45a41f0f 152
lvwei1990 0:e41e45a41f0f 153 // Initialize NSP node
lvwei1990 0:e41e45a41f0f 154 nsp_init();
lvwei1990 0:e41e45a41f0f 155
lvwei1990 0:e41e45a41f0f 156 // Initialize NSDL stack
lvwei1990 0:e41e45a41f0f 157 nsdl_init();
lvwei1990 0:e41e45a41f0f 158
lvwei1990 0:e41e45a41f0f 159 // Create NSDL resources
lvwei1990 0:e41e45a41f0f 160 create_resources();
lvwei1990 0:e41e45a41f0f 161
lvwei1990 0:e41e45a41f0f 162 // Run the NSDL event loop (never returns)
lvwei1990 0:e41e45a41f0f 163 nsdl_event_loop();
lvwei1990 0:e41e45a41f0f 164 }