Example

Dependencies:   FXAS21002 FXOS8700Q

Committer:
maygup01
Date:
Tue Nov 19 09:49:38 2019 +0000
Revision:
0:11cc2b7889af
Example

Who changed what in which revision?

UserRevisionLine numberNew contents of line
maygup01 0:11cc2b7889af 1 /*
maygup01 0:11cc2b7889af 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
maygup01 0:11cc2b7889af 3 * SPDX-License-Identifier: Apache-2.0
maygup01 0:11cc2b7889af 4 * Licensed under the Apache License, Version 2.0 (the License); you may
maygup01 0:11cc2b7889af 5 * not use this file except in compliance with the License.
maygup01 0:11cc2b7889af 6 * You may obtain a copy of the License at
maygup01 0:11cc2b7889af 7 *
maygup01 0:11cc2b7889af 8 * http://www.apache.org/licenses/LICENSE-2.0
maygup01 0:11cc2b7889af 9 *
maygup01 0:11cc2b7889af 10 * Unless required by applicable law or agreed to in writing, software
maygup01 0:11cc2b7889af 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
maygup01 0:11cc2b7889af 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
maygup01 0:11cc2b7889af 13 * See the License for the specific language governing permissions and
maygup01 0:11cc2b7889af 14 * limitations under the License.
maygup01 0:11cc2b7889af 15 */
maygup01 0:11cc2b7889af 16 #include <stdlib.h>
maygup01 0:11cc2b7889af 17 #include "mbed-client/m2mresource.h"
maygup01 0:11cc2b7889af 18 #include "mbed-client/m2mconstants.h"
maygup01 0:11cc2b7889af 19 #include "mbed-client/m2mobservationhandler.h"
maygup01 0:11cc2b7889af 20 #include "mbed-client/m2mobject.h"
maygup01 0:11cc2b7889af 21 #include "mbed-client/m2mobjectinstance.h"
maygup01 0:11cc2b7889af 22 #include "include/m2mcallbackstorage.h"
maygup01 0:11cc2b7889af 23 #include "include/m2mreporthandler.h"
maygup01 0:11cc2b7889af 24 #include "mbed-client/m2mblockmessage.h"
maygup01 0:11cc2b7889af 25 #include "mbed-trace/mbed_trace.h"
maygup01 0:11cc2b7889af 26
maygup01 0:11cc2b7889af 27 #define TRACE_GROUP "mClt"
maygup01 0:11cc2b7889af 28
maygup01 0:11cc2b7889af 29 M2MResourceInstance::M2MResourceInstance(M2MResource &parent,
maygup01 0:11cc2b7889af 30 const String &res_name,
maygup01 0:11cc2b7889af 31 M2MBase::Mode resource_mode,
maygup01 0:11cc2b7889af 32 const String &resource_type,
maygup01 0:11cc2b7889af 33 M2MBase::DataType type,
maygup01 0:11cc2b7889af 34 char* path,
maygup01 0:11cc2b7889af 35 bool external_blockwise_store,
maygup01 0:11cc2b7889af 36 bool multiple_instance)
maygup01 0:11cc2b7889af 37 : M2MResourceBase(res_name,
maygup01 0:11cc2b7889af 38 resource_mode,
maygup01 0:11cc2b7889af 39 resource_type,
maygup01 0:11cc2b7889af 40 type,
maygup01 0:11cc2b7889af 41 path,
maygup01 0:11cc2b7889af 42 external_blockwise_store,
maygup01 0:11cc2b7889af 43 multiple_instance
maygup01 0:11cc2b7889af 44 ),
maygup01 0:11cc2b7889af 45 _parent_resource(parent)
maygup01 0:11cc2b7889af 46 {
maygup01 0:11cc2b7889af 47 set_base_type(M2MBase::ResourceInstance);
maygup01 0:11cc2b7889af 48 }
maygup01 0:11cc2b7889af 49
maygup01 0:11cc2b7889af 50 M2MResourceInstance::M2MResourceInstance(M2MResource &parent,
maygup01 0:11cc2b7889af 51 const String &res_name,
maygup01 0:11cc2b7889af 52 M2MBase::Mode resource_mode,
maygup01 0:11cc2b7889af 53 const String &resource_type,
maygup01 0:11cc2b7889af 54 M2MBase::DataType type,
maygup01 0:11cc2b7889af 55 const uint8_t *value,
maygup01 0:11cc2b7889af 56 const uint8_t value_length,
maygup01 0:11cc2b7889af 57 char* path,
maygup01 0:11cc2b7889af 58 bool external_blockwise_store,
maygup01 0:11cc2b7889af 59 bool multiple_instance)
maygup01 0:11cc2b7889af 60 : M2MResourceBase(res_name,
maygup01 0:11cc2b7889af 61 resource_mode,
maygup01 0:11cc2b7889af 62 resource_type,
maygup01 0:11cc2b7889af 63 type,
maygup01 0:11cc2b7889af 64 value,
maygup01 0:11cc2b7889af 65 value_length,
maygup01 0:11cc2b7889af 66 path,
maygup01 0:11cc2b7889af 67 external_blockwise_store,
maygup01 0:11cc2b7889af 68 multiple_instance),
maygup01 0:11cc2b7889af 69 _parent_resource(parent)
maygup01 0:11cc2b7889af 70 {
maygup01 0:11cc2b7889af 71 set_base_type(M2MBase::ResourceInstance);
maygup01 0:11cc2b7889af 72 }
maygup01 0:11cc2b7889af 73
maygup01 0:11cc2b7889af 74 M2MResourceInstance::M2MResourceInstance(M2MResource &parent,
maygup01 0:11cc2b7889af 75 const lwm2m_parameters_s* s,
maygup01 0:11cc2b7889af 76 M2MBase::DataType type)
maygup01 0:11cc2b7889af 77 : M2MResourceBase(s, type),
maygup01 0:11cc2b7889af 78 _parent_resource(parent)
maygup01 0:11cc2b7889af 79 {
maygup01 0:11cc2b7889af 80
maygup01 0:11cc2b7889af 81 assert(base_type() == M2MBase::ResourceInstance);
maygup01 0:11cc2b7889af 82 }
maygup01 0:11cc2b7889af 83
maygup01 0:11cc2b7889af 84 M2MResourceInstance::~M2MResourceInstance()
maygup01 0:11cc2b7889af 85 {
maygup01 0:11cc2b7889af 86 free_resources();
maygup01 0:11cc2b7889af 87 }
maygup01 0:11cc2b7889af 88
maygup01 0:11cc2b7889af 89 M2MObservationHandler* M2MResourceInstance::observation_handler() const
maygup01 0:11cc2b7889af 90 {
maygup01 0:11cc2b7889af 91 const M2MResource& parent_resource = get_parent_resource();
maygup01 0:11cc2b7889af 92
maygup01 0:11cc2b7889af 93 // XXX: need to check the flag too
maygup01 0:11cc2b7889af 94 return parent_resource.observation_handler();
maygup01 0:11cc2b7889af 95 }
maygup01 0:11cc2b7889af 96
maygup01 0:11cc2b7889af 97 void M2MResourceInstance::set_observation_handler(M2MObservationHandler *handler)
maygup01 0:11cc2b7889af 98 {
maygup01 0:11cc2b7889af 99 M2MResource& parent_resource = get_parent_resource();
maygup01 0:11cc2b7889af 100
maygup01 0:11cc2b7889af 101 // XXX: need to set the flag too
maygup01 0:11cc2b7889af 102 parent_resource.set_observation_handler(handler);
maygup01 0:11cc2b7889af 103 }
maygup01 0:11cc2b7889af 104
maygup01 0:11cc2b7889af 105 bool M2MResourceInstance::handle_observation_attribute(const char *query)
maygup01 0:11cc2b7889af 106 {
maygup01 0:11cc2b7889af 107 tr_debug("M2MResourceInstance::handle_observation_attribute - is_under_observation(%d)", is_under_observation());
maygup01 0:11cc2b7889af 108 bool success = false;
maygup01 0:11cc2b7889af 109
maygup01 0:11cc2b7889af 110 M2MReportHandler *handler = M2MBase::report_handler();
maygup01 0:11cc2b7889af 111 if (!handler) {
maygup01 0:11cc2b7889af 112 handler = M2MBase::create_report_handler();
maygup01 0:11cc2b7889af 113 }
maygup01 0:11cc2b7889af 114
maygup01 0:11cc2b7889af 115 if (handler) {
maygup01 0:11cc2b7889af 116 success = handler->parse_notification_attribute(query,
maygup01 0:11cc2b7889af 117 M2MBase::base_type(), resource_instance_type());
maygup01 0:11cc2b7889af 118 if(success) {
maygup01 0:11cc2b7889af 119 if (is_under_observation()) {
maygup01 0:11cc2b7889af 120 handler->set_under_observation(true);
maygup01 0:11cc2b7889af 121 }
maygup01 0:11cc2b7889af 122 } else {
maygup01 0:11cc2b7889af 123 handler->set_default_values();
maygup01 0:11cc2b7889af 124 }
maygup01 0:11cc2b7889af 125 }
maygup01 0:11cc2b7889af 126 return success;
maygup01 0:11cc2b7889af 127 }
maygup01 0:11cc2b7889af 128
maygup01 0:11cc2b7889af 129 uint16_t M2MResourceInstance::object_instance_id() const
maygup01 0:11cc2b7889af 130 {
maygup01 0:11cc2b7889af 131 const M2MObjectInstance& parent_object_instance = get_parent_resource().get_parent_object_instance();
maygup01 0:11cc2b7889af 132 return parent_object_instance.instance_id();
maygup01 0:11cc2b7889af 133 }
maygup01 0:11cc2b7889af 134
maygup01 0:11cc2b7889af 135 M2MResource& M2MResourceInstance::get_parent_resource() const
maygup01 0:11cc2b7889af 136 {
maygup01 0:11cc2b7889af 137 return _parent_resource;
maygup01 0:11cc2b7889af 138 }
maygup01 0:11cc2b7889af 139
maygup01 0:11cc2b7889af 140 M2MBase *M2MResourceInstance::get_parent() const
maygup01 0:11cc2b7889af 141 {
maygup01 0:11cc2b7889af 142 return (M2MBase *) &get_parent_resource();
maygup01 0:11cc2b7889af 143 }
maygup01 0:11cc2b7889af 144
maygup01 0:11cc2b7889af 145 const char* M2MResourceInstance::object_name() const
maygup01 0:11cc2b7889af 146 {
maygup01 0:11cc2b7889af 147 const M2MObjectInstance& parent_object_instance = _parent_resource.get_parent_object_instance();
maygup01 0:11cc2b7889af 148 const M2MObject& parent_object = parent_object_instance.get_parent_object();
maygup01 0:11cc2b7889af 149
maygup01 0:11cc2b7889af 150 return parent_object.name();
maygup01 0:11cc2b7889af 151 }
maygup01 0:11cc2b7889af 152