FRDM K64F Metronome

Committer:
ram54288
Date:
Sun May 14 18:35:07 2017 +0000
Revision:
0:a2cb7295a1f7
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ram54288 0:a2cb7295a1f7 1 /*
ram54288 0:a2cb7295a1f7 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
ram54288 0:a2cb7295a1f7 3 * SPDX-License-Identifier: Apache-2.0
ram54288 0:a2cb7295a1f7 4 * Licensed under the Apache License, Version 2.0 (the License); you may
ram54288 0:a2cb7295a1f7 5 * not use this file except in compliance with the License.
ram54288 0:a2cb7295a1f7 6 * You may obtain a copy of the License at
ram54288 0:a2cb7295a1f7 7 *
ram54288 0:a2cb7295a1f7 8 * http://www.apache.org/licenses/LICENSE-2.0
ram54288 0:a2cb7295a1f7 9 *
ram54288 0:a2cb7295a1f7 10 * Unless required by applicable law or agreed to in writing, software
ram54288 0:a2cb7295a1f7 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
ram54288 0:a2cb7295a1f7 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ram54288 0:a2cb7295a1f7 13 * See the License for the specific language governing permissions and
ram54288 0:a2cb7295a1f7 14 * limitations under the License.
ram54288 0:a2cb7295a1f7 15 */
ram54288 0:a2cb7295a1f7 16
ram54288 0:a2cb7295a1f7 17 #include "mbed-client/m2mserver.h"
ram54288 0:a2cb7295a1f7 18 #include "mbed-client/m2mconstants.h"
ram54288 0:a2cb7295a1f7 19 #include "mbed-client/m2mobject.h"
ram54288 0:a2cb7295a1f7 20 #include "mbed-client/m2mobjectinstance.h"
ram54288 0:a2cb7295a1f7 21 #include "mbed-client/m2mresource.h"
ram54288 0:a2cb7295a1f7 22 #include "mbed-client/m2mstring.h"
ram54288 0:a2cb7295a1f7 23
ram54288 0:a2cb7295a1f7 24 #define TRACE_GROUP "mClt"
ram54288 0:a2cb7295a1f7 25
ram54288 0:a2cb7295a1f7 26 #define BUFFER_SIZE 21
ram54288 0:a2cb7295a1f7 27
ram54288 0:a2cb7295a1f7 28 M2MServer::M2MServer()
ram54288 0:a2cb7295a1f7 29 : M2MObject(M2M_SERVER_ID, stringdup(M2M_SERVER_ID))
ram54288 0:a2cb7295a1f7 30 {
ram54288 0:a2cb7295a1f7 31 M2MObject::create_object_instance();
ram54288 0:a2cb7295a1f7 32
ram54288 0:a2cb7295a1f7 33 _server_instance = object_instance();
ram54288 0:a2cb7295a1f7 34
ram54288 0:a2cb7295a1f7 35 if(_server_instance) {
ram54288 0:a2cb7295a1f7 36
ram54288 0:a2cb7295a1f7 37 M2MResource* res = _server_instance->create_dynamic_resource(SERVER_SHORT_SERVER_ID,
ram54288 0:a2cb7295a1f7 38 OMA_RESOURCE_TYPE,
ram54288 0:a2cb7295a1f7 39 M2MResourceInstance::INTEGER,
ram54288 0:a2cb7295a1f7 40 true);
ram54288 0:a2cb7295a1f7 41 if(res) {
ram54288 0:a2cb7295a1f7 42 res->set_operation(M2MBase::GET_PUT_ALLOWED);
ram54288 0:a2cb7295a1f7 43 }
ram54288 0:a2cb7295a1f7 44 res = _server_instance->create_dynamic_resource(SERVER_LIFETIME,
ram54288 0:a2cb7295a1f7 45 OMA_RESOURCE_TYPE,
ram54288 0:a2cb7295a1f7 46 M2MResourceInstance::INTEGER,
ram54288 0:a2cb7295a1f7 47 true);
ram54288 0:a2cb7295a1f7 48 if(res) {
ram54288 0:a2cb7295a1f7 49 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
ram54288 0:a2cb7295a1f7 50 }
ram54288 0:a2cb7295a1f7 51 res = _server_instance->create_dynamic_resource(SERVER_NOTIFICATION_STORAGE,
ram54288 0:a2cb7295a1f7 52 OMA_RESOURCE_TYPE,
ram54288 0:a2cb7295a1f7 53 M2MResourceInstance::BOOLEAN,
ram54288 0:a2cb7295a1f7 54 true);
ram54288 0:a2cb7295a1f7 55 if(res) {
ram54288 0:a2cb7295a1f7 56 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
ram54288 0:a2cb7295a1f7 57 }
ram54288 0:a2cb7295a1f7 58 res = _server_instance->create_dynamic_resource(SERVER_BINDING,
ram54288 0:a2cb7295a1f7 59 OMA_RESOURCE_TYPE,
ram54288 0:a2cb7295a1f7 60 M2MResourceInstance::STRING,
ram54288 0:a2cb7295a1f7 61 true);
ram54288 0:a2cb7295a1f7 62 if(res) {
ram54288 0:a2cb7295a1f7 63 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
ram54288 0:a2cb7295a1f7 64 }
ram54288 0:a2cb7295a1f7 65 res = _server_instance->create_dynamic_resource(SERVER_REGISTRATION_UPDATE,
ram54288 0:a2cb7295a1f7 66 OMA_RESOURCE_TYPE,
ram54288 0:a2cb7295a1f7 67 M2MResourceInstance::OPAQUE,
ram54288 0:a2cb7295a1f7 68 false);
ram54288 0:a2cb7295a1f7 69 if(res) {
ram54288 0:a2cb7295a1f7 70 res->set_operation(M2MBase::POST_ALLOWED);
ram54288 0:a2cb7295a1f7 71 }
ram54288 0:a2cb7295a1f7 72 }
ram54288 0:a2cb7295a1f7 73 }
ram54288 0:a2cb7295a1f7 74
ram54288 0:a2cb7295a1f7 75 M2MServer::~M2MServer()
ram54288 0:a2cb7295a1f7 76 {
ram54288 0:a2cb7295a1f7 77
ram54288 0:a2cb7295a1f7 78 }
ram54288 0:a2cb7295a1f7 79
ram54288 0:a2cb7295a1f7 80 M2MResource* M2MServer::create_resource(ServerResource resource, uint32_t value)
ram54288 0:a2cb7295a1f7 81 {
ram54288 0:a2cb7295a1f7 82 M2MResource* res = NULL;
ram54288 0:a2cb7295a1f7 83 const char* server_id_ptr = "";
ram54288 0:a2cb7295a1f7 84 if(!is_resource_present(resource)) {
ram54288 0:a2cb7295a1f7 85 switch(resource) {
ram54288 0:a2cb7295a1f7 86 case DefaultMinPeriod:
ram54288 0:a2cb7295a1f7 87 server_id_ptr = SERVER_DEFAULT_MIN_PERIOD;
ram54288 0:a2cb7295a1f7 88 break;
ram54288 0:a2cb7295a1f7 89 case DefaultMaxPeriod:
ram54288 0:a2cb7295a1f7 90 server_id_ptr = SERVER_DEFAULT_MAX_PERIOD;
ram54288 0:a2cb7295a1f7 91 break;
ram54288 0:a2cb7295a1f7 92 case DisableTimeout:
ram54288 0:a2cb7295a1f7 93 server_id_ptr = SERVER_DISABLE_TIMEOUT;
ram54288 0:a2cb7295a1f7 94 break;
ram54288 0:a2cb7295a1f7 95 default:
ram54288 0:a2cb7295a1f7 96 break;
ram54288 0:a2cb7295a1f7 97 }
ram54288 0:a2cb7295a1f7 98 }
ram54288 0:a2cb7295a1f7 99 String server_id(server_id_ptr);
ram54288 0:a2cb7295a1f7 100
ram54288 0:a2cb7295a1f7 101 if(!server_id.empty()) {
ram54288 0:a2cb7295a1f7 102 if(_server_instance) {
ram54288 0:a2cb7295a1f7 103 res = _server_instance->create_dynamic_resource(server_id,
ram54288 0:a2cb7295a1f7 104 OMA_RESOURCE_TYPE,
ram54288 0:a2cb7295a1f7 105 M2MResourceInstance::INTEGER,
ram54288 0:a2cb7295a1f7 106 true);
ram54288 0:a2cb7295a1f7 107 if(res) {
ram54288 0:a2cb7295a1f7 108 res->set_operation(M2MBase::GET_PUT_POST_ALLOWED);
ram54288 0:a2cb7295a1f7 109
ram54288 0:a2cb7295a1f7 110 res->set_value(value);
ram54288 0:a2cb7295a1f7 111 }
ram54288 0:a2cb7295a1f7 112 }
ram54288 0:a2cb7295a1f7 113 }
ram54288 0:a2cb7295a1f7 114 return res;
ram54288 0:a2cb7295a1f7 115 }
ram54288 0:a2cb7295a1f7 116
ram54288 0:a2cb7295a1f7 117 M2MResource* M2MServer::create_resource(ServerResource resource)
ram54288 0:a2cb7295a1f7 118 {
ram54288 0:a2cb7295a1f7 119 M2MResource* res = NULL;
ram54288 0:a2cb7295a1f7 120 if(!is_resource_present(resource)) {
ram54288 0:a2cb7295a1f7 121 if(M2MServer::Disable == resource) {
ram54288 0:a2cb7295a1f7 122 if(_server_instance) {
ram54288 0:a2cb7295a1f7 123 res = _server_instance->create_dynamic_resource(SERVER_DISABLE,
ram54288 0:a2cb7295a1f7 124 OMA_RESOURCE_TYPE,
ram54288 0:a2cb7295a1f7 125 M2MResourceInstance::OPAQUE,
ram54288 0:a2cb7295a1f7 126 false);
ram54288 0:a2cb7295a1f7 127 if(res) {
ram54288 0:a2cb7295a1f7 128 res->set_operation(M2MBase::POST_ALLOWED);
ram54288 0:a2cb7295a1f7 129 }
ram54288 0:a2cb7295a1f7 130 }
ram54288 0:a2cb7295a1f7 131 }
ram54288 0:a2cb7295a1f7 132 }
ram54288 0:a2cb7295a1f7 133 return res;
ram54288 0:a2cb7295a1f7 134 }
ram54288 0:a2cb7295a1f7 135
ram54288 0:a2cb7295a1f7 136 bool M2MServer::delete_resource(ServerResource resource)
ram54288 0:a2cb7295a1f7 137 {
ram54288 0:a2cb7295a1f7 138 bool success = false;
ram54288 0:a2cb7295a1f7 139 const char* server_id_ptr;
ram54288 0:a2cb7295a1f7 140 switch(resource) {
ram54288 0:a2cb7295a1f7 141 case DefaultMinPeriod:
ram54288 0:a2cb7295a1f7 142 server_id_ptr = SERVER_DEFAULT_MIN_PERIOD;
ram54288 0:a2cb7295a1f7 143 break;
ram54288 0:a2cb7295a1f7 144 case DefaultMaxPeriod:
ram54288 0:a2cb7295a1f7 145 server_id_ptr = SERVER_DEFAULT_MAX_PERIOD;
ram54288 0:a2cb7295a1f7 146 break;
ram54288 0:a2cb7295a1f7 147 case Disable:
ram54288 0:a2cb7295a1f7 148 server_id_ptr = SERVER_DISABLE;
ram54288 0:a2cb7295a1f7 149 break;
ram54288 0:a2cb7295a1f7 150 case DisableTimeout:
ram54288 0:a2cb7295a1f7 151 server_id_ptr = SERVER_DISABLE_TIMEOUT;
ram54288 0:a2cb7295a1f7 152 break;
ram54288 0:a2cb7295a1f7 153 default:
ram54288 0:a2cb7295a1f7 154 server_id_ptr = NULL;
ram54288 0:a2cb7295a1f7 155 break;
ram54288 0:a2cb7295a1f7 156 }
ram54288 0:a2cb7295a1f7 157
ram54288 0:a2cb7295a1f7 158 if(server_id_ptr) {
ram54288 0:a2cb7295a1f7 159 if(_server_instance) {
ram54288 0:a2cb7295a1f7 160 success = _server_instance->remove_resource(server_id_ptr);
ram54288 0:a2cb7295a1f7 161 }
ram54288 0:a2cb7295a1f7 162 }
ram54288 0:a2cb7295a1f7 163 return success;
ram54288 0:a2cb7295a1f7 164 }
ram54288 0:a2cb7295a1f7 165
ram54288 0:a2cb7295a1f7 166 bool M2MServer::set_resource_value(ServerResource resource,
ram54288 0:a2cb7295a1f7 167 const String &value)
ram54288 0:a2cb7295a1f7 168 {
ram54288 0:a2cb7295a1f7 169 bool success = false;
ram54288 0:a2cb7295a1f7 170 M2MResource* res = get_resource(resource);
ram54288 0:a2cb7295a1f7 171 if(res && (M2MServer::Binding == resource)) {
ram54288 0:a2cb7295a1f7 172 success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
ram54288 0:a2cb7295a1f7 173 }
ram54288 0:a2cb7295a1f7 174 return success;
ram54288 0:a2cb7295a1f7 175 }
ram54288 0:a2cb7295a1f7 176
ram54288 0:a2cb7295a1f7 177 bool M2MServer::set_resource_value(ServerResource resource,
ram54288 0:a2cb7295a1f7 178 uint32_t value)
ram54288 0:a2cb7295a1f7 179 {
ram54288 0:a2cb7295a1f7 180 bool success = false;
ram54288 0:a2cb7295a1f7 181 M2MResource* res = get_resource(resource);
ram54288 0:a2cb7295a1f7 182 if(res) {
ram54288 0:a2cb7295a1f7 183 if(M2MServer::ShortServerID == resource ||
ram54288 0:a2cb7295a1f7 184 M2MServer::Lifetime == resource ||
ram54288 0:a2cb7295a1f7 185 M2MServer::DefaultMinPeriod == resource ||
ram54288 0:a2cb7295a1f7 186 M2MServer::DefaultMaxPeriod == resource ||
ram54288 0:a2cb7295a1f7 187 M2MServer::DisableTimeout == resource ||
ram54288 0:a2cb7295a1f7 188 M2MServer::NotificationStorage == resource) {
ram54288 0:a2cb7295a1f7 189 // If it is any of the above resource
ram54288 0:a2cb7295a1f7 190 // set the value of the resource.
ram54288 0:a2cb7295a1f7 191
ram54288 0:a2cb7295a1f7 192 success = res->set_value(value);
ram54288 0:a2cb7295a1f7 193 }
ram54288 0:a2cb7295a1f7 194 }
ram54288 0:a2cb7295a1f7 195 return success;
ram54288 0:a2cb7295a1f7 196 }
ram54288 0:a2cb7295a1f7 197
ram54288 0:a2cb7295a1f7 198 String M2MServer::resource_value_string(ServerResource resource) const
ram54288 0:a2cb7295a1f7 199 {
ram54288 0:a2cb7295a1f7 200 String value = "";
ram54288 0:a2cb7295a1f7 201 M2MResource* res = get_resource(resource);
ram54288 0:a2cb7295a1f7 202 if(res && (M2MServer::Binding == resource)) {
ram54288 0:a2cb7295a1f7 203
ram54288 0:a2cb7295a1f7 204 value = res->get_value_string();
ram54288 0:a2cb7295a1f7 205 }
ram54288 0:a2cb7295a1f7 206 return value;
ram54288 0:a2cb7295a1f7 207 }
ram54288 0:a2cb7295a1f7 208
ram54288 0:a2cb7295a1f7 209
ram54288 0:a2cb7295a1f7 210 uint32_t M2MServer::resource_value_int(ServerResource resource) const
ram54288 0:a2cb7295a1f7 211 {
ram54288 0:a2cb7295a1f7 212 uint32_t value = 0;
ram54288 0:a2cb7295a1f7 213 M2MResource* res = get_resource(resource);
ram54288 0:a2cb7295a1f7 214 if(res) {
ram54288 0:a2cb7295a1f7 215 if(M2MServer::ShortServerID == resource ||
ram54288 0:a2cb7295a1f7 216 M2MServer::Lifetime == resource ||
ram54288 0:a2cb7295a1f7 217 M2MServer::DefaultMinPeriod == resource ||
ram54288 0:a2cb7295a1f7 218 M2MServer::DefaultMaxPeriod == resource ||
ram54288 0:a2cb7295a1f7 219 M2MServer::DisableTimeout == resource ||
ram54288 0:a2cb7295a1f7 220 M2MServer::NotificationStorage == resource) {
ram54288 0:a2cb7295a1f7 221
ram54288 0:a2cb7295a1f7 222 value = res->get_value_int();
ram54288 0:a2cb7295a1f7 223 }
ram54288 0:a2cb7295a1f7 224 }
ram54288 0:a2cb7295a1f7 225 return value;
ram54288 0:a2cb7295a1f7 226 }
ram54288 0:a2cb7295a1f7 227
ram54288 0:a2cb7295a1f7 228 bool M2MServer::is_resource_present(ServerResource resource) const
ram54288 0:a2cb7295a1f7 229 {
ram54288 0:a2cb7295a1f7 230 bool success = false;
ram54288 0:a2cb7295a1f7 231 M2MResource *res = get_resource(resource);
ram54288 0:a2cb7295a1f7 232 if(res) {
ram54288 0:a2cb7295a1f7 233 success = true;
ram54288 0:a2cb7295a1f7 234 }
ram54288 0:a2cb7295a1f7 235 return success;
ram54288 0:a2cb7295a1f7 236 }
ram54288 0:a2cb7295a1f7 237
ram54288 0:a2cb7295a1f7 238 uint16_t M2MServer::total_resource_count() const
ram54288 0:a2cb7295a1f7 239 {
ram54288 0:a2cb7295a1f7 240 uint16_t total_count = 0;
ram54288 0:a2cb7295a1f7 241 if(_server_instance) {
ram54288 0:a2cb7295a1f7 242 total_count = _server_instance->resources().size();
ram54288 0:a2cb7295a1f7 243 }
ram54288 0:a2cb7295a1f7 244 return total_count;
ram54288 0:a2cb7295a1f7 245 }
ram54288 0:a2cb7295a1f7 246
ram54288 0:a2cb7295a1f7 247 M2MResource* M2MServer::get_resource(ServerResource res) const
ram54288 0:a2cb7295a1f7 248 {
ram54288 0:a2cb7295a1f7 249 M2MResource* res_object = NULL;
ram54288 0:a2cb7295a1f7 250 const char* res_name_ptr = NULL;
ram54288 0:a2cb7295a1f7 251 switch(res) {
ram54288 0:a2cb7295a1f7 252 case ShortServerID:
ram54288 0:a2cb7295a1f7 253 res_name_ptr = SERVER_SHORT_SERVER_ID;
ram54288 0:a2cb7295a1f7 254 break;
ram54288 0:a2cb7295a1f7 255 case Lifetime:
ram54288 0:a2cb7295a1f7 256 res_name_ptr = SERVER_LIFETIME;
ram54288 0:a2cb7295a1f7 257 break;
ram54288 0:a2cb7295a1f7 258 case DefaultMinPeriod:
ram54288 0:a2cb7295a1f7 259 res_name_ptr = SERVER_DEFAULT_MIN_PERIOD;
ram54288 0:a2cb7295a1f7 260 break;
ram54288 0:a2cb7295a1f7 261 case DefaultMaxPeriod:
ram54288 0:a2cb7295a1f7 262 res_name_ptr = SERVER_DEFAULT_MAX_PERIOD;
ram54288 0:a2cb7295a1f7 263 break;
ram54288 0:a2cb7295a1f7 264 case Disable:
ram54288 0:a2cb7295a1f7 265 res_name_ptr = SERVER_DISABLE;
ram54288 0:a2cb7295a1f7 266 break;
ram54288 0:a2cb7295a1f7 267 case DisableTimeout:
ram54288 0:a2cb7295a1f7 268 res_name_ptr = SERVER_DISABLE_TIMEOUT;
ram54288 0:a2cb7295a1f7 269 break;
ram54288 0:a2cb7295a1f7 270 case NotificationStorage:
ram54288 0:a2cb7295a1f7 271 res_name_ptr = SERVER_NOTIFICATION_STORAGE;
ram54288 0:a2cb7295a1f7 272 break;
ram54288 0:a2cb7295a1f7 273 case Binding:
ram54288 0:a2cb7295a1f7 274 res_name_ptr = SERVER_BINDING;
ram54288 0:a2cb7295a1f7 275 break;
ram54288 0:a2cb7295a1f7 276 case RegistrationUpdate:
ram54288 0:a2cb7295a1f7 277 res_name_ptr = SERVER_REGISTRATION_UPDATE;
ram54288 0:a2cb7295a1f7 278 break;
ram54288 0:a2cb7295a1f7 279 }
ram54288 0:a2cb7295a1f7 280
ram54288 0:a2cb7295a1f7 281 if(res_name_ptr) {
ram54288 0:a2cb7295a1f7 282 if(_server_instance) {
ram54288 0:a2cb7295a1f7 283 res_object = _server_instance->resource(res_name_ptr);
ram54288 0:a2cb7295a1f7 284 }
ram54288 0:a2cb7295a1f7 285 }
ram54288 0:a2cb7295a1f7 286 return res_object;
ram54288 0:a2cb7295a1f7 287 }