Demo project for IoT World Hackathon

Dependencies:   Chainable_RGB_LED mbed mbedConnectorInterface mbedEndpointNetwork

Committer:
michaeljkoster
Date:
Tue May 12 00:51:01 2015 +0000
Revision:
0:a9025db1ac76
Initial Fork

Who changed what in which revision?

UserRevisionLine numberNew contents of line
michaeljkoster 0:a9025db1ac76 1 /**
michaeljkoster 0:a9025db1ac76 2 * @file main.cpp
michaeljkoster 0:a9025db1ac76 3 * @brief mbed Connected Home Endpoint main entry point
michaeljkoster 0:a9025db1ac76 4 * @author Doug Anson
michaeljkoster 0:a9025db1ac76 5 * @version 1.0
michaeljkoster 0:a9025db1ac76 6 * @see
michaeljkoster 0:a9025db1ac76 7 *
michaeljkoster 0:a9025db1ac76 8 * Copyright (c) 2014
michaeljkoster 0:a9025db1ac76 9 *
michaeljkoster 0:a9025db1ac76 10 * Licensed under the Apache License, Version 2.0 (the "License");
michaeljkoster 0:a9025db1ac76 11 * you may not use this file except in compliance with the License.
michaeljkoster 0:a9025db1ac76 12 * You may obtain a copy of the License at
michaeljkoster 0:a9025db1ac76 13 *
michaeljkoster 0:a9025db1ac76 14 * http://www.apache.org/licenses/LICENSE-2.0
michaeljkoster 0:a9025db1ac76 15 *
michaeljkoster 0:a9025db1ac76 16 * Unless required by applicable law or agreed to in writing, software
michaeljkoster 0:a9025db1ac76 17 * distributed under the License is distributed on an "AS IS" BASIS,
michaeljkoster 0:a9025db1ac76 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
michaeljkoster 0:a9025db1ac76 19 * See the License for the specific language governing permissions and
michaeljkoster 0:a9025db1ac76 20 * limitations under the License.
michaeljkoster 0:a9025db1ac76 21 */
michaeljkoster 0:a9025db1ac76 22
michaeljkoster 0:a9025db1ac76 23 // mbed Connector Interface (configuration)
michaeljkoster 0:a9025db1ac76 24 #include "mbedConnectorInterface.h"
michaeljkoster 0:a9025db1ac76 25
michaeljkoster 0:a9025db1ac76 26 // Ethernet Interface
michaeljkoster 0:a9025db1ac76 27 #include "EthernetInterface.h"
michaeljkoster 0:a9025db1ac76 28 EthernetInterface ethernet;
michaeljkoster 0:a9025db1ac76 29
michaeljkoster 0:a9025db1ac76 30 // mbed Connector Endpoint includes
michaeljkoster 0:a9025db1ac76 31 #include "ConnectorEndpoint.h"
michaeljkoster 0:a9025db1ac76 32 #include "OptionsBuilder.h"
michaeljkoster 0:a9025db1ac76 33
michaeljkoster 0:a9025db1ac76 34 // USB Serial port access for debugging/logging
michaeljkoster 0:a9025db1ac76 35 RawSerial pc(USBTX,USBRX);
michaeljkoster 0:a9025db1ac76 36
michaeljkoster 0:a9025db1ac76 37 // Logging facility
michaeljkoster 0:a9025db1ac76 38 Logger logger(&pc);
michaeljkoster 0:a9025db1ac76 39
michaeljkoster 0:a9025db1ac76 40 // Static Resources
michaeljkoster 0:a9025db1ac76 41 #include "StaticResource.h"
michaeljkoster 0:a9025db1ac76 42 StaticResource mfg(&logger,"3/0/0","Freescale");
michaeljkoster 0:a9025db1ac76 43 StaticResource model(&logger,"3/0/1","K64F mbed Ethernet demo");
michaeljkoster 0:a9025db1ac76 44
michaeljkoster 0:a9025db1ac76 45 //
michaeljkoster 0:a9025db1ac76 46 // Dynamic Resource Note:
michaeljkoster 0:a9025db1ac76 47 //
michaeljkoster 0:a9025db1ac76 48 // mbedConnectorInterface supports up to IPT_MAX_ENTRIES
michaeljkoster 0:a9025db1ac76 49 // (currently 5) independent dynamic resources.
michaeljkoster 0:a9025db1ac76 50 //
michaeljkoster 0:a9025db1ac76 51 // You can increase this (at the cost of memory)
michaeljkoster 0:a9025db1ac76 52 // in mbedConnectorinterface.h
michaeljkoster 0:a9025db1ac76 53 //
michaeljkoster 0:a9025db1ac76 54
michaeljkoster 0:a9025db1ac76 55 // Light Resource
michaeljkoster 0:a9025db1ac76 56 #include "LightResource.h"
michaeljkoster 0:a9025db1ac76 57 LightResource light(&logger,"3311/0/5706");
michaeljkoster 0:a9025db1ac76 58
michaeljkoster 0:a9025db1ac76 59 // LED Resource
michaeljkoster 0:a9025db1ac76 60 #include "OnBoardLED.h"
michaeljkoster 0:a9025db1ac76 61 LEDResource led(&logger,"3311/1/5706");
michaeljkoster 0:a9025db1ac76 62
michaeljkoster 0:a9025db1ac76 63 // Slide control Resource
michaeljkoster 0:a9025db1ac76 64 #include "TempResource.h"
michaeljkoster 0:a9025db1ac76 65 TempResource temp(&logger,"3303/0/5700", true); /* true if observable */
michaeljkoster 0:a9025db1ac76 66
michaeljkoster 0:a9025db1ac76 67 // Set our own unique endpoint name
michaeljkoster 0:a9025db1ac76 68 #define MY_ENDPOINT_NAME "Changeme-LED-demo"
michaeljkoster 0:a9025db1ac76 69
michaeljkoster 0:a9025db1ac76 70 // My NSP Domain
michaeljkoster 0:a9025db1ac76 71 #define MY_NSP_DOMAIN "domain1"
michaeljkoster 0:a9025db1ac76 72
michaeljkoster 0:a9025db1ac76 73 // Customization Example: My custom NSP IPv4 or IPv6 address and NSP CoAP port
michaeljkoster 0:a9025db1ac76 74 //uint8_t my_nsp_address[NSP_IP_ADDRESS_LENGTH] = {192,168,1,199}; /* local */
michaeljkoster 0:a9025db1ac76 75 //uint8_t my_nsp_address[NSP_IP_ADDRESS_LENGTH] = {54,191,98,247}; /* Dew Mobility EC2 Instance */
michaeljkoster 0:a9025db1ac76 76 //uint8_t my_nsp_address[NSP_IP_ADDRESS_LENGTH] = {108,201,184,41}; /* smartobjectservice.com */
michaeljkoster 0:a9025db1ac76 77 uint8_t my_nsp_address[NSP_IP_ADDRESS_LENGTH] = {104,210,36,5}; /* iot-hack-mds.cloudapp.net */
michaeljkoster 0:a9025db1ac76 78 int my_nsp_coap_port = 5683;
michaeljkoster 0:a9025db1ac76 79
michaeljkoster 0:a9025db1ac76 80 // called from the Endpoint::start() below to create resources and the endpoint internals...
michaeljkoster 0:a9025db1ac76 81 Connector::Options *configure_endpoint(Connector::OptionsBuilder &config)
michaeljkoster 0:a9025db1ac76 82 {
michaeljkoster 0:a9025db1ac76 83 // Build the endpoint configuration parameters
michaeljkoster 0:a9025db1ac76 84 logger.log("configure_endpoint: building endpoint configuration...");
michaeljkoster 0:a9025db1ac76 85 temp.setMaxAge(0); /* MaxAge = 0 to disable caching of the slide value in the Device Server */
michaeljkoster 0:a9025db1ac76 86 return config.setEndpointNodename(MY_ENDPOINT_NAME) // custom endpoint name
michaeljkoster 0:a9025db1ac76 87 .setNSPAddress(my_nsp_address) // custom NSP address
michaeljkoster 0:a9025db1ac76 88 .setDomain(MY_NSP_DOMAIN) // custom NSP domain
michaeljkoster 0:a9025db1ac76 89 .setNSPPortNumber(my_nsp_coap_port) // custom NSP CoAP port
michaeljkoster 0:a9025db1ac76 90
michaeljkoster 0:a9025db1ac76 91 // add the static resource representing this endpoint
michaeljkoster 0:a9025db1ac76 92 .addResource(&mfg)
michaeljkoster 0:a9025db1ac76 93 .addResource(&model)
michaeljkoster 0:a9025db1ac76 94
michaeljkoster 0:a9025db1ac76 95 // Add my specific physical dynamic resources...
michaeljkoster 0:a9025db1ac76 96 .addResource(&light)
michaeljkoster 0:a9025db1ac76 97 .addResource(&temp, 1000)
michaeljkoster 0:a9025db1ac76 98 .addResource(&led)
michaeljkoster 0:a9025db1ac76 99
michaeljkoster 0:a9025db1ac76 100 // finalize the configuration...
michaeljkoster 0:a9025db1ac76 101 .build();
michaeljkoster 0:a9025db1ac76 102 }
michaeljkoster 0:a9025db1ac76 103
michaeljkoster 0:a9025db1ac76 104 // main entry point...
michaeljkoster 0:a9025db1ac76 105 int main()
michaeljkoster 0:a9025db1ac76 106 {
michaeljkoster 0:a9025db1ac76 107 // Announce
michaeljkoster 0:a9025db1ac76 108 logger.log("\r\n\r\nmbed mDS Sample Endpoint v1.0 (Ethernet)");
michaeljkoster 0:a9025db1ac76 109
michaeljkoster 0:a9025db1ac76 110 // we have to plumb our network first
michaeljkoster 0:a9025db1ac76 111 Connector::Endpoint::plumbNetwork();
michaeljkoster 0:a9025db1ac76 112
michaeljkoster 0:a9025db1ac76 113 // starts the endpoint by finalizing its configuration (configure_endpoint() above called),creating a Thread and reading NSP events...
michaeljkoster 0:a9025db1ac76 114 logger.log("Start the endpoint to finish setup and enter the main loop...");
michaeljkoster 0:a9025db1ac76 115 Connector::Endpoint::start();
michaeljkoster 0:a9025db1ac76 116 }