Example program running mbedClient over UbloxATCellularInterface or OnboardCellularInterface for the C030 platform.

Dependencies:   ublox-cellular-base ublox-at-cellular-interface ublox-ppp-cellular-interface ublox-at-cellular-interface-n2xx ublox-cellular-base-n2xx

Committer:
rob.meades@u-blox.com
Date:
Fri Jun 09 15:28:40 2017 +0100
Revision:
1:9f355da25904
Child:
3:5b8623c17906
Flesh out example.

Who changed what in which revision?

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