mbed Connector Interface simplification API on top of mbed-client

Fork of mbedConnectorInterfaceV3 by Doug Anson

NOTE:

This repo has been replaced with https://github.com/ARMmbed/mbedConnectorInterface. No further updates will occur with this repo. Please use the github repo instead. Thanks!

Committer:
ansond
Date:
Fri Mar 04 21:55:42 2016 +0000
Revision:
11:3d4434825cd7
Parent:
10:3f79b5e67c22
Child:
12:d0e61bac8c27
updated

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ansond 1:16f0fb5b8d97 1 /**
ansond 1:16f0fb5b8d97 2 * @file Utils.cpp
ansond 1:16f0fb5b8d97 3 * @brief mbed CoAP Endpoint misc utils collection
ansond 1:16f0fb5b8d97 4 * @author Doug Anson
ansond 1:16f0fb5b8d97 5 * @version 1.0
ansond 1:16f0fb5b8d97 6 * @see
ansond 1:16f0fb5b8d97 7 *
ansond 1:16f0fb5b8d97 8 * Copyright (c) 2014
ansond 1:16f0fb5b8d97 9 *
ansond 1:16f0fb5b8d97 10 * Licensed under the Apache License, Version 2.0 (the "License");
ansond 1:16f0fb5b8d97 11 * you may not use this file except in compliance with the License.
ansond 1:16f0fb5b8d97 12 * You may obtain a copy of the License at
ansond 1:16f0fb5b8d97 13 *
ansond 1:16f0fb5b8d97 14 * http://www.apache.org/licenses/LICENSE-2.0
ansond 1:16f0fb5b8d97 15 *
ansond 1:16f0fb5b8d97 16 * Unless required by applicable law or agreed to in writing, software
ansond 1:16f0fb5b8d97 17 * distributed under the License is distributed on an "AS IS" BASIS,
ansond 1:16f0fb5b8d97 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ansond 1:16f0fb5b8d97 19 * See the License for the specific language governing permissions and
ansond 1:16f0fb5b8d97 20 * limitations under the License.
ansond 1:16f0fb5b8d97 21 */
ansond 1:16f0fb5b8d97 22
ansond 1:16f0fb5b8d97 23 // mbed Endpoint includes
ansond 1:16f0fb5b8d97 24 #include "mbed-connector-interface/ConnectorEndpoint.h"
ansond 1:16f0fb5b8d97 25 #include "mbed-connector-interface/OptionsBuilder.h"
ansond 6:d4d1105a1777 26 #include "mbed-connector-interface/mbedEndpointNetwork.h"
ansond 1:16f0fb5b8d97 27
ansond 10:3f79b5e67c22 28 // Maximum CoAP URL length
ansond 10:3f79b5e67c22 29 #define MAX_CONN_URL_LENGTH 128
ansond 10:3f79b5e67c22 30
ansond 1:16f0fb5b8d97 31 // External references (defined in main.cpp)
ansond 1:16f0fb5b8d97 32 Connector::Options *configure_endpoint(Connector::OptionsBuilder &builder);
ansond 1:16f0fb5b8d97 33 extern Logger logger;
ansond 1:16f0fb5b8d97 34
ansond 8:f950fb1b78c0 35 // Our Endpoint
ansond 8:f950fb1b78c0 36 Connector::Endpoint *__endpoint = NULL;
ansond 8:f950fb1b78c0 37
ansond 1:16f0fb5b8d97 38 // Our Endpoint configured Options
ansond 1:16f0fb5b8d97 39 Connector::OptionsBuilder config;
ansond 1:16f0fb5b8d97 40 Connector::Options *options = NULL;
ansond 1:16f0fb5b8d97 41
ansond 8:f950fb1b78c0 42 // initialize the Connector::Endpoint instance
ansond 8:f950fb1b78c0 43 void *utils_init_endpoint(bool canActAsRouterNode) {
ansond 8:f950fb1b78c0 44 // alloc Endpoint
ansond 8:f950fb1b78c0 45 logger.log("Endpoint: allocating endpoint instance...");
ansond 8:f950fb1b78c0 46 Connector::Endpoint *ep = new Connector::Endpoint(&logger,options);
ansond 8:f950fb1b78c0 47 if (ep != NULL) {
ansond 8:f950fb1b78c0 48 ep->asRouterNode(canActAsRouterNode);
ansond 8:f950fb1b78c0 49 }
ansond 8:f950fb1b78c0 50 return (void *)ep;
ansond 8:f950fb1b78c0 51 }
ansond 1:16f0fb5b8d97 52
ansond 1:16f0fb5b8d97 53 // further simplifies the endpoint main() configuration by removing the final initialization details of the endpoint...
ansond 1:16f0fb5b8d97 54 void utils_configure_endpoint(void *p)
ansond 1:16f0fb5b8d97 55 {
ansond 1:16f0fb5b8d97 56 // our Endpoint
ansond 1:16f0fb5b8d97 57 Connector::Endpoint *ep = (Connector::Endpoint *)p;
ansond 1:16f0fb5b8d97 58
ansond 1:16f0fb5b8d97 59 // NSP/NSDL default configuration - see mbedConnectorInterface.h for definitions...
ansond 1:16f0fb5b8d97 60 logger.log("Endpoint: setting defaults...");
ansond 1:16f0fb5b8d97 61 config.setEndpointNodename(NODE_NAME);
ansond 1:16f0fb5b8d97 62 config.setEndpointType(NSP_ENDPOINT_TYPE);
ansond 1:16f0fb5b8d97 63 config.setRegUpdatePeriod(REG_UPDATE_PERIOD_MS);
ansond 1:16f0fb5b8d97 64 config.setLifetime(REG_LIFETIME_SEC);
ansond 0:1f1f55e73248 65
ansond 1:16f0fb5b8d97 66 // WiFi defaults
ansond 1:16f0fb5b8d97 67 config.setWiFiSSID((char *)WIFI_DEFAULT_SSID); // default: changeme
ansond 1:16f0fb5b8d97 68 config.setWiFiAuthType(WIFI_WPA_PERSONAL); // default: WPA Personal
ansond 11:3d4434825cd7 69 config.setWiFiAuthKey((char *)WIFI_DEFAULT_AUTH_KEY); // default: changeme
ansond 11:3d4434825cd7 70
ansond 11:3d4434825cd7 71 // Default CoAP Connection Type
ansond 11:3d4434825cd7 72 config.setCoAPConnectionType(COAP_UDP); // default CoAP Connection Type
ansond 11:3d4434825cd7 73
ansond 11:3d4434825cd7 74 // Set the default IP Address Type
ansond 11:3d4434825cd7 75 config.setIPAddressType(IP_ADDRESS_TYPE_IPV4); // IPv4 is the default
ansond 8:f950fb1b78c0 76
ansond 8:f950fb1b78c0 77 // 802.15.4 defaults
ansond 8:f950fb1b78c0 78 unsigned char psk[16];
ansond 8:f950fb1b78c0 79 unsigned char psk_identity[2];
ansond 8:f950fb1b78c0 80 memset(psk,0,16);
ansond 8:f950fb1b78c0 81 memset(psk_identity,0,2);
ansond 8:f950fb1b78c0 82 config.setPreSharedKey(psk);
ansond 8:f950fb1b78c0 83 config.setPreSharedKeyIdentity(psk_identity);
ansond 1:16f0fb5b8d97 84
ansond 1:16f0fb5b8d97 85 // Establish default CoAP observation behavior
ansond 1:16f0fb5b8d97 86 config.setImmedateObservationEnabled(true);
ansond 1:16f0fb5b8d97 87
ansond 1:16f0fb5b8d97 88 // Establish default CoAP GET-based observation control behavior
ansond 1:16f0fb5b8d97 89 config.setEnableGETObservationControl(false);
ansond 1:16f0fb5b8d97 90
ansond 1:16f0fb5b8d97 91 // main.cpp can override or change any of the above defaults...
ansond 1:16f0fb5b8d97 92 logger.log("Endpoint: gathering configuration overrides...");
ansond 1:16f0fb5b8d97 93 options = configure_endpoint(config);
ansond 8:f950fb1b78c0 94 ep->setOptions(options);
ansond 8:f950fb1b78c0 95
ansond 1:16f0fb5b8d97 96 // DONE
ansond 1:16f0fb5b8d97 97 logger.log("Endpoint: endpoint configuration completed.");
ansond 1:16f0fb5b8d97 98 }
ansond 1:16f0fb5b8d97 99
ansond 8:f950fb1b78c0 100 // build out the endpoint and its resources
ansond 8:f950fb1b78c0 101 void utils_build_endpoint(void *p)
ansond 1:16f0fb5b8d97 102 {
ansond 1:16f0fb5b8d97 103 if (p != NULL) {
ansond 8:f950fb1b78c0 104 // Build the Endpoint
ansond 8:f950fb1b78c0 105 logger.log("Endpoint: building endpoint and its resources...");
ansond 1:16f0fb5b8d97 106 Connector::Endpoint *ep = (Connector::Endpoint *)p;
ansond 8:f950fb1b78c0 107 ep->build_endpoint();
ansond 1:16f0fb5b8d97 108 }
ansond 10:3f79b5e67c22 109 }
ansond 10:3f79b5e67c22 110
ansond 10:3f79b5e67c22 111 // parse out the CoAP port number from the connection URL
ansond 10:3f79b5e67c22 112 uint16_t extract_port_from_url(char *url,uint16_t default_port)
ansond 10:3f79b5e67c22 113 {
ansond 10:3f79b5e67c22 114 uint16_t port = default_port;
ansond 10:3f79b5e67c22 115
ansond 10:3f79b5e67c22 116 if (url != NULL && strlen(url) > 0) {
ansond 10:3f79b5e67c22 117 char buffer[MAX_CONN_URL_LENGTH+1];
ansond 10:3f79b5e67c22 118 char uri[MAX_CONN_URL_LENGTH+1];
ansond 10:3f79b5e67c22 119 char path[MAX_CONN_URL_LENGTH+1];
ansond 10:3f79b5e67c22 120
ansond 10:3f79b5e67c22 121 // initialize the buffer
ansond 10:3f79b5e67c22 122 memset(buffer,0,MAX_CONN_URL_LENGTH+1);
ansond 10:3f79b5e67c22 123 memset(uri,0,MAX_CONN_URL_LENGTH+1);
ansond 10:3f79b5e67c22 124 memset(path,0,MAX_CONN_URL_LENGTH+1);
ansond 10:3f79b5e67c22 125 int length = strlen(url);
ansond 10:3f79b5e67c22 126
ansond 10:3f79b5e67c22 127 // truncate if needed
ansond 10:3f79b5e67c22 128 if (length >MAX_CONN_URL_LENGTH) length = MAX_CONN_URL_LENGTH;
ansond 10:3f79b5e67c22 129
ansond 10:3f79b5e67c22 130 // make a copy...
ansond 10:3f79b5e67c22 131 memcpy(buffer,url,length);
ansond 10:3f79b5e67c22 132
ansond 10:3f79b5e67c22 133 // remove the forward slashes and colons
ansond 10:3f79b5e67c22 134 for(int i=0;i<length;++i) {
ansond 10:3f79b5e67c22 135 if (buffer[i] == ':') buffer[i] = ' ';
ansond 10:3f79b5e67c22 136 if (buffer[i] == '/') buffer[i] = ' ';
ansond 10:3f79b5e67c22 137 }
ansond 10:3f79b5e67c22 138
ansond 10:3f79b5e67c22 139 // parse
ansond 10:3f79b5e67c22 140 sscanf(buffer,"%s %s %d",uri,path,(int *)&port);
ansond 10:3f79b5e67c22 141 }
ansond 10:3f79b5e67c22 142
ansond 10:3f79b5e67c22 143 // DEBUG
ansond 10:3f79b5e67c22 144 logger.log("Endpoint: CoAP port: %u",port);
ansond 10:3f79b5e67c22 145
ansond 10:3f79b5e67c22 146 // return the port
ansond 10:3f79b5e67c22 147 return port;
ansond 8:f950fb1b78c0 148 }