Toyomasa Watarai / simple-mbed-cloud-client

Dependents:  

Committer:
MACRUM
Date:
Mon Jul 02 06:30:39 2018 +0000
Revision:
0:276e7a263c35
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MACRUM 0:276e7a263c35 1 // ----------------------------------------------------------------------------
MACRUM 0:276e7a263c35 2 // Copyright 2016-2017 ARM Ltd.
MACRUM 0:276e7a263c35 3 //
MACRUM 0:276e7a263c35 4 // SPDX-License-Identifier: Apache-2.0
MACRUM 0:276e7a263c35 5 //
MACRUM 0:276e7a263c35 6 // Licensed under the Apache License, Version 2.0 (the "License");
MACRUM 0:276e7a263c35 7 // you may not use this file except in compliance with the License.
MACRUM 0:276e7a263c35 8 // You may obtain a copy of the License at
MACRUM 0:276e7a263c35 9 //
MACRUM 0:276e7a263c35 10 // http://www.apache.org/licenses/LICENSE-2.0
MACRUM 0:276e7a263c35 11 //
MACRUM 0:276e7a263c35 12 // Unless required by applicable law or agreed to in writing, software
MACRUM 0:276e7a263c35 13 // distributed under the License is distributed on an "AS IS" BASIS,
MACRUM 0:276e7a263c35 14 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
MACRUM 0:276e7a263c35 15 // See the License for the specific language governing permissions and
MACRUM 0:276e7a263c35 16 // limitations under the License.
MACRUM 0:276e7a263c35 17 // ----------------------------------------------------------------------------
MACRUM 0:276e7a263c35 18
MACRUM 0:276e7a263c35 19 #include "mbed-cloud-client/MbedCloudClient.h"
MACRUM 0:276e7a263c35 20 #include "m2mresource.h"
MACRUM 0:276e7a263c35 21 #include "mbed-client/m2minterface.h"
MACRUM 0:276e7a263c35 22 #include <stdio.h>
MACRUM 0:276e7a263c35 23 #include <string.h>
MACRUM 0:276e7a263c35 24 #include "mbed.h"
MACRUM 0:276e7a263c35 25
MACRUM 0:276e7a263c35 26 static void notification_delivery_status_cb_thunk(const M2MBase& base,
MACRUM 0:276e7a263c35 27 const NoticationDeliveryStatus status,
MACRUM 0:276e7a263c35 28 void *client_args) {
MACRUM 0:276e7a263c35 29 ((Callback<void(const M2MBase& base, const NoticationDeliveryStatus status)>*)client_args)->call(base, status);
MACRUM 0:276e7a263c35 30 }
MACRUM 0:276e7a263c35 31
MACRUM 0:276e7a263c35 32 M2MResource* add_resource(M2MObjectList *list, uint16_t object_id, uint16_t instance_id,
MACRUM 0:276e7a263c35 33 uint16_t resource_id, const char *resource_type, M2MResourceInstance::ResourceType data_type,
MACRUM 0:276e7a263c35 34 M2MBase::Operation allowed, const char *value, bool observable, Callback<void(const char*)> *put_cb,
MACRUM 0:276e7a263c35 35 Callback<void(void*)> *post_cb,
MACRUM 0:276e7a263c35 36 Callback<void(const M2MBase&, const NoticationDeliveryStatus)> *notification_status_cb)
MACRUM 0:276e7a263c35 37 {
MACRUM 0:276e7a263c35 38 M2MObject *object = NULL;
MACRUM 0:276e7a263c35 39 M2MObjectInstance* object_instance = NULL;
MACRUM 0:276e7a263c35 40 M2MResource* resource = NULL;
MACRUM 0:276e7a263c35 41 char name[6];
MACRUM 0:276e7a263c35 42
MACRUM 0:276e7a263c35 43 //check if object already exists.
MACRUM 0:276e7a263c35 44 if (!list->empty()) {
MACRUM 0:276e7a263c35 45 M2MObjectList::const_iterator it;
MACRUM 0:276e7a263c35 46 it = list->begin();
MACRUM 0:276e7a263c35 47 for ( ; it != list->end(); it++ ) {
MACRUM 0:276e7a263c35 48 if ((*it)->name_id() == object_id) {
MACRUM 0:276e7a263c35 49 object = (*it);
MACRUM 0:276e7a263c35 50 break;
MACRUM 0:276e7a263c35 51 }
MACRUM 0:276e7a263c35 52 }
MACRUM 0:276e7a263c35 53 }
MACRUM 0:276e7a263c35 54 //Create new object if needed.
MACRUM 0:276e7a263c35 55 if (!object) {
MACRUM 0:276e7a263c35 56 snprintf(name, 6, "%d", object_id);
MACRUM 0:276e7a263c35 57 object = M2MInterfaceFactory::create_object(name);
MACRUM 0:276e7a263c35 58 list->push_back(object);
MACRUM 0:276e7a263c35 59 } else {
MACRUM 0:276e7a263c35 60 //check if instance already exists.
MACRUM 0:276e7a263c35 61 object_instance = object->object_instance(instance_id);
MACRUM 0:276e7a263c35 62 }
MACRUM 0:276e7a263c35 63 //Create new instance if needed.
MACRUM 0:276e7a263c35 64 if (!object_instance) {
MACRUM 0:276e7a263c35 65 object_instance = object->create_object_instance(instance_id);
MACRUM 0:276e7a263c35 66 }
MACRUM 0:276e7a263c35 67 //create the recource.
MACRUM 0:276e7a263c35 68 snprintf(name, 6, "%d", resource_id);
MACRUM 0:276e7a263c35 69 resource = object_instance->create_dynamic_resource(name, resource_type, data_type, observable);
MACRUM 0:276e7a263c35 70 //Set value if available.
MACRUM 0:276e7a263c35 71 if (value != "") {
MACRUM 0:276e7a263c35 72 resource->set_value((const unsigned char*)value, strlen(value));
MACRUM 0:276e7a263c35 73 }
MACRUM 0:276e7a263c35 74 //Set allowed operations for accessing the resource.
MACRUM 0:276e7a263c35 75 resource->set_operation(allowed);
MACRUM 0:276e7a263c35 76 if (observable) {
MACRUM 0:276e7a263c35 77 resource->set_notification_delivery_status_cb(notification_delivery_status_cb_thunk, notification_status_cb);
MACRUM 0:276e7a263c35 78 }
MACRUM 0:276e7a263c35 79
MACRUM 0:276e7a263c35 80
MACRUM 0:276e7a263c35 81 resource->set_value_updated_function(
MACRUM 0:276e7a263c35 82 FP1<void, const char*>(put_cb,
MACRUM 0:276e7a263c35 83 (void (Callback<void(const char*)>::*)(const char*))
MACRUM 0:276e7a263c35 84 &Callback<void(const char*)>::call));
MACRUM 0:276e7a263c35 85 resource->set_execute_function(FP1<void, void*>(post_cb,
MACRUM 0:276e7a263c35 86 (void (Callback<void(void*)>::*)(void*))
MACRUM 0:276e7a263c35 87 &Callback<void(void*)>::call));
MACRUM 0:276e7a263c35 88
MACRUM 0:276e7a263c35 89 return resource;
MACRUM 0:276e7a263c35 90 }