mbed-os-sensor-node

Getting started with mbed Client on mbed OS

Warning

This example application is not supported anymore.

Information

History project:

  • 17/01/2018 - Using mbed-cli the project is compiled using the use-malloc-for-heap feature enabled
  • 24/11/2017 - Added support for uvision5, here instructions
  • 02/10/2017 - First Release

This is the mbed Client example for mbed OS. It demonstrates how to register a device with mbed Device Connector, how to read and write values, and how to deregister. If you are unfamiliar with mbed Device Connector, we recommend that you read the introduction to the data model first.

The application:

  • Connects to network with 6LoWPAN ND connection.
  • Registers with mbed Device Connector.
  • Gives mbed Device Connector access to its resources (read and write).
  • Sends an incremental number to mbed Device Connector.

You can compile this project in three ways:

1. Using the Online compiler. Just clicking here:

/media/uploads/rspelta/image001.png

Information

Learn how to use the Online compiler reading https://docs.mbed.com/docs/mbed-os-handbook/en/latest/dev_tools/online_comp/ page.

2. Using the compiler on your PC

Information

Learn how to use the mbed-cli reading https://docs.mbed.com/docs/mbed-os-handbook/en/latest/dev_tools/cli/ page.
The name of the machine is SILICA_SENSOR_NODE.

3. Exporting to 3rd party tools (IDE)

Information

Learn how to use the mbed-cli reading https://docs.mbed.com/docs/mbed-os-handbook/en/latest/dev_tools/third_party/ page. We have exported the project for you, please read here

Warning

This example requires a Border Router board. For more details please read the Border Router paragraph from this page.

Please read carefully the next pages:

  • What to do before to compile the project: read here. This step is indipendent from the way you compile the project.
Committer:
rspelta
Date:
Mon Oct 02 13:02:22 2017 +0200
Revision:
0:e9b834175c38
First Release

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__