Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: IoT_LED_demo ServoTest uWater_Project hackathon ... more
api/ConnectorEndpoint.cpp
- Committer:
- ansond
- Date:
- 2015-02-02
- Revision:
- 13:b0b2f1ae4c30
- Parent:
- 12:c068a2d3e8fe
- Child:
- 16:383ad1356963
File content as of revision 13:b0b2f1ae4c30:
/**
* @file ConnectorEndpoint.cpp
* @brief mbed CoAP Endpoint base class
* @author Doug Anson/Chris Paola
* @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.
*/
#include "ConnectorEndpoint.h"
// lower level network stubs integration
#include "mbedEndpointNetworkStubs.h"
// Connector namespace
namespace Connector {
// Constructor
Endpoint::Endpoint(const Logger *logger, const Options *options)
{
this->m_logger = (Logger *)logger;
this->m_options = (Options *)options;
}
// Copy Constructor
Endpoint::Endpoint(const Endpoint &ep)
{
this->m_logger = ep.m_logger;
this->m_options = ep.m_options;
}
// Destructor
Endpoint::~Endpoint()
{
}
// Plumb the network
void Endpoint::plumbNetwork(bool canActAsRouterNode) {
// call into our network stubs to plumb the network...
net_stubs_plumb_network(canActAsRouterNode);
}
// initialize the endpoint
void Endpoint::initialize()
{
// Create the NSDL Resource Pointer...
this->logger()->log("Endpoint::initialize(): initializing NSP resource pointer...");
sn_nsdl_resource_info_s *resource_ptr = (sn_nsdl_resource_info_s*)nsdl_alloc(sizeof(sn_nsdl_resource_info_s));
if(!resource_ptr) return;
memset(resource_ptr, 0, sizeof(sn_nsdl_resource_info_s));
resource_ptr->resource_parameters_ptr = (sn_nsdl_resource_parameters_s*)nsdl_alloc(sizeof(sn_nsdl_resource_parameters_s));
if(!resource_ptr->resource_parameters_ptr) {
nsdl_free(resource_ptr);
return;
}
memset(resource_ptr->resource_parameters_ptr, 0, sizeof(sn_nsdl_resource_parameters_s));
// Loop through Static Resources and bind each of them...
this->logger()->log("Endpoint::initialize(): adding static resources...");
const StaticResourcesList *static_resources = this->m_options->getStaticResourceList();
for(int i=0; i<static_resources->size(); ++i) {
this->logger()->log("Endpoint::initialize(): binding static resource: [%s]...",static_resources->at(i)->getName().c_str());
static_resources->at(i)->bind(resource_ptr);
}
// Loop through Dynamic Resources and bind each of them...
this->logger()->log("Endpoint::initialize(): adding dynamic resources...");
const DynamicResourcesList *dynamic_resources = this->m_options->getDynamicResourceList();
for(int i=0; i<dynamic_resources->size(); ++i) {
this->logger()->log("Endpoint::initialize(): binding dynamic resource: [%s]...",dynamic_resources->at(i)->getName().c_str());
dynamic_resources->at(i)->bind(resource_ptr);
}
// register the endpoint
net_stubs_register_endpoint();
// clean up
nsdl_free(resource_ptr->resource_parameters_ptr);
nsdl_free(resource_ptr);
}
// Finalize the endpoint's configuration and begin the endpoint's main even loop (static, not tied into Logger)
void Endpoint::start()
{
// create the main loop plumbing for our lower network stack
DBG("Endpoint::start(): creating main loop plumbing...\r\n");
net_stubs_create_main_loop();
// call into the lower network stubs to start event processing
DBG("Endpoint::start(): beginning main event loop...\r\n");
net_stubs_begin_main_loop();
}
// our logger
Logger *Endpoint::logger()
{
return this->m_logger;
}
} // namespace Connector
