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:
Wed Dec 03 15:39:09 2014 +0000
Revision:
26:4cac6b346e4f
Parent:
25:cb16c5248769
Child:
27:6017a643f386
UPdated sensor integration.

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 22:b361f7ae0508 17 #include "EthernetInterface.h"
erigow01 16:3fb612af0dc5 18 #include "nsdl_support.h"
erigow01 26:4cac6b346e4f 19 #include "node_cfg.h"
andcor02 25:cb16c5248769 20 #include "sensor_ctl.h"
erigow01 26:4cac6b346e4f 21
Kojto 8:be68e827aa53 22
andcor02 25:cb16c5248769 23
erigow01 16:3fb612af0dc5 24 //Serial pc(USBTX, USBRX);
Kojto 6:6eaae34586b8 25
erigow01 22:b361f7ae0508 26
erigow01 22:b361f7ae0508 27 // Ethernet initialization
erigow01 22:b361f7ae0508 28
erigow01 22:b361f7ae0508 29 EthernetInterface eth;
erigow01 22:b361f7ae0508 30
erigow01 22:b361f7ae0508 31 static void ethernet_init()
erigow01 22:b361f7ae0508 32 {
erigow01 22:b361f7ae0508 33 /* Initialize network */
erigow01 22:b361f7ae0508 34 #ifdef DHCP
erigow01 22:b361f7ae0508 35 printf("DHCP in use\r\n");
erigow01 22:b361f7ae0508 36 eth.init();
erigow01 22:b361f7ae0508 37 #else
erigow01 22:b361f7ae0508 38 eth.init(IP, MASK, GW);
erigow01 22:b361f7ae0508 39 #endif
erigow01 22:b361f7ae0508 40 if(eth.connect(30000) == 0)
erigow01 22:b361f7ae0508 41 printf("Connect OK\n\r");
erigow01 22:b361f7ae0508 42 printf("IP Address:%s ", eth.getIPAddress());
erigow01 22:b361f7ae0508 43 }
Kojto 6:6eaae34586b8 44
Kojto 6:6eaae34586b8 45
erigow01 18:eb1a194d60d9 46 //Hard Fault Handler (Watchdog)
erigow01 18:eb1a194d60d9 47 extern "C" void HardFault_Handler() {
erigow01 18:eb1a194d60d9 48 printf("Hard Fault!\r\n");
erigow01 18:eb1a194d60d9 49 NVIC_SystemReset();
erigow01 18:eb1a194d60d9 50 }
Kojto 6:6eaae34586b8 51
erigow01 15:59f4cee0da79 52 // ****************************************************************************
erigow01 26:4cac6b346e4f 53 // Socket initialization
erigow01 26:4cac6b346e4f 54 UDPSocket server;
erigow01 26:4cac6b346e4f 55 Endpoint nsp;
erigow01 15:59f4cee0da79 56
erigow01 15:59f4cee0da79 57
erigow01 15:59f4cee0da79 58
erigow01 17:8ca4a5801430 59 /* The number of seconds between NSDL Ticks*/
erigow01 17:8ca4a5801430 60 #define NSDL_TICK_PERIOD 1
erigow01 17:8ca4a5801430 61
erigow01 26:4cac6b346e4f 62 void main_event_loop() {
erigow01 17:8ca4a5801430 63 //For timing control
erigow01 17:8ca4a5801430 64 Timer nsdlTickTimer;
erigow01 17:8ca4a5801430 65 Timer registrationTimer;
erigow01 17:8ca4a5801430 66
erigow01 26:4cac6b346e4f 67 //Sensor timers...
erigow01 26:4cac6b346e4f 68 Timer temperatureReportTimer;
erigow01 26:4cac6b346e4f 69 Timer microphoneSampleTimer;
erigow01 26:4cac6b346e4f 70 Timer microphoneReportTimer;
erigow01 26:4cac6b346e4f 71 Timer doorTripReportTimer;
erigow01 26:4cac6b346e4f 72 Timer motionReportTimer;
erigow01 17:8ca4a5801430 73
erigow01 17:8ca4a5801430 74 //For recieving NSP messages
erigow01 17:8ca4a5801430 75 sn_nsdl_addr_s received_packet_address;
erigow01 17:8ca4a5801430 76 uint8_t received_address[4];
erigow01 17:8ca4a5801430 77 int8_t nsdl_result = 0;
erigow01 18:eb1a194d60d9 78 char buffer[256];
erigow01 17:8ca4a5801430 79 Endpoint from;
erigow01 17:8ca4a5801430 80 memset(&received_packet_address, 0, sizeof(sn_nsdl_addr_s));
erigow01 17:8ca4a5801430 81 received_packet_address.addr_ptr = received_address;
erigow01 17:8ca4a5801430 82 server.set_blocking(false, 1500);
erigow01 17:8ca4a5801430 83
erigow01 17:8ca4a5801430 84 //Check incoming socket...
erigow01 17:8ca4a5801430 85 int n = 0;
erigow01 17:8ca4a5801430 86 int32_t time = 0;
erigow01 26:4cac6b346e4f 87
erigow01 26:4cac6b346e4f 88 //Start Timers
erigow01 17:8ca4a5801430 89 nsdlTickTimer.start();
erigow01 17:8ca4a5801430 90 registrationTimer.start();
erigow01 26:4cac6b346e4f 91 temperatureReportTimer.start();
erigow01 26:4cac6b346e4f 92 microphoneSampleTimer.start();
erigow01 26:4cac6b346e4f 93 microphoneReportTimer.start();
erigow01 26:4cac6b346e4f 94 doorTripReportTimer.start();
erigow01 26:4cac6b346e4f 95 motionReportTimer.start();
erigow01 26:4cac6b346e4f 96 while(true) {
erigow01 26:4cac6b346e4f 97 //UDP Packet Receive...
erigow01 17:8ca4a5801430 98 n = server.receiveFrom(from, buffer, sizeof(buffer));
erigow01 26:4cac6b346e4f 99 if (n < 0) {
erigow01 17:8ca4a5801430 100 //No Data
erigow01 17:8ca4a5801430 101 //printf("Socket error\n\r");
erigow01 26:4cac6b346e4f 102 } else {
erigow01 17:8ca4a5801430 103 //UDP
erigow01 17:8ca4a5801430 104 //wait(0.25); //Waiting seems to increase reliability of comms...
erigow01 17:8ca4a5801430 105 printf("Received %d bytes\r\n", n);
erigow01 17:8ca4a5801430 106 nsdl_result = sn_nsdl_process_coap((uint8_t*)buffer, n, &received_packet_address);
erigow01 17:8ca4a5801430 107 printf("Processed COAP Packet: %d\r\n", nsdl_result);
erigow01 17:8ca4a5801430 108 n = 0;
erigow01 17:8ca4a5801430 109 }
erigow01 17:8ca4a5801430 110
erigow01 17:8ca4a5801430 111 //NSDL Tick
erigow01 17:8ca4a5801430 112 if(nsdlTickTimer.read() >= NSDL_TICK_PERIOD) {
erigow01 17:8ca4a5801430 113 sn_nsdl_exec(time);
erigow01 17:8ca4a5801430 114 nsdlTickTimer.reset();
erigow01 17:8ca4a5801430 115 }
erigow01 17:8ca4a5801430 116
erigow01 17:8ca4a5801430 117 //Registration Tick
erigow01 17:8ca4a5801430 118 if(registrationTimer.read() >= RD_UPDATE_PERIOD) {
erigow01 26:4cac6b346e4f 119 printf("Time to register...\r\n");
erigow01 26:4cac6b346e4f 120 NSP_registration();
erigow01 17:8ca4a5801430 121 registrationTimer.reset();
erigow01 17:8ca4a5801430 122 }
erigow01 26:4cac6b346e4f 123
erigow01 26:4cac6b346e4f 124 #if NODE_SENSOR_STATION
erigow01 26:4cac6b346e4f 125 if (temperatureReportTimer.read() >= TEMPERATURE_REPORT_PERIOD){
erigow01 26:4cac6b346e4f 126 //debug("Event: Temperature Report Timer\r\n");
erigow01 26:4cac6b346e4f 127 handle_temperature_report_timer();
erigow01 26:4cac6b346e4f 128 temperatureReportTimer.reset();
erigow01 26:4cac6b346e4f 129 }
erigow01 26:4cac6b346e4f 130 if (microphoneSampleTimer.read() >= SOUND_SAMPLE_PERIOD){
erigow01 26:4cac6b346e4f 131 handle_microphone_sample_timer();
erigow01 26:4cac6b346e4f 132 microphoneSampleTimer.reset();
erigow01 26:4cac6b346e4f 133 }
erigow01 26:4cac6b346e4f 134 if (microphoneReportTimer.read() >= SOUND_REPORT_PERIOD){
erigow01 26:4cac6b346e4f 135 //debug("Event: Sound Report Timer\r\n");
erigow01 26:4cac6b346e4f 136 handle_microphone_report_timer();
erigow01 26:4cac6b346e4f 137 microphoneReportTimer.reset();
erigow01 26:4cac6b346e4f 138 }
erigow01 26:4cac6b346e4f 139 #if NODE_PIR_STATION
erigow01 26:4cac6b346e4f 140 if (motionReportTimer.read() >= MOTION_REPORT_PERIOD){
erigow01 26:4cac6b346e4f 141 //debug("Event: Motion Report Timer\r\n");
erigow01 26:4cac6b346e4f 142 handle_motion_report_timer();
erigow01 26:4cac6b346e4f 143 motionReportTimer.reset();
erigow01 26:4cac6b346e4f 144 }
erigow01 26:4cac6b346e4f 145 #endif //NODE PIR STATION
erigow01 26:4cac6b346e4f 146 #if NODE_KIOSK_STATION
erigow01 26:4cac6b346e4f 147
erigow01 26:4cac6b346e4f 148 #endif //NODE KIOSK STATION
erigow01 26:4cac6b346e4f 149 #if NODE_DOOR_TRIP_STATION
erigow01 26:4cac6b346e4f 150 if (doorTripReportTimer.read() >= DOOR_TRIP_REPORT_PERIOD){
erigow01 26:4cac6b346e4f 151 //debug("Event: Door Trip Report Timer\r\n");
erigow01 26:4cac6b346e4f 152 handle_door_trip_report_timer();
erigow01 26:4cac6b346e4f 153 doorTripReportTimer.reset();
erigow01 26:4cac6b346e4f 154 }
erigow01 26:4cac6b346e4f 155 #endif //NODE TRIP STATION
erigow01 26:4cac6b346e4f 156 #if NODE_HEIGHT_STATION
erigow01 26:4cac6b346e4f 157 // if (temperatureReportTimer.read() >= TEMPERATURE_REPORT_PERIOD){
erigow01 26:4cac6b346e4f 158 //
erigow01 26:4cac6b346e4f 159 // temperatureReportTimer.reset();
erigow01 26:4cac6b346e4f 160 // }
erigow01 26:4cac6b346e4f 161 #endif //NODE HEIGHT STATION
erigow01 26:4cac6b346e4f 162 #endif //NODE_SENSOR_STATION
erigow01 17:8ca4a5801430 163 }
erigow01 17:8ca4a5801430 164
erigow01 17:8ca4a5801430 165
erigow01 17:8ca4a5801430 166 }
erigow01 15:59f4cee0da79 167
erigow01 15:59f4cee0da79 168
andcor02 25:cb16c5248769 169
Kojto 8:be68e827aa53 170 /**
Kojto 7:afaa17c11965 171 * \param none
Kojto 6:6eaae34586b8 172 * \return int
Kojto 6:6eaae34586b8 173 */
Kojto 6:6eaae34586b8 174 int main() {
erigow01 22:b361f7ae0508 175 printf("Initialising Ethernet...\r\n");
erigow01 22:b361f7ae0508 176 // Initialize Ethernet interface first
erigow01 22:b361f7ae0508 177 ethernet_init();
erigow01 26:4cac6b346e4f 178 printf("Initialising NSDL...\r\n");
erigow01 26:4cac6b346e4f 179 //Run NSDL...
erigow01 26:4cac6b346e4f 180 nsdl_run();
erigow01 26:4cac6b346e4f 181 //Init Sensors
erigow01 26:4cac6b346e4f 182 init_sensors();
Kojto 6:6eaae34586b8 183
erigow01 26:4cac6b346e4f 184 // Run the event loop (never returns)
erigow01 26:4cac6b346e4f 185 main_event_loop();
Kojto 6:6eaae34586b8 186 }