mbed-os-example-client which can run on GR-PEACH as-is

Committer:
Osamu Nakamura
Date:
Mon Sep 04 17:13:29 2017 +0900
Revision:
1:297185d9bb5e
Parent:
0:c0b64bdd4f07
Update for compiling this program on online compiler

Who changed what in which revision?

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