This is a simple mbed client example demonstrating, registration of a device with mbed Device Connector and reading and writing values as well as deregistering on different Network Interfaces including Ethernet, WiFi, 6LoWPAN ND and Thread respectively.

Fork of mbed-os-example-client by mbed-os-examples

Committer:
mbed_official
Date:
Thu Jul 27 13:15:07 2017 +0100
Revision:
97:2a5e7d3652f4
Parent:
71:ec259c9b02ea
Changing default radio to Atmel

.
Commit copied from https://github.com/ARMmbed/mbed-os-example-client

Who changed what in which revision?

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