Dreamforce 2015 BLE-based mDS HeartRate Monitor Endpoint

Dependencies:   GroveEarbudSensor mbed mbedConnectorInterface mbedEndpointNetwork_BLE

main.cpp

Committer:
ansond
Date:
2015-03-16
Revision:
6:759aab2880a7
Parent:
5:4609a86755be
Child:
24:c51aea8fe7f1

File content as of revision 6:759aab2880a7:

/**
 * @file    main.cpp
 * @brief   mbed Connected Home Endpoint main entry point
 * @author  Doug Anson
 * @version 1.0
 * @see
 *
 * Copyright (c) 2014
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// mbed Connector Interface (configuration)
#include "mbedConnectorInterface.h"

// mbed Connector Endpoint includes
#include "ConnectorEndpoint.h"
#include "OptionsBuilder.h"

// USB Serial port access for debugging/logging
RawSerial pc(USBTX,USBRX);

// Logging facility
Logger logger(&pc);

// which Nordic board?
#ifdef TARGET_NRF51_DK
    #define NORDIC_MODEL        "nRF51822-DK"
    #define MY_ENDPOINT_NAME    "ble-hrm-endpt-dk"
    #define NORDIC_SDA          P0_30
    #define NORDIC_SCL          P0_7   
#endif
#ifdef TARGET_NRF51_DONGLE
    #define NORDIC_MODEL        "nRF51822-DONGLE"
    #define MY_ENDPOINT_NAME    "ble-hrm-endpt"
    #define NORDIC_SDA          P0_20
    #define NORDIC_SCL          P0_19
#endif
#ifdef TARGET_NRF51_MKIT
    #define NORDIC_MODEL        "nRF51822-MKIT"
    #define MY_ENDPOINT_NAME    "ble-hrm-endpt-mkit"
    #define NORDIC_SDA          P0_22
    #define NORDIC_SCL          P0_20
#endif

// Static Resources
#include "StaticResource.h"
StaticResource mfg(&logger,"dev/mfg","Nordic Semi");
StaticResource model(&logger,"dev/mdl",NORDIC_MODEL);

//
// Dynamic Resource Note:
//
//  mbedConnectorInterface supports up to IPT_MAX_ENTRIES 
//  (currently 5) independent dynamic resources.
//
//  You can increase this (at the cost of memory) in 
//  mbedConnectorinterface.h
//

// Heartrate Resource
#include "HeartrateResource.h"
HeartrateResource hr(&logger,"888/0/5850",true); // observable   

// My NSP Domain
#define MY_NSP_DOMAIN                          "domain"                               

// Customization Example: My custom NSP IPv6 address and NSP CoAP port
//uint8_t my_nsp_address[NSP_IP_ADDRESS_LENGTH] = {72,182,4,230}; 
//int my_nsp_coap_port                          = 26395;          // www.ansonworks.com:27164

// Customization Example: My custom NSP IPv6 address and NSP CoAP port
uint8_t my_nsp_address[NSP_IP_ADDRESS_LENGTH] = {10,1,0,26}; 
int my_nsp_coap_port                          = 5683;

// called from the Endpoint::start() below to create resources and the endpoint internals...
Connector::Options *configure_endpoint(Connector::OptionsBuilder &config)
{
    // Build the endpoint configuration parameters
    logger.log("configure_endpoint: building endpoint configuration...");
    return config.setEndpointNodename(MY_ENDPOINT_NAME)                   // custom endpoint name
                 .setNSPAddress(my_nsp_address)                           // custom NSP address
                 .setDomain(MY_NSP_DOMAIN)                                // custom NSP domain
                 .setNSPPortNumber(my_nsp_coap_port)                      // custom NSP CoAP port
                 
                 // add the static resource representing this endpoint
                 .addResource(&mfg)
                 .addResource(&model)
                 
                 // add the heartrate resource
                 .addResource(&hr)
                                      
                 // finalize the configuration...
                 .build();
}

// main entry point...
int main()
{    
    // Announce
    logger.log("\r\n\r\nmbed mDS BLE Heartrate Endpoint");
    
    // we have to plumb our network first
    Connector::Endpoint::plumbNetwork();
     
    // starts the endpoint by finalizing its configuration (configure_endpoint() above called),creating a Thread and reading NSP events...
    logger.log("Start the endpoint to finish setup and enter the main loop...");
    Connector::Endpoint::start();
}