FRDM K64F Metronome

Committer:
ram54288
Date:
Sun May 14 18:37:05 2017 +0000
Revision:
0:dbad57390bd1
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ram54288 0:dbad57390bd1 1 /*
ram54288 0:dbad57390bd1 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
ram54288 0:dbad57390bd1 3 * SPDX-License-Identifier: Apache-2.0
ram54288 0:dbad57390bd1 4 * Licensed under the Apache License, Version 2.0 (the License); you may
ram54288 0:dbad57390bd1 5 * not use this file except in compliance with the License.
ram54288 0:dbad57390bd1 6 * You may obtain a copy of the License at
ram54288 0:dbad57390bd1 7 *
ram54288 0:dbad57390bd1 8 * http://www.apache.org/licenses/LICENSE-2.0
ram54288 0:dbad57390bd1 9 *
ram54288 0:dbad57390bd1 10 * Unless required by applicable law or agreed to in writing, software
ram54288 0:dbad57390bd1 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
ram54288 0:dbad57390bd1 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ram54288 0:dbad57390bd1 13 * See the License for the specific language governing permissions and
ram54288 0:dbad57390bd1 14 * limitations under the License.
ram54288 0:dbad57390bd1 15 */
ram54288 0:dbad57390bd1 16 #include <unistd.h>
ram54288 0:dbad57390bd1 17 #include <malloc.h>
ram54288 0:dbad57390bd1 18 #include <stdio.h>
ram54288 0:dbad57390bd1 19 #include <stdarg.h>
ram54288 0:dbad57390bd1 20 #include <pthread.h>
ram54288 0:dbad57390bd1 21 #include <signal.h> /* For SIGIGN and SIGINT */
ram54288 0:dbad57390bd1 22 #include "mbed-client/m2minterfacefactory.h"
ram54288 0:dbad57390bd1 23 #include "mbed-client/m2mdevice.h"
ram54288 0:dbad57390bd1 24 #include "mbed-client/m2minterfaceobserver.h"
ram54288 0:dbad57390bd1 25 #include "mbed-client/m2minterface.h"
ram54288 0:dbad57390bd1 26 #include "mbed-client/m2mobjectinstance.h"
ram54288 0:dbad57390bd1 27 #include "mbed-client/m2mresource.h"
ram54288 0:dbad57390bd1 28
ram54288 0:dbad57390bd1 29 #include "mbed-trace/mbed_trace.h"
ram54288 0:dbad57390bd1 30
ram54288 0:dbad57390bd1 31 const String &BOOTSTRAP_SERVER_ADDRESS = "coap://10.45.3.10:5693";
ram54288 0:dbad57390bd1 32 const String &M2M_SERVER_ADDRESS = "coap://10.45.3.10:5683";
ram54288 0:dbad57390bd1 33 const String &MANUFACTURER = "manufacturer";
ram54288 0:dbad57390bd1 34 const String &TYPE = "type";
ram54288 0:dbad57390bd1 35 const String &MODEL_NUMBER = "2015";
ram54288 0:dbad57390bd1 36 const String &SERIAL_NUMBER = "12345";
ram54288 0:dbad57390bd1 37
ram54288 0:dbad57390bd1 38 const uint8_t STATIC_VALUE[] = "Open Mobile Alliance";
ram54288 0:dbad57390bd1 39
ram54288 0:dbad57390bd1 40 static void ctrl_c_handle_function(void);
ram54288 0:dbad57390bd1 41 void close_function();
ram54288 0:dbad57390bd1 42 typedef void (*signalhandler_t)(int); /* Function pointer type for ctrl-c */
ram54288 0:dbad57390bd1 43
ram54288 0:dbad57390bd1 44 class MbedClient: public M2MInterfaceObserver {
ram54288 0:dbad57390bd1 45 public:
ram54288 0:dbad57390bd1 46 MbedClient(){
ram54288 0:dbad57390bd1 47 _security = NULL;
ram54288 0:dbad57390bd1 48 _interface = NULL;
ram54288 0:dbad57390bd1 49 _register_security = NULL;
ram54288 0:dbad57390bd1 50 _device = NULL;
ram54288 0:dbad57390bd1 51 _object = NULL;
ram54288 0:dbad57390bd1 52 _bootstrapped = false;
ram54288 0:dbad57390bd1 53 _error = false;
ram54288 0:dbad57390bd1 54 _registered = false;
ram54288 0:dbad57390bd1 55 _unregistered = false;
ram54288 0:dbad57390bd1 56 _registration_updated = false;
ram54288 0:dbad57390bd1 57 _value = 0;
ram54288 0:dbad57390bd1 58 }
ram54288 0:dbad57390bd1 59
ram54288 0:dbad57390bd1 60 ~MbedClient() {
ram54288 0:dbad57390bd1 61 if(_security) {
ram54288 0:dbad57390bd1 62 delete _security;
ram54288 0:dbad57390bd1 63 }
ram54288 0:dbad57390bd1 64 if(_register_security){
ram54288 0:dbad57390bd1 65 delete _register_security;
ram54288 0:dbad57390bd1 66 }
ram54288 0:dbad57390bd1 67 if(_device) {
ram54288 0:dbad57390bd1 68 M2MDevice::delete_instance();
ram54288 0:dbad57390bd1 69 _device = NULL;
ram54288 0:dbad57390bd1 70 }
ram54288 0:dbad57390bd1 71 if(_object) {
ram54288 0:dbad57390bd1 72 delete _object;
ram54288 0:dbad57390bd1 73 }
ram54288 0:dbad57390bd1 74 if(_interface) {
ram54288 0:dbad57390bd1 75 delete _interface;
ram54288 0:dbad57390bd1 76 }
ram54288 0:dbad57390bd1 77 }
ram54288 0:dbad57390bd1 78
ram54288 0:dbad57390bd1 79 bool create_interface() {
ram54288 0:dbad57390bd1 80 _interface = M2MInterfaceFactory::create_interface(*this,
ram54288 0:dbad57390bd1 81 "linux-endpoint",
ram54288 0:dbad57390bd1 82 "test",
ram54288 0:dbad57390bd1 83 60,
ram54288 0:dbad57390bd1 84 5683,
ram54288 0:dbad57390bd1 85 "",
ram54288 0:dbad57390bd1 86 M2MInterface::UDP,
ram54288 0:dbad57390bd1 87 M2MInterface::LwIP_IPv4,
ram54288 0:dbad57390bd1 88 "");
ram54288 0:dbad57390bd1 89 printf("Endpoint Name : linux-endpoint\n");
ram54288 0:dbad57390bd1 90 return (_interface == NULL) ? false : true;
ram54288 0:dbad57390bd1 91 }
ram54288 0:dbad57390bd1 92
ram54288 0:dbad57390bd1 93 bool bootstrap_successful() {
ram54288 0:dbad57390bd1 94 while(!_bootstrapped && !_error) {
ram54288 0:dbad57390bd1 95 sleep(1);
ram54288 0:dbad57390bd1 96 }
ram54288 0:dbad57390bd1 97 return _bootstrapped;
ram54288 0:dbad57390bd1 98 }
ram54288 0:dbad57390bd1 99
ram54288 0:dbad57390bd1 100 bool register_successful() {
ram54288 0:dbad57390bd1 101 while(!_registered && !_error) {
ram54288 0:dbad57390bd1 102 sleep(1);
ram54288 0:dbad57390bd1 103 }
ram54288 0:dbad57390bd1 104 return _registered;
ram54288 0:dbad57390bd1 105 }
ram54288 0:dbad57390bd1 106
ram54288 0:dbad57390bd1 107 bool unregister_successful() {
ram54288 0:dbad57390bd1 108 while(!_unregistered && !_error) {
ram54288 0:dbad57390bd1 109 sleep(1);
ram54288 0:dbad57390bd1 110 }
ram54288 0:dbad57390bd1 111 return _unregistered;
ram54288 0:dbad57390bd1 112 }
ram54288 0:dbad57390bd1 113
ram54288 0:dbad57390bd1 114 bool registration_update_successful() {
ram54288 0:dbad57390bd1 115 while(!_registration_updated && !_error) {
ram54288 0:dbad57390bd1 116 }
ram54288 0:dbad57390bd1 117 return _registration_updated;
ram54288 0:dbad57390bd1 118 }
ram54288 0:dbad57390bd1 119
ram54288 0:dbad57390bd1 120 bool create_bootstrap_object() {
ram54288 0:dbad57390bd1 121 bool success = false;
ram54288 0:dbad57390bd1 122 if(_security) {
ram54288 0:dbad57390bd1 123 delete _security;
ram54288 0:dbad57390bd1 124 }
ram54288 0:dbad57390bd1 125 _security = M2MInterfaceFactory::create_security(M2MSecurity::Bootstrap);
ram54288 0:dbad57390bd1 126 if(_security) {
ram54288 0:dbad57390bd1 127 if(_security->set_resource_value(M2MSecurity::M2MServerUri, BOOTSTRAP_SERVER_ADDRESS) &&
ram54288 0:dbad57390bd1 128 _security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity)) {
ram54288 0:dbad57390bd1 129 success = true;
ram54288 0:dbad57390bd1 130 /* Not used now because there is no TLS or DTLS implementation available for stack.
ram54288 0:dbad57390bd1 131 security->set_resource_value(M2MSecurity::ServerPublicKey,certificates->certificate_ptr[0],certificates->certificate_len[0]);
ram54288 0:dbad57390bd1 132 security->set_resource_value(M2MSecurity::PublicKey,certificates->certificate_ptr[1],certificates->certificate_len[1]);
ram54288 0:dbad57390bd1 133 security->set_resource_value(M2MSecurity::Secretkey,certificates->own_private_key_ptr,certificates->own_private_key_len);
ram54288 0:dbad57390bd1 134 */
ram54288 0:dbad57390bd1 135 }
ram54288 0:dbad57390bd1 136 }
ram54288 0:dbad57390bd1 137 printf("Bootstrap Server Address %s\n", BOOTSTRAP_SERVER_ADDRESS.c_str());
ram54288 0:dbad57390bd1 138 return success;
ram54288 0:dbad57390bd1 139 }
ram54288 0:dbad57390bd1 140
ram54288 0:dbad57390bd1 141 bool create_register_object() {
ram54288 0:dbad57390bd1 142 bool success = false;
ram54288 0:dbad57390bd1 143 _register_security = M2MInterfaceFactory::create_security(M2MSecurity::M2MServer);
ram54288 0:dbad57390bd1 144 if(_register_security) {
ram54288 0:dbad57390bd1 145 if(_register_security->set_resource_value(M2MSecurity::M2MServerUri, M2M_SERVER_ADDRESS) &&
ram54288 0:dbad57390bd1 146 _register_security->set_resource_value(M2MSecurity::SecurityMode, M2MSecurity::NoSecurity)) {
ram54288 0:dbad57390bd1 147 success = true;
ram54288 0:dbad57390bd1 148 /* Not used now because there is no TLS or DTLS implementation available for stack.
ram54288 0:dbad57390bd1 149 security->set_resource_value(M2MSecurity::ServerPublicKey,certificates->certificate_ptr[0],certificates->certificate_len[0]);
ram54288 0:dbad57390bd1 150 security->set_resource_value(M2MSecurity::PublicKey,certificates->certificate_ptr[1],certificates->certificate_len[1]);
ram54288 0:dbad57390bd1 151 security->set_resource_value(M2MSecurity::Secretkey,certificates->own_private_key_ptr,certificates->own_private_key_len);
ram54288 0:dbad57390bd1 152 */
ram54288 0:dbad57390bd1 153 }
ram54288 0:dbad57390bd1 154 }
ram54288 0:dbad57390bd1 155 return success;
ram54288 0:dbad57390bd1 156 }
ram54288 0:dbad57390bd1 157
ram54288 0:dbad57390bd1 158 void test_bootstrap() {
ram54288 0:dbad57390bd1 159 _interface->bootstrap(_security);
ram54288 0:dbad57390bd1 160 }
ram54288 0:dbad57390bd1 161
ram54288 0:dbad57390bd1 162 bool create_device_object() {
ram54288 0:dbad57390bd1 163 bool success = false;
ram54288 0:dbad57390bd1 164 _device = M2MInterfaceFactory::create_device();
ram54288 0:dbad57390bd1 165 if(_device) {
ram54288 0:dbad57390bd1 166 _device->object_instance()->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
ram54288 0:dbad57390bd1 167 if(_device->create_resource(M2MDevice::Manufacturer,MANUFACTURER) &&
ram54288 0:dbad57390bd1 168 _device->create_resource(M2MDevice::DeviceType,TYPE) &&
ram54288 0:dbad57390bd1 169 _device->create_resource(M2MDevice::ModelNumber,MODEL_NUMBER) &&
ram54288 0:dbad57390bd1 170 _device->create_resource(M2MDevice::SerialNumber,SERIAL_NUMBER)) {
ram54288 0:dbad57390bd1 171 success = true;
ram54288 0:dbad57390bd1 172 }
ram54288 0:dbad57390bd1 173 }
ram54288 0:dbad57390bd1 174 return success;
ram54288 0:dbad57390bd1 175 }
ram54288 0:dbad57390bd1 176
ram54288 0:dbad57390bd1 177 void execute_function(void *argument) {
ram54288 0:dbad57390bd1 178 if(argument) {
ram54288 0:dbad57390bd1 179 char* arguments = (char*)argument;
ram54288 0:dbad57390bd1 180 printf("Received %s!!\n", arguments);
ram54288 0:dbad57390bd1 181 }
ram54288 0:dbad57390bd1 182 printf("I am executed !!\n");
ram54288 0:dbad57390bd1 183 }
ram54288 0:dbad57390bd1 184
ram54288 0:dbad57390bd1 185 bool create_generic_object() {
ram54288 0:dbad57390bd1 186 bool success = false;
ram54288 0:dbad57390bd1 187 _object = M2MInterfaceFactory::create_object("10");
ram54288 0:dbad57390bd1 188 if(_object) {
ram54288 0:dbad57390bd1 189 _object->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
ram54288 0:dbad57390bd1 190 M2MObjectInstance* inst = _object->create_object_instance();
ram54288 0:dbad57390bd1 191 if(inst) {
ram54288 0:dbad57390bd1 192 inst->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
ram54288 0:dbad57390bd1 193 inst->set_observable(false);
ram54288 0:dbad57390bd1 194 char buffer[20];
ram54288 0:dbad57390bd1 195 int size = sprintf(buffer,"%d",_value);
ram54288 0:dbad57390bd1 196
ram54288 0:dbad57390bd1 197 inst->create_static_resource("0",
ram54288 0:dbad57390bd1 198 "ResourceTest",
ram54288 0:dbad57390bd1 199 M2MResourceInstance::INTEGER,
ram54288 0:dbad57390bd1 200 STATIC_VALUE,
ram54288 0:dbad57390bd1 201 sizeof(STATIC_VALUE)-1);
ram54288 0:dbad57390bd1 202
ram54288 0:dbad57390bd1 203 M2MResourceInstance* instance = inst->create_dynamic_resource_instance("1",
ram54288 0:dbad57390bd1 204 "ResourceTest",
ram54288 0:dbad57390bd1 205 M2MResourceInstance::INTEGER,
ram54288 0:dbad57390bd1 206 true,0);
ram54288 0:dbad57390bd1 207
ram54288 0:dbad57390bd1 208 if(instance) {
ram54288 0:dbad57390bd1 209 instance->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
ram54288 0:dbad57390bd1 210 instance->set_value((const uint8_t*)buffer,
ram54288 0:dbad57390bd1 211 (const uint32_t)size);
ram54288 0:dbad57390bd1 212 instance->set_execute_function(execute_callback(this,&MbedClient::execute_function));
ram54288 0:dbad57390bd1 213 _value++;
ram54288 0:dbad57390bd1 214 }
ram54288 0:dbad57390bd1 215 }
ram54288 0:dbad57390bd1 216 }
ram54288 0:dbad57390bd1 217 return success;
ram54288 0:dbad57390bd1 218 }
ram54288 0:dbad57390bd1 219
ram54288 0:dbad57390bd1 220 void update_resource() {
ram54288 0:dbad57390bd1 221 if(_object) {
ram54288 0:dbad57390bd1 222 M2MObjectInstance* inst = _object->object_instance();
ram54288 0:dbad57390bd1 223 if(inst) {
ram54288 0:dbad57390bd1 224 M2MResource* res = inst->resource("1");
ram54288 0:dbad57390bd1 225 res = inst->resource("1");
ram54288 0:dbad57390bd1 226 if(res) {
ram54288 0:dbad57390bd1 227 M2MResourceInstance *res_inst = res->resource_instance(0);
ram54288 0:dbad57390bd1 228 if(res_inst) {
ram54288 0:dbad57390bd1 229 char buffer1[20];
ram54288 0:dbad57390bd1 230 int size1 = sprintf(buffer1,"%d",_value);
ram54288 0:dbad57390bd1 231 res_inst->set_value((const uint8_t*)buffer1,
ram54288 0:dbad57390bd1 232 (const uint32_t)size1);
ram54288 0:dbad57390bd1 233 _value++;
ram54288 0:dbad57390bd1 234 }
ram54288 0:dbad57390bd1 235 }
ram54288 0:dbad57390bd1 236 }
ram54288 0:dbad57390bd1 237 }
ram54288 0:dbad57390bd1 238 }
ram54288 0:dbad57390bd1 239
ram54288 0:dbad57390bd1 240 void test_register(){
ram54288 0:dbad57390bd1 241 M2MObjectList object_list;
ram54288 0:dbad57390bd1 242 object_list.push_back(_device);
ram54288 0:dbad57390bd1 243 object_list.push_back(_object);
ram54288 0:dbad57390bd1 244
ram54288 0:dbad57390bd1 245 _interface->register_object(_register_security,object_list);
ram54288 0:dbad57390bd1 246 }
ram54288 0:dbad57390bd1 247
ram54288 0:dbad57390bd1 248 void test_update_register() {
ram54288 0:dbad57390bd1 249 uint32_t updated_lifetime = 20;
ram54288 0:dbad57390bd1 250 _registered = false;
ram54288 0:dbad57390bd1 251 _unregistered = false;
ram54288 0:dbad57390bd1 252 _interface->update_registration(_register_security,updated_lifetime);
ram54288 0:dbad57390bd1 253 }
ram54288 0:dbad57390bd1 254
ram54288 0:dbad57390bd1 255 void test_unregister() {
ram54288 0:dbad57390bd1 256 _interface->unregister_object(NULL);
ram54288 0:dbad57390bd1 257 }
ram54288 0:dbad57390bd1 258
ram54288 0:dbad57390bd1 259 void bootstrap_done(M2MSecurity *server_object){
ram54288 0:dbad57390bd1 260 if(server_object) {
ram54288 0:dbad57390bd1 261 _register_security = server_object;
ram54288 0:dbad57390bd1 262 _bootstrapped = true;
ram54288 0:dbad57390bd1 263 printf("\nBootstrapped\n");
ram54288 0:dbad57390bd1 264 printf("mDS Address %s\n",
ram54288 0:dbad57390bd1 265 _register_security->resource_value_string(M2MSecurity::M2MServerUri).c_str());
ram54288 0:dbad57390bd1 266 }
ram54288 0:dbad57390bd1 267 }
ram54288 0:dbad57390bd1 268
ram54288 0:dbad57390bd1 269 void object_registered(M2MSecurity */*security_object*/, const M2MServer &/*server_object*/){
ram54288 0:dbad57390bd1 270 _registered = true;
ram54288 0:dbad57390bd1 271 printf("\nRegistered\n");
ram54288 0:dbad57390bd1 272 }
ram54288 0:dbad57390bd1 273
ram54288 0:dbad57390bd1 274 void object_unregistered(M2MSecurity */*server_object*/){
ram54288 0:dbad57390bd1 275 _unregistered = true;
ram54288 0:dbad57390bd1 276 printf("\nUnregistered\n");
ram54288 0:dbad57390bd1 277 }
ram54288 0:dbad57390bd1 278
ram54288 0:dbad57390bd1 279 void registration_updated(M2MSecurity */*security_object*/, const M2MServer & /*server_object*/){
ram54288 0:dbad57390bd1 280 _registration_updated = true;
ram54288 0:dbad57390bd1 281 printf("\nregistration updated\n");
ram54288 0:dbad57390bd1 282
ram54288 0:dbad57390bd1 283 }
ram54288 0:dbad57390bd1 284
ram54288 0:dbad57390bd1 285 void error(M2MInterface::Error error){
ram54288 0:dbad57390bd1 286 _error = true;
ram54288 0:dbad57390bd1 287 close_function();
ram54288 0:dbad57390bd1 288 printf("\nError occured Error Code : %d\n", (int8_t)error);
ram54288 0:dbad57390bd1 289
ram54288 0:dbad57390bd1 290 }
ram54288 0:dbad57390bd1 291
ram54288 0:dbad57390bd1 292 void value_updated(M2MBase *base, M2MBase::BaseType type) {
ram54288 0:dbad57390bd1 293 printf("\nValue updated of Object name %s and Type %d\n",
ram54288 0:dbad57390bd1 294 base->name(), type);
ram54288 0:dbad57390bd1 295 }
ram54288 0:dbad57390bd1 296
ram54288 0:dbad57390bd1 297 private:
ram54288 0:dbad57390bd1 298
ram54288 0:dbad57390bd1 299 M2MInterface *_interface;
ram54288 0:dbad57390bd1 300 M2MSecurity *_security;
ram54288 0:dbad57390bd1 301 M2MSecurity *_register_security;
ram54288 0:dbad57390bd1 302 M2MDevice *_device;
ram54288 0:dbad57390bd1 303 M2MObject *_object;
ram54288 0:dbad57390bd1 304 bool _bootstrapped;
ram54288 0:dbad57390bd1 305 bool _error;
ram54288 0:dbad57390bd1 306 bool _registered;
ram54288 0:dbad57390bd1 307 bool _unregistered;
ram54288 0:dbad57390bd1 308 bool _registration_updated;
ram54288 0:dbad57390bd1 309 int _value;
ram54288 0:dbad57390bd1 310 };
ram54288 0:dbad57390bd1 311
ram54288 0:dbad57390bd1 312 void* wait_for_bootstrap(void* arg) {
ram54288 0:dbad57390bd1 313 MbedClient *client;
ram54288 0:dbad57390bd1 314 client = (MbedClient*) arg;
ram54288 0:dbad57390bd1 315 if(client->bootstrap_successful()) {
ram54288 0:dbad57390bd1 316 printf("Registering endpoint\n");
ram54288 0:dbad57390bd1 317 client->test_register();
ram54288 0:dbad57390bd1 318 }
ram54288 0:dbad57390bd1 319 return NULL;
ram54288 0:dbad57390bd1 320 }
ram54288 0:dbad57390bd1 321
ram54288 0:dbad57390bd1 322 void* wait_for_unregister(void* arg) {
ram54288 0:dbad57390bd1 323 MbedClient *client;
ram54288 0:dbad57390bd1 324 client = (MbedClient*) arg;
ram54288 0:dbad57390bd1 325 if(client->unregister_successful()) {
ram54288 0:dbad57390bd1 326 printf("Unregistered done --> exiting\n");
ram54288 0:dbad57390bd1 327 close_function();
ram54288 0:dbad57390bd1 328 }
ram54288 0:dbad57390bd1 329 return NULL;
ram54288 0:dbad57390bd1 330 }
ram54288 0:dbad57390bd1 331
ram54288 0:dbad57390bd1 332 void* send_observation(void* arg) {
ram54288 0:dbad57390bd1 333 MbedClient *client;
ram54288 0:dbad57390bd1 334 client = (MbedClient*) arg;
ram54288 0:dbad57390bd1 335 static uint8_t counter = 0;
ram54288 0:dbad57390bd1 336 while(1) {
ram54288 0:dbad57390bd1 337 sleep(1);
ram54288 0:dbad57390bd1 338 if(counter >= 5 &&
ram54288 0:dbad57390bd1 339 client->register_successful()) {
ram54288 0:dbad57390bd1 340 printf("Sending observation\n");
ram54288 0:dbad57390bd1 341 client->update_resource();
ram54288 0:dbad57390bd1 342 counter = 0;
ram54288 0:dbad57390bd1 343 }
ram54288 0:dbad57390bd1 344 else
ram54288 0:dbad57390bd1 345 counter++;
ram54288 0:dbad57390bd1 346 }
ram54288 0:dbad57390bd1 347 return NULL;
ram54288 0:dbad57390bd1 348 }
ram54288 0:dbad57390bd1 349
ram54288 0:dbad57390bd1 350 static MbedClient *m2mclient = NULL;
ram54288 0:dbad57390bd1 351
ram54288 0:dbad57390bd1 352 static void ctrl_c_handle_function(void)
ram54288 0:dbad57390bd1 353 {
ram54288 0:dbad57390bd1 354 if(m2mclient && m2mclient->register_successful()) {
ram54288 0:dbad57390bd1 355 printf("Unregistering endpoint\n");
ram54288 0:dbad57390bd1 356 m2mclient->test_unregister();
ram54288 0:dbad57390bd1 357 }
ram54288 0:dbad57390bd1 358 }
ram54288 0:dbad57390bd1 359
ram54288 0:dbad57390bd1 360 void trace_printer(const char* str)
ram54288 0:dbad57390bd1 361 {
ram54288 0:dbad57390bd1 362 printf("%s\r\n", str);
ram54288 0:dbad57390bd1 363 }
ram54288 0:dbad57390bd1 364
ram54288 0:dbad57390bd1 365 static pthread_t bootstrap_thread;
ram54288 0:dbad57390bd1 366 static pthread_t unregister_thread;
ram54288 0:dbad57390bd1 367 static pthread_t observation_thread;
ram54288 0:dbad57390bd1 368
ram54288 0:dbad57390bd1 369 void close_function() {
ram54288 0:dbad57390bd1 370 pthread_cancel(bootstrap_thread);
ram54288 0:dbad57390bd1 371 pthread_cancel(unregister_thread);
ram54288 0:dbad57390bd1 372 pthread_cancel(observation_thread);
ram54288 0:dbad57390bd1 373 }
ram54288 0:dbad57390bd1 374
ram54288 0:dbad57390bd1 375 int main() {
ram54288 0:dbad57390bd1 376
ram54288 0:dbad57390bd1 377 MbedClient mbed_client;
ram54288 0:dbad57390bd1 378
ram54288 0:dbad57390bd1 379 m2mclient = &mbed_client;
ram54288 0:dbad57390bd1 380
ram54288 0:dbad57390bd1 381 mbed_trace_init();
ram54288 0:dbad57390bd1 382 mbed_trace_print_function_set( trace_printer );
ram54288 0:dbad57390bd1 383 mbed_trace_config_set(TRACE_MODE_COLOR|TRACE_ACTIVE_LEVEL_DEBUG|TRACE_CARRIAGE_RETURN);
ram54288 0:dbad57390bd1 384
ram54288 0:dbad57390bd1 385 signal(SIGINT, (signalhandler_t)ctrl_c_handle_function);
ram54288 0:dbad57390bd1 386
ram54288 0:dbad57390bd1 387 bool result = mbed_client.create_interface();
ram54288 0:dbad57390bd1 388 if(true == result) {
ram54288 0:dbad57390bd1 389 printf("\nInterface created\n");
ram54288 0:dbad57390bd1 390 }
ram54288 0:dbad57390bd1 391 result = mbed_client.create_bootstrap_object();
ram54288 0:dbad57390bd1 392 if(true == result) {
ram54288 0:dbad57390bd1 393 printf("Bootstrap object created");
ram54288 0:dbad57390bd1 394 }
ram54288 0:dbad57390bd1 395
ram54288 0:dbad57390bd1 396 result = mbed_client.create_register_object();
ram54288 0:dbad57390bd1 397 if(true == result) {
ram54288 0:dbad57390bd1 398 printf("Register object created");
ram54288 0:dbad57390bd1 399 }
ram54288 0:dbad57390bd1 400
ram54288 0:dbad57390bd1 401 result = mbed_client.create_device_object();
ram54288 0:dbad57390bd1 402 if(true == result){
ram54288 0:dbad57390bd1 403 printf("\nDevice object created !!\n");
ram54288 0:dbad57390bd1 404 }
ram54288 0:dbad57390bd1 405
ram54288 0:dbad57390bd1 406 result = mbed_client.create_generic_object();
ram54288 0:dbad57390bd1 407
ram54288 0:dbad57390bd1 408 if(true == result) {
ram54288 0:dbad57390bd1 409 printf("\nGeneric object created\n");
ram54288 0:dbad57390bd1 410 }
ram54288 0:dbad57390bd1 411
ram54288 0:dbad57390bd1 412 // printf("Bootstrapping endpoint\n");
ram54288 0:dbad57390bd1 413 // mbed_client.test_bootstrap();
ram54288 0:dbad57390bd1 414
ram54288 0:dbad57390bd1 415 printf("Registering endpoint\n");
ram54288 0:dbad57390bd1 416 mbed_client.test_register();
ram54288 0:dbad57390bd1 417
ram54288 0:dbad57390bd1 418
ram54288 0:dbad57390bd1 419 pthread_create(&bootstrap_thread, NULL, &wait_for_bootstrap, (void*) &mbed_client);
ram54288 0:dbad57390bd1 420 pthread_create(&observation_thread, NULL, &send_observation, (void*) &mbed_client);
ram54288 0:dbad57390bd1 421 pthread_create(&unregister_thread, NULL, &wait_for_unregister, (void*) &mbed_client);
ram54288 0:dbad57390bd1 422
ram54288 0:dbad57390bd1 423 pthread_join(bootstrap_thread, NULL);
ram54288 0:dbad57390bd1 424 pthread_join(unregister_thread, NULL);
ram54288 0:dbad57390bd1 425 pthread_join(observation_thread, NULL);
ram54288 0:dbad57390bd1 426
ram54288 0:dbad57390bd1 427 exit(EXIT_SUCCESS);
ram54288 0:dbad57390bd1 428 }
ram54288 0:dbad57390bd1 429