mbed Sensor node for Instrumented Booth over ETH.

Dependencies:   EthernetInterface-1 MaxbotixDriver Presence HTU21D_TEMP_HUMID_SENSOR_SAMPLE Resources SHARPIR mbed-rtos mbed-src WDT_K64F nsdl_lib

Fork of Trenton_Switch_LPC1768_ETH by Demo Team

Committer:
erigow01
Date:
Fri Jun 27 13:29:18 2014 +0000
Revision:
18:eb1a194d60d9
Parent:
17:8ca4a5801430
Child:
20:c35b8700d5b2
Latest.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Kojto 6:6eaae34586b8 1 /* mbed Microcontroller Library
Kojto 6:6eaae34586b8 2 * Copyright (c) 2006-2013 ARM Limited
Kojto 6:6eaae34586b8 3 *
Kojto 6:6eaae34586b8 4 * Licensed under the Apache License, Version 2.0 (the "License");
Kojto 6:6eaae34586b8 5 * you may not use this file except in compliance with the License.
Kojto 6:6eaae34586b8 6 * You may obtain a copy of the License at
Kojto 6:6eaae34586b8 7 *
Kojto 6:6eaae34586b8 8 * http://www.apache.org/licenses/LICENSE-2.0
Kojto 6:6eaae34586b8 9 *
Kojto 6:6eaae34586b8 10 * Unless required by applicable law or agreed to in writing, software
Kojto 6:6eaae34586b8 11 * distributed under the License is distributed on an "AS IS" BASIS,
Kojto 6:6eaae34586b8 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Kojto 6:6eaae34586b8 13 * See the License for the specific language governing permissions and
Kojto 6:6eaae34586b8 14 * limitations under the License.
Kojto 6:6eaae34586b8 15 */
Kojto 6:6eaae34586b8 16 #include "mbed.h"
erigow01 16:3fb612af0dc5 17 #include "WiflyInterface.h"
Kojto 6:6eaae34586b8 18 #include "main.h"
erigow01 16:3fb612af0dc5 19
erigow01 16:3fb612af0dc5 20 #include "nsdl_support.h"
Kojto 6:6eaae34586b8 21
erigow01 18:eb1a194d60d9 22 #include "switch.h"
Kojto 8:be68e827aa53 23
erigow01 16:3fb612af0dc5 24 //Serial pc(USBTX, USBRX);
Kojto 6:6eaae34586b8 25
erigow01 16:3fb612af0dc5 26 /* wifly object where:
erigow01 16:3fb612af0dc5 27 * - p9 and p10 are for the serial communication
erigow01 16:3fb612af0dc5 28 * - p25 is for the reset pin
erigow01 16:3fb612af0dc5 29 * - p26 is for the connection status
erigow01 16:3fb612af0dc5 30 * - "mbed" is the ssid of the network
erigow01 16:3fb612af0dc5 31 * - "password" is the password
erigow01 16:3fb612af0dc5 32 * - WPA is the security
erigow01 16:3fb612af0dc5 33 */
erigow01 18:eb1a194d60d9 34 WiflyInterface wifly(p9, p10, p25, p26, SSID, AP_KEY, WPA);
erigow01 18:eb1a194d60d9 35 //WiflyInterface wifly(PTE16, PTE17, PTD4, PTD2, SSID, AP_KEY, WPA); //KL46Z
Kojto 6:6eaae34586b8 36
erigow01 15:59f4cee0da79 37 // NSP configuration
erigow01 15:59f4cee0da79 38 /* Change this IP address to that of your NanoService Platform installation */
erigow01 15:59f4cee0da79 39 Endpoint nsp;
erigow01 15:59f4cee0da79 40 UDPSocket server;
erigow01 16:3fb612af0dc5 41 //extern TCPSocketConnection server;
erigow01 18:eb1a194d60d9 42 char endpoint_name[] = {"switch"};
erigow01 18:eb1a194d60d9 43 uint8_t ep_type[] = {"mbed_LPC1768"};
erigow01 15:59f4cee0da79 44 uint8_t lifetime_ptr[] = {"86400"};
erigow01 15:59f4cee0da79 45
erigow01 16:3fb612af0dc5 46 //static const char* NSP_ADDRESS = "208.111.39.209"; /* demo NSP, web interface at http://nanoservice-demo.mbed.org*/
erigow01 16:3fb612af0dc5 47 //static const char* NSP_ADDRESS = "10.2.131.119"; /* aseserver NSP, */
erigow01 16:3fb612af0dc5 48 static const char* NSP_ADDRESS = "192.168.1.10"; /* Trenton BBB NSP */
erigow01 16:3fb612af0dc5 49 static const int NSP_PORT = 5683;
Kojto 6:6eaae34586b8 50
erigow01 18:eb1a194d60d9 51 //Hard Fault Handler (Watchdog)
erigow01 18:eb1a194d60d9 52 extern "C" void HardFault_Handler() {
erigow01 18:eb1a194d60d9 53 printf("Hard Fault!\r\n");
erigow01 18:eb1a194d60d9 54 NVIC_SystemReset();
erigow01 18:eb1a194d60d9 55 }
Kojto 6:6eaae34586b8 56
erigow01 15:59f4cee0da79 57 // ****************************************************************************
erigow01 15:59f4cee0da79 58 // NSP initialization
erigow01 15:59f4cee0da79 59
erigow01 15:59f4cee0da79 60 static void nsp_connect()
erigow01 15:59f4cee0da79 61 {
erigow01 18:eb1a194d60d9 62 printf("EP Name: %s\r\n", endpoint_name);
erigow01 18:eb1a194d60d9 63 printf("NSP Location: coap://%s:%d\r\n", NSP_ADDRESS, NSP_PORT);
erigow01 15:59f4cee0da79 64
erigow01 15:59f4cee0da79 65 // Bind the port
erigow01 15:59f4cee0da79 66 //cellular->bind(EP_PORT);
erigow01 15:59f4cee0da79 67 server.init();
erigow01 16:3fb612af0dc5 68 //server.connect(NSP_ADDRESS, NSP_PORT);
erigow01 15:59f4cee0da79 69 server.bind(NSP_PORT);
erigow01 15:59f4cee0da79 70 nsp.set_address(NSP_ADDRESS, NSP_PORT);
erigow01 15:59f4cee0da79 71
erigow01 15:59f4cee0da79 72 printf("UDP connection to NSP successful.\r\n");
erigow01 15:59f4cee0da79 73 }
erigow01 15:59f4cee0da79 74
erigow01 15:59f4cee0da79 75 static int create_resources()
erigow01 15:59f4cee0da79 76 {
erigow01 15:59f4cee0da79 77 sn_nsdl_resource_info_s *resource_ptr = NULL;
erigow01 15:59f4cee0da79 78 sn_nsdl_ep_parameters_s *endpoint_ptr = NULL;
erigow01 15:59f4cee0da79 79
erigow01 15:59f4cee0da79 80 printf("Creating resources\r\n");
erigow01 15:59f4cee0da79 81
erigow01 15:59f4cee0da79 82 /* Create resources */
erigow01 15:59f4cee0da79 83 resource_ptr = (sn_nsdl_resource_info_s*)nsdl_alloc(sizeof(sn_nsdl_resource_info_s));
erigow01 15:59f4cee0da79 84 if(!resource_ptr)
erigow01 15:59f4cee0da79 85 return 0;
erigow01 15:59f4cee0da79 86 memset(resource_ptr, 0, sizeof(sn_nsdl_resource_info_s));
erigow01 15:59f4cee0da79 87
erigow01 15:59f4cee0da79 88 resource_ptr->resource_parameters_ptr = (sn_nsdl_resource_parameters_s*)nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s));
erigow01 15:59f4cee0da79 89 if(!resource_ptr->resource_parameters_ptr)
erigow01 15:59f4cee0da79 90 {
erigow01 15:59f4cee0da79 91 nsdl_free(resource_ptr);
erigow01 15:59f4cee0da79 92 return 0;
erigow01 15:59f4cee0da79 93 }
erigow01 15:59f4cee0da79 94 memset(resource_ptr->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
erigow01 15:59f4cee0da79 95
erigow01 15:59f4cee0da79 96 // Static resources
erigow01 18:eb1a194d60d9 97 nsdl_create_static_resource(resource_ptr, sizeof("detail/name")-1, (uint8_t*) "detail/name", 0, 0, (uint8_t*) "LPC1768 Switch", sizeof("LPC1768 Switch")-1);
erigow01 15:59f4cee0da79 98
erigow01 15:59f4cee0da79 99 // Dynamic resources
erigow01 18:eb1a194d60d9 100 create_switch_resource(resource_ptr);
erigow01 15:59f4cee0da79 101
erigow01 15:59f4cee0da79 102 /* Register with NSP */
erigow01 15:59f4cee0da79 103 endpoint_ptr = nsdl_init_register_endpoint(endpoint_ptr, (uint8_t*)endpoint_name, ep_type, lifetime_ptr);
erigow01 15:59f4cee0da79 104 if(sn_nsdl_register_endpoint(endpoint_ptr) != 0) {
erigow01 15:59f4cee0da79 105 printf("NSP registering failed\r\n");
erigow01 15:59f4cee0da79 106 } else {
erigow01 15:59f4cee0da79 107 printf("NSP registering OK\r\n");
erigow01 15:59f4cee0da79 108 }
erigow01 15:59f4cee0da79 109 nsdl_clean_register_endpoint(&endpoint_ptr);
erigow01 15:59f4cee0da79 110
erigow01 15:59f4cee0da79 111 nsdl_free(resource_ptr->resource_parameters_ptr);
erigow01 15:59f4cee0da79 112 nsdl_free(resource_ptr);
erigow01 15:59f4cee0da79 113 return 1;
erigow01 15:59f4cee0da79 114 }
erigow01 15:59f4cee0da79 115
erigow01 17:8ca4a5801430 116 /* The number of seconds between NSDL Ticks*/
erigow01 17:8ca4a5801430 117 #define NSDL_TICK_PERIOD 1
erigow01 17:8ca4a5801430 118 /* The number of seconds between NSP registration messages */
erigow01 17:8ca4a5801430 119 #define RD_UPDATE_PERIOD 300
erigow01 17:8ca4a5801430 120
erigow01 17:8ca4a5801430 121 void nsdl_event_loop()
erigow01 17:8ca4a5801430 122 {
erigow01 17:8ca4a5801430 123 //Thread registration_thread(registration_update_thread);
erigow01 17:8ca4a5801430 124
erigow01 17:8ca4a5801430 125 //For timing control
erigow01 17:8ca4a5801430 126 Timer nsdlTickTimer;
erigow01 17:8ca4a5801430 127 Timer registrationTimer;
erigow01 17:8ca4a5801430 128
erigow01 17:8ca4a5801430 129 //Re-registration
erigow01 17:8ca4a5801430 130 sn_nsdl_ep_parameters_s *endpoint_ptr = NULL;
erigow01 17:8ca4a5801430 131
erigow01 17:8ca4a5801430 132 //For recieving NSP messages
erigow01 17:8ca4a5801430 133 sn_nsdl_addr_s received_packet_address;
erigow01 17:8ca4a5801430 134 uint8_t received_address[4];
erigow01 17:8ca4a5801430 135 int8_t nsdl_result = 0;
erigow01 18:eb1a194d60d9 136 char buffer[256];
erigow01 17:8ca4a5801430 137 Endpoint from;
erigow01 17:8ca4a5801430 138 memset(&received_packet_address, 0, sizeof(sn_nsdl_addr_s));
erigow01 17:8ca4a5801430 139 received_packet_address.addr_ptr = received_address;
erigow01 17:8ca4a5801430 140 server.set_blocking(false, 1500);
erigow01 17:8ca4a5801430 141
erigow01 17:8ca4a5801430 142 //Check incoming socket...
erigow01 17:8ca4a5801430 143 int n = 0;
erigow01 17:8ca4a5801430 144 int32_t time = 0;
erigow01 17:8ca4a5801430 145 nsdlTickTimer.start();
erigow01 17:8ca4a5801430 146 registrationTimer.start();
erigow01 17:8ca4a5801430 147 while(true)
erigow01 17:8ca4a5801430 148 {
erigow01 17:8ca4a5801430 149 //Wifly UDP Packet Receive...
erigow01 17:8ca4a5801430 150 n = server.receiveFrom(from, buffer, sizeof(buffer));
erigow01 17:8ca4a5801430 151 if (n < 0)
erigow01 17:8ca4a5801430 152 {
erigow01 17:8ca4a5801430 153 //No Data
erigow01 17:8ca4a5801430 154 //printf("Socket error\n\r");
erigow01 17:8ca4a5801430 155 }
erigow01 17:8ca4a5801430 156 else
erigow01 17:8ca4a5801430 157 {
erigow01 17:8ca4a5801430 158 //UDP
erigow01 17:8ca4a5801430 159 //wait(0.25); //Waiting seems to increase reliability of comms...
erigow01 17:8ca4a5801430 160 printf("Received %d bytes\r\n", n);
erigow01 17:8ca4a5801430 161 nsdl_result = sn_nsdl_process_coap((uint8_t*)buffer, n, &received_packet_address);
erigow01 17:8ca4a5801430 162 printf("Processed COAP Packet: %d\r\n", nsdl_result);
erigow01 17:8ca4a5801430 163 n = 0;
erigow01 17:8ca4a5801430 164 }
erigow01 17:8ca4a5801430 165
erigow01 17:8ca4a5801430 166 //Check if need to send pressure mat update...
erigow01 18:eb1a194d60d9 167 switch_report();
erigow01 17:8ca4a5801430 168
erigow01 17:8ca4a5801430 169 //NSDL Tick
erigow01 17:8ca4a5801430 170 if(nsdlTickTimer.read() >= NSDL_TICK_PERIOD) {
erigow01 17:8ca4a5801430 171 sn_nsdl_exec(time);
erigow01 17:8ca4a5801430 172 nsdlTickTimer.reset();
erigow01 17:8ca4a5801430 173 }
erigow01 17:8ca4a5801430 174
erigow01 17:8ca4a5801430 175 //Registration Tick
erigow01 17:8ca4a5801430 176 if(registrationTimer.read() >= RD_UPDATE_PERIOD) {
erigow01 17:8ca4a5801430 177 printf("NSP attempt re-register...\r\n");
erigow01 17:8ca4a5801430 178 endpoint_ptr = nsdl_init_register_endpoint(endpoint_ptr, (uint8_t*)endpoint_name, ep_type, lifetime_ptr);
erigow01 17:8ca4a5801430 179 if(sn_nsdl_register_endpoint(endpoint_ptr) != 0)
erigow01 17:8ca4a5801430 180 printf("NSP re-registering failed\r\n");
erigow01 17:8ca4a5801430 181 else
erigow01 17:8ca4a5801430 182 printf("NSP re-registering OK\r\n");
erigow01 17:8ca4a5801430 183 nsdl_clean_register_endpoint(&endpoint_ptr);
erigow01 17:8ca4a5801430 184 registrationTimer.reset();
erigow01 17:8ca4a5801430 185 }
erigow01 17:8ca4a5801430 186 }
erigow01 17:8ca4a5801430 187
erigow01 17:8ca4a5801430 188
erigow01 17:8ca4a5801430 189 }
erigow01 15:59f4cee0da79 190
erigow01 15:59f4cee0da79 191
Kojto 8:be68e827aa53 192 /**
Kojto 7:afaa17c11965 193 * \param none
Kojto 6:6eaae34586b8 194 * \return int
Kojto 6:6eaae34586b8 195 */
Kojto 6:6eaae34586b8 196 int main() {
erigow01 16:3fb612af0dc5 197 //factory reset Wifly
erigow01 16:3fb612af0dc5 198 wifly.reset();
erigow01 18:eb1a194d60d9 199 printf("\nFactory Reset\r\n");
erigow01 16:3fb612af0dc5 200 //reboot wifly
erigow01 16:3fb612af0dc5 201 bool success = wifly.reboot();
erigow01 18:eb1a194d60d9 202 printf("Reboot: %d\r\n", success); //success = 1 -> successful process
erigow01 18:eb1a194d60d9 203 printf("Initialising Wifly...\r\n");
erigow01 16:3fb612af0dc5 204 wifly.init(); // use DHCP
erigow01 16:3fb612af0dc5 205 while (!wifly.connect()); // join the network
erigow01 18:eb1a194d60d9 206 printf("IP Address is %s\r\n", wifly.getIPAddress());
erigow01 16:3fb612af0dc5 207
erigow01 15:59f4cee0da79 208 // Bind the socket and configure NSP settings
erigow01 15:59f4cee0da79 209 nsp_connect();
erigow01 15:59f4cee0da79 210
erigow01 15:59f4cee0da79 211 // Initalize NanoService library
erigow01 15:59f4cee0da79 212 nsdl_init();
Kojto 6:6eaae34586b8 213
erigow01 15:59f4cee0da79 214 // Create resources & register with NSP
erigow01 16:3fb612af0dc5 215 create_resources();
erigow01 16:3fb612af0dc5 216 // Run the NSDL event loop (never returns)
erigow01 16:3fb612af0dc5 217 nsdl_event_loop();
Kojto 6:6eaae34586b8 218 }