mbed Connector Endpoint interface. This interface permits a mbed endpoint to easily setup MDS resources and emit those resources to an MDS server.

Dependents:   IoT_LED_demo ServoTest uWater_Project hackathon ... more

api/Utils.cpp

Committer:
ansond
Date:
2015-01-28
Revision:
3:11b2f4e58378
Parent:
2:853f9ecc12df
Child:
4:84159d67d32d

File content as of revision 3:11b2f4e58378:

/**
 * @file    Utils.cpp
 * @brief   mbed CoAP Endpoint misc utils collection
 * @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 Endpoint includes
#include "Endpoint.h"
#include "OptionsBuilder.h"

// External references (defined in main.cpp)
Connector::Options *configure_endpoint(Connector::OptionsBuilder &builder);
extern Logger logger;

// ************************* NSDL Linkage - MDS CONFIGURATION (defaulted) *********************************

uint8_t NSP_address_bytes[NSP_IP_ADDRESS_LENGTH] = NSP_IP_ADDRESS;          // which MDS instance we want to bind to...
uint8_t endpoint_name[24] = NODE_NAME;                                      // our NODE name
uint8_t ep_type[] = NSP_ENDPOINT_TYPE;                                      // our NODE type
uint8_t lifetime_ptr[] = { NSP_LIFE_TIME };                                 // MDS lifetime
uint8_t app_MAC_address[NODE_MAC_ADDRESS_LENGTH] = NODE_MAC_ADDRESS;        // Node MAC address
uint32_t channel_list = NODE_CHANNEL_LIST;                                  // Node RF Channel list

// ************************* NSDL Linkage - MDS CONFIGURATION (defaulted)  *********************************


// further simplifies the endpoint main() configuration by removing the final initialization details of the endpoint...
void configure_endpoint()
{    
    // NSP/NSDL default configuration - see mbedConnectorInterface.h for definitions...
    logger.log("configure_endpoint: setting defaults...");
    Connector::OptionsBuilder config;
    config.setNSPAddress(NSP_address_bytes);
    config.setNSPPortNumber(NSP_COAP_UDP_PORT);
    config.setDomain(NSP_DOMAIN);
    config.setEndpointType(NSP_ENDPOINT_TYPE);
    config.setLifetime(NSP_LIFE_TIME);
    
    // Node default configuration - see mbedConnectorInterface.h for definitions...
    config.setRadioChannelList(NODE_CHANNEL_LIST);
    config.setReadUpdatePeriod(NSP_RD_UPDATE_PERIOD);
    config.setEndpointNodename(NODE_NAME); 
    config.setMACAddress(app_MAC_address);   
    
    // main.cpp can override or change any of the above defaults...
    logger.log("configure_endpoint: enabling default configuration overrides...");
    Connector::Options *options = configure_endpoint(config);
    
    uint8_ t *tmp = options->getNSPAddress();
    
    // with options, lets set the underlying NSDL globals...
    logger.log("configure_endpoint: updating external NSDL globals...");
    NSP_address_bytes = options->getNSPAddress();
    endpoint_name = options->getEndpointNodename();
    ep_type = options->getEndpointType();
    lifetime_ptr = options->getLifetime();
    app_MAC_address = options->getMACAddress();
    channel_list = options->getRadioChannelList();

    // alloc Endpoint
    logger.log("configure_endpoint: allocating endpoint...");
    Connector::Endpoint endpoint(&logger,options);

    // initialize Endpoint resources
    logger.log("configure_endpoint: binding endpoint resources...");
    endpoint.initialize();

    // DONE
    logger.log("configure_endpoint: endpoint setup complete.");
}