Avnet Silica / Mbed OS mbed-os-sensor-node
Committer:
rspelta
Date:
Wed Jan 17 13:42:55 2018 +0100
Revision:
7:e89dae7682f7
Parent:
0:e9b834175c38
fixed memory heap

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rspelta 0:e9b834175c38 1 /*
rspelta 0:e9b834175c38 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
rspelta 0:e9b834175c38 3 * SPDX-License-Identifier: Apache-2.0
rspelta 0:e9b834175c38 4 * Licensed under the Apache License, Version 2.0 (the License); you may
rspelta 0:e9b834175c38 5 * not use this file except in compliance with the License.
rspelta 0:e9b834175c38 6 * You may obtain a copy of the License at
rspelta 0:e9b834175c38 7 *
rspelta 0:e9b834175c38 8 * http://www.apache.org/licenses/LICENSE-2.0
rspelta 0:e9b834175c38 9 *
rspelta 0:e9b834175c38 10 * Unless required by applicable law or agreed to in writing, software
rspelta 0:e9b834175c38 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
rspelta 0:e9b834175c38 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
rspelta 0:e9b834175c38 13 * See the License for the specific language governing permissions and
rspelta 0:e9b834175c38 14 * limitations under the License.
rspelta 0:e9b834175c38 15 */
rspelta 0:e9b834175c38 16
rspelta 0:e9b834175c38 17 #ifndef __SIMPLECLIENT_H__
rspelta 0:e9b834175c38 18 #define __SIMPLECLIENT_H__
rspelta 0:e9b834175c38 19
rspelta 0:e9b834175c38 20 #include "mbed-client/m2minterfacefactory.h"
rspelta 0:e9b834175c38 21 #include "mbed-client/m2mdevice.h"
rspelta 0:e9b834175c38 22 #include "mbed-client/m2minterfaceobserver.h"
rspelta 0:e9b834175c38 23 #include "mbed-client/m2minterface.h"
rspelta 0:e9b834175c38 24 #include "mbed-client/m2mobject.h"
rspelta 0:e9b834175c38 25 #include "mbed-client/m2mobjectinstance.h"
rspelta 0:e9b834175c38 26 #include "mbed-client/m2mresource.h"
rspelta 0:e9b834175c38 27 #include "mbed-client/m2mconfig.h"
rspelta 0:e9b834175c38 28 #include "mbed-client/m2mblockmessage.h"
rspelta 0:e9b834175c38 29 #include "security.h"
rspelta 0:e9b834175c38 30 #include "mbed.h"
rspelta 0:e9b834175c38 31
rspelta 0:e9b834175c38 32 #define ETHERNET 1
rspelta 0:e9b834175c38 33 #define WIFI 2
rspelta 0:e9b834175c38 34 #define MESH_LOWPAN_ND 3
rspelta 0:e9b834175c38 35 #define MESH_THREAD 4
rspelta 0:e9b834175c38 36 #define ATMEL 5
rspelta 0:e9b834175c38 37 #define MCR20 6
rspelta 0:e9b834175c38 38 #define SPIRIT1 7
rspelta 0:e9b834175c38 39 #define EFR32 8
rspelta 0:e9b834175c38 40
rspelta 0:e9b834175c38 41 #define STRINGIFY(s) #s
rspelta 0:e9b834175c38 42
rspelta 0:e9b834175c38 43 // Check if using mesh networking, define helper
rspelta 0:e9b834175c38 44 #if MBED_CONF_APP_NETWORK_INTERFACE == MESH_LOWPAN_ND
rspelta 0:e9b834175c38 45 #define MESH
rspelta 0:e9b834175c38 46 #elif MBED_CONF_APP_NETWORK_INTERFACE == MESH_THREAD
rspelta 0:e9b834175c38 47 #define MESH
rspelta 0:e9b834175c38 48 #endif
rspelta 0:e9b834175c38 49
rspelta 0:e9b834175c38 50 #if defined (MESH) || (MBED_CONF_LWIP_IPV6_ENABLED==true)
rspelta 0:e9b834175c38 51 // Mesh is always IPV6 - also WiFi and ETH can be IPV6 if IPV6 is enabled
rspelta 0:e9b834175c38 52 M2MInterface::NetworkStack NETWORK_STACK = M2MInterface::LwIP_IPv6;
rspelta 0:e9b834175c38 53 #else
rspelta 0:e9b834175c38 54 // Everything else - we assume it's IPv4
rspelta 0:e9b834175c38 55 M2MInterface::NetworkStack NETWORK_STACK = M2MInterface::LwIP_IPv4;
rspelta 0:e9b834175c38 56 #endif
rspelta 0:e9b834175c38 57
rspelta 0:e9b834175c38 58 //Select binding mode: UDP or TCP -- note - Mesh networking is IPv6 UDP ONLY
rspelta 0:e9b834175c38 59 #ifdef MESH
rspelta 0:e9b834175c38 60 M2MInterface::BindingMode SOCKET_MODE = M2MInterface::UDP;
rspelta 0:e9b834175c38 61 #else
rspelta 0:e9b834175c38 62 // WiFi or Ethernet supports both - TCP by default to avoid
rspelta 0:e9b834175c38 63 // NAT problems, but UDP will also work - IF you configure
rspelta 0:e9b834175c38 64 // your network right.
rspelta 0:e9b834175c38 65 M2MInterface::BindingMode SOCKET_MODE = M2MInterface::TCP;
rspelta 0:e9b834175c38 66 #endif
rspelta 0:e9b834175c38 67
rspelta 0:e9b834175c38 68
rspelta 0:e9b834175c38 69 // MBED_DOMAIN and MBED_ENDPOINT_NAME come
rspelta 0:e9b834175c38 70 // from the security.h file copied from connector.mbed.com
rspelta 0:e9b834175c38 71
rspelta 0:e9b834175c38 72 struct MbedClientDevice {
rspelta 0:e9b834175c38 73 const char* Manufacturer;
rspelta 0:e9b834175c38 74 const char* Type;
rspelta 0:e9b834175c38 75 const char* ModelNumber;
rspelta 0:e9b834175c38 76 const char* SerialNumber;
rspelta 0:e9b834175c38 77 };
rspelta 0:e9b834175c38 78
rspelta 0:e9b834175c38 79 /*
rspelta 0:e9b834175c38 80 * Wrapper for mbed client stack that handles all callbacks, error handling, and
rspelta 0:e9b834175c38 81 * other shenanigans to make the mbed client stack easier to use.
rspelta 0:e9b834175c38 82 *
rspelta 0:e9b834175c38 83 * The end user should only have to care about configuring the parameters at the
rspelta 0:e9b834175c38 84 * top of this file and making sure they add the security.h file correctly.
rspelta 0:e9b834175c38 85 * To add resources you can copy the _TODO__ function and add as many instances as
rspelta 0:e9b834175c38 86 * you want.
rspelta 0:e9b834175c38 87 *
rspelta 0:e9b834175c38 88 */
rspelta 0:e9b834175c38 89 class MbedClient: public M2MInterfaceObserver {
rspelta 0:e9b834175c38 90 public:
rspelta 0:e9b834175c38 91
rspelta 0:e9b834175c38 92 // constructor for MbedClient object, initialize private variables
rspelta 0:e9b834175c38 93 MbedClient(struct MbedClientDevice device) {
rspelta 0:e9b834175c38 94 _interface = NULL;
rspelta 0:e9b834175c38 95 _bootstrapped = false;
rspelta 0:e9b834175c38 96 _error = false;
rspelta 0:e9b834175c38 97 _registered = false;
rspelta 0:e9b834175c38 98 _unregistered = false;
rspelta 0:e9b834175c38 99 _register_security = NULL;
rspelta 0:e9b834175c38 100 _value = 0;
rspelta 0:e9b834175c38 101 _object = NULL;
rspelta 0:e9b834175c38 102 _device = device;
rspelta 0:e9b834175c38 103 }
rspelta 0:e9b834175c38 104
rspelta 0:e9b834175c38 105 // de-constructor for MbedClient object, you can ignore this
rspelta 0:e9b834175c38 106 ~MbedClient() {
rspelta 0:e9b834175c38 107 if(_interface) {
rspelta 0:e9b834175c38 108 delete _interface;
rspelta 0:e9b834175c38 109 }
rspelta 0:e9b834175c38 110 if(_register_security){
rspelta 0:e9b834175c38 111 delete _register_security;
rspelta 0:e9b834175c38 112 }
rspelta 0:e9b834175c38 113 }
rspelta 0:e9b834175c38 114
rspelta 0:e9b834175c38 115 // debug printf function
rspelta 0:e9b834175c38 116 void trace_printer(const char* str) {
rspelta 0:e9b834175c38 117 printf("\r\n%s\r\n", str);
rspelta 0:e9b834175c38 118 }
rspelta 0:e9b834175c38 119
rspelta 0:e9b834175c38 120 /*
rspelta 0:e9b834175c38 121 * Creates M2MInterface using which endpoint can
rspelta 0:e9b834175c38 122 * setup its name, resource type, life time, connection mode,
rspelta 0:e9b834175c38 123 * Currently only LwIPv4 is supported.
rspelta 0:e9b834175c38 124 */
rspelta 0:e9b834175c38 125 void create_interface(const char *server_address,
rspelta 0:e9b834175c38 126 void *handler=NULL) {
rspelta 0:e9b834175c38 127 // Randomizing listening port for Certificate mode connectivity
rspelta 0:e9b834175c38 128 _server_address = server_address;
rspelta 0:e9b834175c38 129 uint16_t port = 0; // Network interface will randomize with port 0
rspelta 0:e9b834175c38 130
rspelta 0:e9b834175c38 131 // create mDS interface object, this is the base object everything else attaches to
rspelta 0:e9b834175c38 132 _interface = M2MInterfaceFactory::create_interface(*this,
rspelta 0:e9b834175c38 133 MBED_ENDPOINT_NAME, // endpoint name string
rspelta 0:e9b834175c38 134 "test", // endpoint type string
rspelta 0:e9b834175c38 135 100, // lifetime
rspelta 0:e9b834175c38 136 port, // listen port
rspelta 0:e9b834175c38 137 MBED_DOMAIN, // domain string
rspelta 0:e9b834175c38 138 SOCKET_MODE, // binding mode
rspelta 0:e9b834175c38 139 NETWORK_STACK, // network stack
rspelta 0:e9b834175c38 140 ""); // context address string
rspelta 0:e9b834175c38 141 const char *binding_mode = (SOCKET_MODE == M2MInterface::UDP) ? "UDP" : "TCP";
rspelta 0:e9b834175c38 142 printf("\r\nSOCKET_MODE : %s\r\n", binding_mode);
rspelta 0:e9b834175c38 143 printf("Connecting to %s\r\n", server_address);
rspelta 0:e9b834175c38 144
rspelta 0:e9b834175c38 145 if(_interface) {
rspelta 0:e9b834175c38 146 _interface->set_platform_network_handler(handler);
rspelta 0:e9b834175c38 147 }
rspelta 0:e9b834175c38 148
rspelta 0:e9b834175c38 149 }
rspelta 0:e9b834175c38 150
rspelta 0:e9b834175c38 151 /*
rspelta 0:e9b834175c38 152 * check private variable to see if the registration was sucessful or not
rspelta 0:e9b834175c38 153 */
rspelta 0:e9b834175c38 154 bool register_successful() {
rspelta 0:e9b834175c38 155 return _registered;
rspelta 0:e9b834175c38 156 }
rspelta 0:e9b834175c38 157
rspelta 0:e9b834175c38 158 /*
rspelta 0:e9b834175c38 159 * check private variable to see if un-registration was sucessful or not
rspelta 0:e9b834175c38 160 */
rspelta 0:e9b834175c38 161 bool unregister_successful() {
rspelta 0:e9b834175c38 162 return _unregistered;
rspelta 0:e9b834175c38 163 }
rspelta 0:e9b834175c38 164
rspelta 0:e9b834175c38 165 /*
rspelta 0:e9b834175c38 166 * Creates register server object with mbed device server address and other parameters
rspelta 0:e9b834175c38 167 * required for client to connect to mbed device server.
rspelta 0:e9b834175c38 168 */
rspelta 0:e9b834175c38 169 M2MSecurity* create_register_object() {
rspelta 0:e9b834175c38 170 // create security object using the interface factory.
rspelta 0:e9b834175c38 171 // this will generate a security ObjectID and ObjectInstance
rspelta 0:e9b834175c38 172 M2MSecurity *security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
rspelta 0:e9b834175c38 173
rspelta 0:e9b834175c38 174 // make sure security ObjectID/ObjectInstance was created successfully
rspelta 0:e9b834175c38 175 if(security) {
rspelta 0:e9b834175c38 176 // Add ResourceID's and values to the security ObjectID/ObjectInstance
rspelta 0:e9b834175c38 177 security->set_resource_value(M2MSecurity::M2MServerUri, _server_address);
rspelta 0:e9b834175c38 178 security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::Certificate);
rspelta 0:e9b834175c38 179 security->set_resource_value(M2MSecurity::ServerPublicKey, SERVER_CERT, sizeof(SERVER_CERT) - 1);
rspelta 0:e9b834175c38 180 security->set_resource_value(M2MSecurity::PublicKey, CERT, sizeof(CERT) - 1);
rspelta 0:e9b834175c38 181 security->set_resource_value(M2MSecurity::Secretkey, KEY, sizeof(KEY) - 1);
rspelta 0:e9b834175c38 182 }
rspelta 0:e9b834175c38 183 return security;
rspelta 0:e9b834175c38 184 }
rspelta 0:e9b834175c38 185
rspelta 0:e9b834175c38 186 /*
rspelta 0:e9b834175c38 187 * Creates device object which contains mandatory resources linked with
rspelta 0:e9b834175c38 188 * device endpoint.
rspelta 0:e9b834175c38 189 */
rspelta 0:e9b834175c38 190 M2MDevice* create_device_object() {
rspelta 0:e9b834175c38 191 // create device objectID/ObjectInstance
rspelta 0:e9b834175c38 192 M2MDevice *device = M2MInterfaceFactory::create_device();
rspelta 0:e9b834175c38 193 // make sure device object was created successfully
rspelta 0:e9b834175c38 194 if(device) {
rspelta 0:e9b834175c38 195 // add resourceID's to device objectID/ObjectInstance
rspelta 0:e9b834175c38 196 device->create_resource(M2MDevice::Manufacturer, _device.Manufacturer);
rspelta 0:e9b834175c38 197 device->create_resource(M2MDevice::DeviceType, _device.Type);
rspelta 0:e9b834175c38 198 device->create_resource(M2MDevice::ModelNumber, _device.ModelNumber);
rspelta 0:e9b834175c38 199 device->create_resource(M2MDevice::SerialNumber, _device.SerialNumber);
rspelta 0:e9b834175c38 200 }
rspelta 0:e9b834175c38 201 return device;
rspelta 0:e9b834175c38 202 }
rspelta 0:e9b834175c38 203
rspelta 0:e9b834175c38 204 /*
rspelta 0:e9b834175c38 205 * register an object
rspelta 0:e9b834175c38 206 */
rspelta 0:e9b834175c38 207 void test_register(M2MSecurity *register_object, M2MObjectList object_list){
rspelta 0:e9b834175c38 208 if(_interface) {
rspelta 0:e9b834175c38 209 // Register function
rspelta 0:e9b834175c38 210 _interface->register_object(register_object, object_list);
rspelta 0:e9b834175c38 211 }
rspelta 0:e9b834175c38 212 }
rspelta 0:e9b834175c38 213
rspelta 0:e9b834175c38 214 /*
rspelta 0:e9b834175c38 215 * unregister all objects
rspelta 0:e9b834175c38 216 */
rspelta 0:e9b834175c38 217 void test_unregister() {
rspelta 0:e9b834175c38 218 if(_interface) {
rspelta 0:e9b834175c38 219 // Unregister function
rspelta 0:e9b834175c38 220 _interface->unregister_object(NULL); // NULL will unregister all objects
rspelta 0:e9b834175c38 221 }
rspelta 0:e9b834175c38 222 }
rspelta 0:e9b834175c38 223
rspelta 0:e9b834175c38 224 //Callback from mbed client stack when the bootstrap
rspelta 0:e9b834175c38 225 // is successful, it returns the mbed Device Server object
rspelta 0:e9b834175c38 226 // which will be used for registering the resources to
rspelta 0:e9b834175c38 227 // mbed Device server.
rspelta 0:e9b834175c38 228 void bootstrap_done(M2MSecurity *server_object){
rspelta 0:e9b834175c38 229 if(server_object) {
rspelta 0:e9b834175c38 230 _bootstrapped = true;
rspelta 0:e9b834175c38 231 _error = false;
rspelta 0:e9b834175c38 232 trace_printer("Bootstrapped");
rspelta 0:e9b834175c38 233 }
rspelta 0:e9b834175c38 234 }
rspelta 0:e9b834175c38 235
rspelta 0:e9b834175c38 236 //Callback from mbed client stack when the registration
rspelta 0:e9b834175c38 237 // is successful, it returns the mbed Device Server object
rspelta 0:e9b834175c38 238 // to which the resources are registered and registered objects.
rspelta 0:e9b834175c38 239 void object_registered(M2MSecurity */*security_object*/, const M2MServer &/*server_object*/){
rspelta 0:e9b834175c38 240 _registered = true;
rspelta 0:e9b834175c38 241 _unregistered = false;
rspelta 0:e9b834175c38 242 trace_printer("Registered object successfully!");
rspelta 0:e9b834175c38 243 }
rspelta 0:e9b834175c38 244
rspelta 0:e9b834175c38 245 //Callback from mbed client stack when the unregistration
rspelta 0:e9b834175c38 246 // is successful, it returns the mbed Device Server object
rspelta 0:e9b834175c38 247 // to which the resources were unregistered.
rspelta 0:e9b834175c38 248 void object_unregistered(M2MSecurity */*server_object*/){
rspelta 0:e9b834175c38 249 trace_printer("Unregistered Object Successfully");
rspelta 0:e9b834175c38 250 _unregistered = true;
rspelta 0:e9b834175c38 251 _registered = false;
rspelta 0:e9b834175c38 252 }
rspelta 0:e9b834175c38 253
rspelta 0:e9b834175c38 254 /*
rspelta 0:e9b834175c38 255 * Callback from mbed client stack when registration is updated
rspelta 0:e9b834175c38 256 */
rspelta 0:e9b834175c38 257 void registration_updated(M2MSecurity */*security_object*/, const M2MServer & /*server_object*/){
rspelta 0:e9b834175c38 258 /* The registration is updated automatically and frequently by the
rspelta 0:e9b834175c38 259 * mbed client stack. This print statement is turned off because it
rspelta 0:e9b834175c38 260 * tends to happen alot.
rspelta 0:e9b834175c38 261 */
rspelta 0:e9b834175c38 262 //trace_printer("\r\nRegistration Updated\r\n");
rspelta 0:e9b834175c38 263 }
rspelta 0:e9b834175c38 264
rspelta 0:e9b834175c38 265 // Callback from mbed client stack if any error is encountered
rspelta 0:e9b834175c38 266 // during any of the LWM2M operations. Error type is passed in
rspelta 0:e9b834175c38 267 // the callback.
rspelta 0:e9b834175c38 268 void error(M2MInterface::Error error){
rspelta 0:e9b834175c38 269 _error = true;
rspelta 0:e9b834175c38 270 switch(error){
rspelta 0:e9b834175c38 271 case M2MInterface::AlreadyExists:
rspelta 0:e9b834175c38 272 trace_printer("[ERROR:] M2MInterface::AlreadyExist");
rspelta 0:e9b834175c38 273 break;
rspelta 0:e9b834175c38 274 case M2MInterface::BootstrapFailed:
rspelta 0:e9b834175c38 275 trace_printer("[ERROR:] M2MInterface::BootstrapFailed");
rspelta 0:e9b834175c38 276 break;
rspelta 0:e9b834175c38 277 case M2MInterface::InvalidParameters:
rspelta 0:e9b834175c38 278 trace_printer("[ERROR:] M2MInterface::InvalidParameters");
rspelta 0:e9b834175c38 279 break;
rspelta 0:e9b834175c38 280 case M2MInterface::NotRegistered:
rspelta 0:e9b834175c38 281 trace_printer("[ERROR:] M2MInterface::NotRegistered");
rspelta 0:e9b834175c38 282 break;
rspelta 0:e9b834175c38 283 case M2MInterface::Timeout:
rspelta 0:e9b834175c38 284 trace_printer("[ERROR:] M2MInterface::Timeout");
rspelta 0:e9b834175c38 285 break;
rspelta 0:e9b834175c38 286 case M2MInterface::NetworkError:
rspelta 0:e9b834175c38 287 trace_printer("[ERROR:] M2MInterface::NetworkError");
rspelta 0:e9b834175c38 288 break;
rspelta 0:e9b834175c38 289 case M2MInterface::ResponseParseFailed:
rspelta 0:e9b834175c38 290 trace_printer("[ERROR:] M2MInterface::ResponseParseFailed");
rspelta 0:e9b834175c38 291 break;
rspelta 0:e9b834175c38 292 case M2MInterface::UnknownError:
rspelta 0:e9b834175c38 293 trace_printer("[ERROR:] M2MInterface::UnknownError");
rspelta 0:e9b834175c38 294 break;
rspelta 0:e9b834175c38 295 case M2MInterface::MemoryFail:
rspelta 0:e9b834175c38 296 trace_printer("[ERROR:] M2MInterface::MemoryFail");
rspelta 0:e9b834175c38 297 break;
rspelta 0:e9b834175c38 298 case M2MInterface::NotAllowed:
rspelta 0:e9b834175c38 299 trace_printer("[ERROR:] M2MInterface::NotAllowed");
rspelta 0:e9b834175c38 300 break;
rspelta 0:e9b834175c38 301 case M2MInterface::SecureConnectionFailed:
rspelta 0:e9b834175c38 302 trace_printer("[ERROR:] M2MInterface::SecureConnectionFailed");
rspelta 0:e9b834175c38 303 break;
rspelta 0:e9b834175c38 304 case M2MInterface::DnsResolvingFailed:
rspelta 0:e9b834175c38 305 trace_printer("[ERROR:] M2MInterface::DnsResolvingFailed");
rspelta 0:e9b834175c38 306 break;
rspelta 0:e9b834175c38 307
rspelta 0:e9b834175c38 308 default:
rspelta 0:e9b834175c38 309 break;
rspelta 0:e9b834175c38 310 }
rspelta 0:e9b834175c38 311 }
rspelta 0:e9b834175c38 312
rspelta 0:e9b834175c38 313 /* Callback from mbed client stack if any value has changed
rspelta 0:e9b834175c38 314 * during PUT operation. Object and its type is passed in
rspelta 0:e9b834175c38 315 * the callback.
rspelta 0:e9b834175c38 316 * BaseType enum from m2mbase.h
rspelta 0:e9b834175c38 317 * Object = 0x0, Resource = 0x1, ObjectInstance = 0x2, ResourceInstance = 0x3
rspelta 0:e9b834175c38 318 */
rspelta 0:e9b834175c38 319 void value_updated(M2MBase *base, M2MBase::BaseType type) {
rspelta 0:e9b834175c38 320 printf("\r\nPUT Request Received!");
rspelta 0:e9b834175c38 321 printf("\r\nName :'%s', \r\nPath : '%s', \r\nType : '%d' (0 for Object, 1 for Resource), \r\nType : '%s'\r\n",
rspelta 0:e9b834175c38 322 base->name(),
rspelta 0:e9b834175c38 323 base->uri_path(),
rspelta 0:e9b834175c38 324 type,
rspelta 0:e9b834175c38 325 base->resource_type()
rspelta 0:e9b834175c38 326 );
rspelta 0:e9b834175c38 327 }
rspelta 0:e9b834175c38 328
rspelta 0:e9b834175c38 329 /*
rspelta 0:e9b834175c38 330 * update the registration period
rspelta 0:e9b834175c38 331 */
rspelta 0:e9b834175c38 332 void test_update_register() {
rspelta 0:e9b834175c38 333 if (_registered) {
rspelta 0:e9b834175c38 334 _interface->update_registration(_register_security, 100);
rspelta 0:e9b834175c38 335 }
rspelta 0:e9b834175c38 336 }
rspelta 0:e9b834175c38 337
rspelta 0:e9b834175c38 338 /*
rspelta 0:e9b834175c38 339 * manually configure the security object private variable
rspelta 0:e9b834175c38 340 */
rspelta 0:e9b834175c38 341 void set_register_object(M2MSecurity *register_object) {
rspelta 0:e9b834175c38 342 if (_register_security == NULL) {
rspelta 0:e9b834175c38 343 _register_security = register_object;
rspelta 0:e9b834175c38 344 }
rspelta 0:e9b834175c38 345 }
rspelta 0:e9b834175c38 346
rspelta 0:e9b834175c38 347 private:
rspelta 0:e9b834175c38 348
rspelta 0:e9b834175c38 349 /*
rspelta 0:e9b834175c38 350 * Private variables used in class
rspelta 0:e9b834175c38 351 */
rspelta 0:e9b834175c38 352 M2MInterface *_interface;
rspelta 0:e9b834175c38 353 M2MSecurity *_register_security;
rspelta 0:e9b834175c38 354 M2MObject *_object;
rspelta 0:e9b834175c38 355 volatile bool _bootstrapped;
rspelta 0:e9b834175c38 356 volatile bool _error;
rspelta 0:e9b834175c38 357 volatile bool _registered;
rspelta 0:e9b834175c38 358 volatile bool _unregistered;
rspelta 0:e9b834175c38 359 int _value;
rspelta 0:e9b834175c38 360 struct MbedClientDevice _device;
rspelta 0:e9b834175c38 361 String _server_address;
rspelta 0:e9b834175c38 362 };
rspelta 0:e9b834175c38 363
rspelta 0:e9b834175c38 364 #endif // __SIMPLECLIENT_H__