A metronome using the FRDM K64F board

Committer:
ram54288
Date:
Sun May 14 18:40:18 2017 +0000
Revision:
0:a7a43371b306
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ram54288 0:a7a43371b306 1 /*
ram54288 0:a7a43371b306 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
ram54288 0:a7a43371b306 3 * SPDX-License-Identifier: Apache-2.0
ram54288 0:a7a43371b306 4 * Licensed under the Apache License, Version 2.0 (the License); you may
ram54288 0:a7a43371b306 5 * not use this file except in compliance with the License.
ram54288 0:a7a43371b306 6 * You may obtain a copy of the License at
ram54288 0:a7a43371b306 7 *
ram54288 0:a7a43371b306 8 * http://www.apache.org/licenses/LICENSE-2.0
ram54288 0:a7a43371b306 9 *
ram54288 0:a7a43371b306 10 * Unless required by applicable law or agreed to in writing, software
ram54288 0:a7a43371b306 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
ram54288 0:a7a43371b306 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
ram54288 0:a7a43371b306 13 * See the License for the specific language governing permissions and
ram54288 0:a7a43371b306 14 * limitations under the License.
ram54288 0:a7a43371b306 15 */
ram54288 0:a7a43371b306 16
ram54288 0:a7a43371b306 17 #include "mbed-client/m2mfirmware.h"
ram54288 0:a7a43371b306 18 #include "mbed-client/m2mconstants.h"
ram54288 0:a7a43371b306 19 #include "mbed-client/m2mobject.h"
ram54288 0:a7a43371b306 20 #include "mbed-client/m2mobjectinstance.h"
ram54288 0:a7a43371b306 21 #include "mbed-client/m2mresource.h"
ram54288 0:a7a43371b306 22 #include "include/nsdlaccesshelper.h"
ram54288 0:a7a43371b306 23
ram54288 0:a7a43371b306 24 #define BUFFER_SIZE 21
ram54288 0:a7a43371b306 25 #define TRACE_GROUP "mClt"
ram54288 0:a7a43371b306 26
ram54288 0:a7a43371b306 27 M2MFirmware* M2MFirmware::_instance = NULL;
ram54288 0:a7a43371b306 28
ram54288 0:a7a43371b306 29 M2MFirmware* M2MFirmware::get_instance()
ram54288 0:a7a43371b306 30 {
ram54288 0:a7a43371b306 31 if(_instance == NULL) {
ram54288 0:a7a43371b306 32 _instance = new M2MFirmware();
ram54288 0:a7a43371b306 33 }
ram54288 0:a7a43371b306 34 return _instance;
ram54288 0:a7a43371b306 35 }
ram54288 0:a7a43371b306 36
ram54288 0:a7a43371b306 37 void M2MFirmware::delete_instance()
ram54288 0:a7a43371b306 38 {
ram54288 0:a7a43371b306 39 delete _instance;
ram54288 0:a7a43371b306 40 _instance = NULL;
ram54288 0:a7a43371b306 41 }
ram54288 0:a7a43371b306 42
ram54288 0:a7a43371b306 43 M2MFirmware::M2MFirmware()
ram54288 0:a7a43371b306 44 : M2MObject(M2M_FIRMWARE_ID, stringdup(M2M_FIRMWARE_ID))
ram54288 0:a7a43371b306 45 {
ram54288 0:a7a43371b306 46 M2MBase::set_register_uri(false);
ram54288 0:a7a43371b306 47 M2MBase::set_operation(M2MBase::GET_PUT_ALLOWED);
ram54288 0:a7a43371b306 48 _firmware_instance = M2MObject::create_object_instance();
ram54288 0:a7a43371b306 49 if(_firmware_instance) {
ram54288 0:a7a43371b306 50 _firmware_instance->set_operation(M2MBase::GET_PUT_ALLOWED);
ram54288 0:a7a43371b306 51 create_mandatory_resources();
ram54288 0:a7a43371b306 52 }
ram54288 0:a7a43371b306 53 }
ram54288 0:a7a43371b306 54
ram54288 0:a7a43371b306 55 M2MFirmware::~M2MFirmware()
ram54288 0:a7a43371b306 56 {
ram54288 0:a7a43371b306 57 }
ram54288 0:a7a43371b306 58
ram54288 0:a7a43371b306 59 // Conditionally put the static part of parameter struct into flash.
ram54288 0:a7a43371b306 60 // Unfortunately this can't be done yet by default as there is old API which
ram54288 0:a7a43371b306 61 // may be used to modify the values in sn_nsdl_static_resource_parameters_s.
ram54288 0:a7a43371b306 62 #ifdef MEMORY_OPTIMIZED_API
ram54288 0:a7a43371b306 63 #define STATIC_PARAM_TYPE const
ram54288 0:a7a43371b306 64 #else
ram54288 0:a7a43371b306 65 #define STATIC_PARAM_TYPE
ram54288 0:a7a43371b306 66 #endif
ram54288 0:a7a43371b306 67
ram54288 0:a7a43371b306 68 #define PACKAGE_PATH FIRMWARE_PATH_PREFIX FIRMWARE_PACKAGE
ram54288 0:a7a43371b306 69
ram54288 0:a7a43371b306 70 STATIC_PARAM_TYPE
ram54288 0:a7a43371b306 71 static sn_nsdl_static_resource_parameters_s firmware_package_params_static = {
ram54288 0:a7a43371b306 72 (char*)OMA_RESOURCE_TYPE, // resource_type_ptr
ram54288 0:a7a43371b306 73 (char*)"", // interface_description_ptr
ram54288 0:a7a43371b306 74 (uint8_t*)PACKAGE_PATH, // path
ram54288 0:a7a43371b306 75 (uint8_t*)"", // resource
ram54288 0:a7a43371b306 76 5, // strlen("5/0/0")
ram54288 0:a7a43371b306 77 0, // resourcelen
ram54288 0:a7a43371b306 78 false, // external_memory_block
ram54288 0:a7a43371b306 79 SN_GRS_DYNAMIC, // mode
ram54288 0:a7a43371b306 80 false // free_on_delete
ram54288 0:a7a43371b306 81 };
ram54288 0:a7a43371b306 82
ram54288 0:a7a43371b306 83 #define PACKAGE_URI_PATH FIRMWARE_PATH_PREFIX FIRMWARE_PACKAGE_URI
ram54288 0:a7a43371b306 84
ram54288 0:a7a43371b306 85 STATIC_PARAM_TYPE
ram54288 0:a7a43371b306 86 static sn_nsdl_static_resource_parameters_s firmware_package_uri_params_static = {
ram54288 0:a7a43371b306 87 (char*)OMA_RESOURCE_TYPE, // resource_type_ptr
ram54288 0:a7a43371b306 88 (char*)"", // interface_description_ptr
ram54288 0:a7a43371b306 89 (uint8_t*)PACKAGE_URI_PATH, // path
ram54288 0:a7a43371b306 90 (uint8_t*)"", // resource
ram54288 0:a7a43371b306 91 5, // strlen("5/0/1")
ram54288 0:a7a43371b306 92 0, // resourcelen
ram54288 0:a7a43371b306 93 false, // external_memory_block
ram54288 0:a7a43371b306 94 SN_GRS_DYNAMIC, // mode
ram54288 0:a7a43371b306 95 false // free_on_delete
ram54288 0:a7a43371b306 96 };
ram54288 0:a7a43371b306 97
ram54288 0:a7a43371b306 98 #define UPDATE_PATH FIRMWARE_PATH_PREFIX FIRMWARE_UPDATE
ram54288 0:a7a43371b306 99
ram54288 0:a7a43371b306 100 STATIC_PARAM_TYPE
ram54288 0:a7a43371b306 101 static sn_nsdl_static_resource_parameters_s firmware_update_params_static = {
ram54288 0:a7a43371b306 102 (char*)OMA_RESOURCE_TYPE, // resource_type_ptr
ram54288 0:a7a43371b306 103 (char*)"", // interface_description_ptr
ram54288 0:a7a43371b306 104 (uint8_t*)UPDATE_PATH, // path
ram54288 0:a7a43371b306 105 (uint8_t*)"", // resource
ram54288 0:a7a43371b306 106 5, // strlen(5/0/2)
ram54288 0:a7a43371b306 107 0, // resourcelen
ram54288 0:a7a43371b306 108 false, // external_memory_block
ram54288 0:a7a43371b306 109 SN_GRS_DYNAMIC, // mode
ram54288 0:a7a43371b306 110 false // free_on_delete
ram54288 0:a7a43371b306 111 };
ram54288 0:a7a43371b306 112
ram54288 0:a7a43371b306 113 #define STATE_URI_PATH FIRMWARE_PATH_PREFIX FIRMWARE_STATE
ram54288 0:a7a43371b306 114
ram54288 0:a7a43371b306 115 STATIC_PARAM_TYPE
ram54288 0:a7a43371b306 116 static sn_nsdl_static_resource_parameters_s firmware_state_params_static = {
ram54288 0:a7a43371b306 117 (char*)OMA_RESOURCE_TYPE, // resource_type_ptr
ram54288 0:a7a43371b306 118 (char*)"", // interface_description_ptr
ram54288 0:a7a43371b306 119 (uint8_t*)STATE_URI_PATH, // path
ram54288 0:a7a43371b306 120 (uint8_t*)"0", // resource
ram54288 0:a7a43371b306 121 5, // strlen("5/0/3")
ram54288 0:a7a43371b306 122 1, // resourcelen
ram54288 0:a7a43371b306 123 false, // external_memory_block
ram54288 0:a7a43371b306 124 SN_GRS_DYNAMIC, // mode
ram54288 0:a7a43371b306 125 false // free_on_delete
ram54288 0:a7a43371b306 126 };
ram54288 0:a7a43371b306 127
ram54288 0:a7a43371b306 128 #define UPDATE_RESULT_PATH FIRMWARE_PATH_PREFIX FIRMWARE_UPDATE_RESULT
ram54288 0:a7a43371b306 129
ram54288 0:a7a43371b306 130 STATIC_PARAM_TYPE
ram54288 0:a7a43371b306 131 static sn_nsdl_static_resource_parameters_s firmware_update_result_params_static = {
ram54288 0:a7a43371b306 132 (char*)OMA_RESOURCE_TYPE, // resource_type_ptr
ram54288 0:a7a43371b306 133 (char*)"", // interface_description_ptr
ram54288 0:a7a43371b306 134 (uint8_t*)UPDATE_RESULT_PATH, // path
ram54288 0:a7a43371b306 135 (uint8_t*)"0", // resource
ram54288 0:a7a43371b306 136 5, // strlen(5/0/5)
ram54288 0:a7a43371b306 137 1, // resourcelen
ram54288 0:a7a43371b306 138 false, // external_memory_block
ram54288 0:a7a43371b306 139 SN_GRS_DYNAMIC, // mode
ram54288 0:a7a43371b306 140 false // free_on_delete
ram54288 0:a7a43371b306 141 };
ram54288 0:a7a43371b306 142
ram54288 0:a7a43371b306 143 static sn_nsdl_dynamic_resource_parameters_s firmware_package_params_dynamic = {
ram54288 0:a7a43371b306 144 __nsdl_c_callback,
ram54288 0:a7a43371b306 145 &firmware_package_params_static,
ram54288 0:a7a43371b306 146 {NULL, NULL}, // link
ram54288 0:a7a43371b306 147 COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
ram54288 0:a7a43371b306 148 M2MBase::PUT_ALLOWED, // access
ram54288 0:a7a43371b306 149 0, // registered
ram54288 0:a7a43371b306 150 false, // publish_uri
ram54288 0:a7a43371b306 151 false, // free_on_delete
ram54288 0:a7a43371b306 152 true // observable
ram54288 0:a7a43371b306 153 };
ram54288 0:a7a43371b306 154
ram54288 0:a7a43371b306 155 static sn_nsdl_dynamic_resource_parameters_s firmware_package_uri_params_dynamic = {
ram54288 0:a7a43371b306 156 __nsdl_c_callback,
ram54288 0:a7a43371b306 157 &firmware_package_uri_params_static,
ram54288 0:a7a43371b306 158 {NULL, NULL}, // link
ram54288 0:a7a43371b306 159 COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
ram54288 0:a7a43371b306 160 M2MBase::PUT_ALLOWED, // access
ram54288 0:a7a43371b306 161 0, // registered
ram54288 0:a7a43371b306 162 false, // publish_uri
ram54288 0:a7a43371b306 163 false, // free_on_delete
ram54288 0:a7a43371b306 164 true // observable
ram54288 0:a7a43371b306 165 };
ram54288 0:a7a43371b306 166
ram54288 0:a7a43371b306 167 static sn_nsdl_dynamic_resource_parameters_s firmware_update_params_dynamic = {
ram54288 0:a7a43371b306 168 __nsdl_c_callback,
ram54288 0:a7a43371b306 169 &firmware_update_params_static,
ram54288 0:a7a43371b306 170 {NULL, NULL}, // link
ram54288 0:a7a43371b306 171 COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
ram54288 0:a7a43371b306 172 M2MBase::NOT_ALLOWED, // access
ram54288 0:a7a43371b306 173 0, // registered
ram54288 0:a7a43371b306 174 false, // publish_uri
ram54288 0:a7a43371b306 175 false, // free_on_delete
ram54288 0:a7a43371b306 176 true // observable
ram54288 0:a7a43371b306 177 };
ram54288 0:a7a43371b306 178
ram54288 0:a7a43371b306 179 static sn_nsdl_dynamic_resource_parameters_s firmware_state_params_dynamic = {
ram54288 0:a7a43371b306 180 __nsdl_c_callback,
ram54288 0:a7a43371b306 181 &firmware_state_params_static,
ram54288 0:a7a43371b306 182 {NULL, NULL}, // link
ram54288 0:a7a43371b306 183 COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
ram54288 0:a7a43371b306 184 M2MBase::GET_ALLOWED, // access
ram54288 0:a7a43371b306 185 0, // registered
ram54288 0:a7a43371b306 186 false, // publish_uri
ram54288 0:a7a43371b306 187 false, // free_on_delete
ram54288 0:a7a43371b306 188 true // observable
ram54288 0:a7a43371b306 189 };
ram54288 0:a7a43371b306 190
ram54288 0:a7a43371b306 191 static sn_nsdl_dynamic_resource_parameters_s firmware_update_result_params_dynamic = {
ram54288 0:a7a43371b306 192 __nsdl_c_callback,
ram54288 0:a7a43371b306 193 &firmware_update_result_params_static,
ram54288 0:a7a43371b306 194 {NULL, NULL}, // link
ram54288 0:a7a43371b306 195 COAP_CONTENT_OMA_PLAIN_TEXT_TYPE, // coap_content_type
ram54288 0:a7a43371b306 196 M2MBase::GET_ALLOWED, // access
ram54288 0:a7a43371b306 197 0, // registered
ram54288 0:a7a43371b306 198 false, // publish_uri
ram54288 0:a7a43371b306 199 false, // free_on_delete
ram54288 0:a7a43371b306 200 true // observable
ram54288 0:a7a43371b306 201 };
ram54288 0:a7a43371b306 202 const static M2MBase::lwm2m_parameters firmware_package_params = {
ram54288 0:a7a43371b306 203 0, // max_age
ram54288 0:a7a43371b306 204 0, // instance_id
ram54288 0:a7a43371b306 205 0, // name_id
ram54288 0:a7a43371b306 206 (char*)FIRMWARE_PACKAGE, // name
ram54288 0:a7a43371b306 207 &firmware_package_params_dynamic,
ram54288 0:a7a43371b306 208 M2MBase::Resource, // base_type
ram54288 0:a7a43371b306 209 false // free_on_delete
ram54288 0:a7a43371b306 210 };
ram54288 0:a7a43371b306 211
ram54288 0:a7a43371b306 212 const static M2MBase::lwm2m_parameters firmware_package_uri_params = {
ram54288 0:a7a43371b306 213 0, // max_age
ram54288 0:a7a43371b306 214 0, // instance_id
ram54288 0:a7a43371b306 215 0, // name_id
ram54288 0:a7a43371b306 216 (char*)FIRMWARE_PACKAGE_URI, // name
ram54288 0:a7a43371b306 217 &firmware_package_uri_params_dynamic,
ram54288 0:a7a43371b306 218 M2MBase::Resource, // base_type
ram54288 0:a7a43371b306 219 false // free_on_delete
ram54288 0:a7a43371b306 220 };
ram54288 0:a7a43371b306 221
ram54288 0:a7a43371b306 222 const static M2MBase::lwm2m_parameters firmware_update_params = {
ram54288 0:a7a43371b306 223 0, // max_age
ram54288 0:a7a43371b306 224 0, // instance_id
ram54288 0:a7a43371b306 225 0, // name_id
ram54288 0:a7a43371b306 226 (char*)FIRMWARE_UPDATE, // name
ram54288 0:a7a43371b306 227 &firmware_update_params_dynamic,
ram54288 0:a7a43371b306 228 M2MBase::Resource, // base_type
ram54288 0:a7a43371b306 229 false // free_on_delete
ram54288 0:a7a43371b306 230 };
ram54288 0:a7a43371b306 231
ram54288 0:a7a43371b306 232 const static M2MBase::lwm2m_parameters firmware_state_params = {
ram54288 0:a7a43371b306 233 0, // max_age
ram54288 0:a7a43371b306 234 0, // instance_id
ram54288 0:a7a43371b306 235 0, // name_id
ram54288 0:a7a43371b306 236 (char*)FIRMWARE_STATE, // name
ram54288 0:a7a43371b306 237 &firmware_state_params_dynamic,
ram54288 0:a7a43371b306 238 M2MBase::Resource, // base_type
ram54288 0:a7a43371b306 239 false // free_on_delete
ram54288 0:a7a43371b306 240 };
ram54288 0:a7a43371b306 241
ram54288 0:a7a43371b306 242 const static M2MBase::lwm2m_parameters firmware_update_result_params = {
ram54288 0:a7a43371b306 243 0, // max_age
ram54288 0:a7a43371b306 244 0, // instance_id
ram54288 0:a7a43371b306 245 0, // name_id
ram54288 0:a7a43371b306 246 (char*)FIRMWARE_UPDATE_RESULT, // name
ram54288 0:a7a43371b306 247 &firmware_update_result_params_dynamic,
ram54288 0:a7a43371b306 248 M2MBase::Resource, // base_type
ram54288 0:a7a43371b306 249 false // free_on_delete
ram54288 0:a7a43371b306 250 };
ram54288 0:a7a43371b306 251
ram54288 0:a7a43371b306 252 void M2MFirmware::create_mandatory_resources()
ram54288 0:a7a43371b306 253 {
ram54288 0:a7a43371b306 254 _firmware_instance->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
ram54288 0:a7a43371b306 255
ram54288 0:a7a43371b306 256 M2MResource* res;
ram54288 0:a7a43371b306 257
ram54288 0:a7a43371b306 258 // todo:
ram54288 0:a7a43371b306 259 // perhaps we should have a API for batch creation of objects by using a array
ram54288 0:a7a43371b306 260 // of lwm2m_parameters.
ram54288 0:a7a43371b306 261
ram54288 0:a7a43371b306 262 res = _firmware_instance->create_dynamic_resource(&firmware_package_params,
ram54288 0:a7a43371b306 263 M2MResourceInstance::OPAQUE,
ram54288 0:a7a43371b306 264 false);
ram54288 0:a7a43371b306 265
ram54288 0:a7a43371b306 266 res = _firmware_instance->create_dynamic_resource(&firmware_package_uri_params,
ram54288 0:a7a43371b306 267 M2MResourceInstance::STRING,
ram54288 0:a7a43371b306 268 false);
ram54288 0:a7a43371b306 269
ram54288 0:a7a43371b306 270 res = _firmware_instance->create_dynamic_resource(&firmware_update_params,
ram54288 0:a7a43371b306 271 M2MResourceInstance::OPAQUE,
ram54288 0:a7a43371b306 272 false);
ram54288 0:a7a43371b306 273
ram54288 0:a7a43371b306 274 res = _firmware_instance->create_dynamic_resource(&firmware_state_params,
ram54288 0:a7a43371b306 275 M2MResourceInstance::INTEGER,
ram54288 0:a7a43371b306 276 true);
ram54288 0:a7a43371b306 277
ram54288 0:a7a43371b306 278 res = _firmware_instance->create_dynamic_resource(&firmware_update_result_params,
ram54288 0:a7a43371b306 279 M2MResourceInstance::INTEGER,
ram54288 0:a7a43371b306 280 true);
ram54288 0:a7a43371b306 281 }
ram54288 0:a7a43371b306 282
ram54288 0:a7a43371b306 283 M2MResource* M2MFirmware::create_resource(FirmwareResource resource, const String &value)
ram54288 0:a7a43371b306 284 {
ram54288 0:a7a43371b306 285 M2MResource* res = NULL;
ram54288 0:a7a43371b306 286 const char* firmware_id_ptr = "";
ram54288 0:a7a43371b306 287 M2MBase::Operation operation = M2MBase::GET_ALLOWED;
ram54288 0:a7a43371b306 288 if(!is_resource_present(resource)) {
ram54288 0:a7a43371b306 289 switch(resource) {
ram54288 0:a7a43371b306 290 case PackageName:
ram54288 0:a7a43371b306 291 firmware_id_ptr = FIRMWARE_PACKAGE_NAME;
ram54288 0:a7a43371b306 292 break;
ram54288 0:a7a43371b306 293 case PackageVersion:
ram54288 0:a7a43371b306 294 firmware_id_ptr = FIRMWARE_PACKAGE_VERSION;
ram54288 0:a7a43371b306 295 break;
ram54288 0:a7a43371b306 296 default:
ram54288 0:a7a43371b306 297 break;
ram54288 0:a7a43371b306 298 }
ram54288 0:a7a43371b306 299 }
ram54288 0:a7a43371b306 300 String firmware_id(firmware_id_ptr);
ram54288 0:a7a43371b306 301
ram54288 0:a7a43371b306 302 if(!firmware_id.empty() && value.size() < 256) {
ram54288 0:a7a43371b306 303 if(_firmware_instance) {
ram54288 0:a7a43371b306 304 res = _firmware_instance->create_dynamic_resource(firmware_id,
ram54288 0:a7a43371b306 305 OMA_RESOURCE_TYPE,
ram54288 0:a7a43371b306 306 M2MResourceInstance::STRING,
ram54288 0:a7a43371b306 307 false);
ram54288 0:a7a43371b306 308
ram54288 0:a7a43371b306 309 if(res) {
ram54288 0:a7a43371b306 310 res->set_register_uri(false);
ram54288 0:a7a43371b306 311 res->set_operation(operation);
ram54288 0:a7a43371b306 312 if(value.empty()) {
ram54288 0:a7a43371b306 313 res->clear_value();
ram54288 0:a7a43371b306 314 } else {
ram54288 0:a7a43371b306 315 res->set_value((const uint8_t*)value.c_str(),
ram54288 0:a7a43371b306 316 (uint32_t)value.length());
ram54288 0:a7a43371b306 317 }
ram54288 0:a7a43371b306 318 }
ram54288 0:a7a43371b306 319 }
ram54288 0:a7a43371b306 320 }
ram54288 0:a7a43371b306 321 return res;
ram54288 0:a7a43371b306 322 }
ram54288 0:a7a43371b306 323
ram54288 0:a7a43371b306 324 M2MResource* M2MFirmware::create_resource(FirmwareResource resource, int64_t value)
ram54288 0:a7a43371b306 325 {
ram54288 0:a7a43371b306 326 M2MResource* res = NULL;
ram54288 0:a7a43371b306 327 const char* firmware_id_ptr = "";
ram54288 0:a7a43371b306 328 M2MBase::Operation operation = M2MBase::GET_ALLOWED;
ram54288 0:a7a43371b306 329 if(!is_resource_present(resource)) {
ram54288 0:a7a43371b306 330 switch(resource) {
ram54288 0:a7a43371b306 331 case UpdateSupportedObjects:
ram54288 0:a7a43371b306 332 if(check_value_range(resource, value)) {
ram54288 0:a7a43371b306 333 firmware_id_ptr = FIRMWARE_UPDATE_SUPPORTED_OBJECTS;
ram54288 0:a7a43371b306 334 operation = M2MBase::GET_PUT_ALLOWED;
ram54288 0:a7a43371b306 335 }
ram54288 0:a7a43371b306 336 break;
ram54288 0:a7a43371b306 337 default:
ram54288 0:a7a43371b306 338 break;
ram54288 0:a7a43371b306 339 }
ram54288 0:a7a43371b306 340 }
ram54288 0:a7a43371b306 341
ram54288 0:a7a43371b306 342 const String firmware_id(firmware_id_ptr);
ram54288 0:a7a43371b306 343
ram54288 0:a7a43371b306 344 if(!firmware_id.empty()) {
ram54288 0:a7a43371b306 345 if(_firmware_instance) {
ram54288 0:a7a43371b306 346 res = _firmware_instance->create_dynamic_resource(firmware_id,
ram54288 0:a7a43371b306 347 OMA_RESOURCE_TYPE,
ram54288 0:a7a43371b306 348 M2MResourceInstance::INTEGER,
ram54288 0:a7a43371b306 349 false);
ram54288 0:a7a43371b306 350
ram54288 0:a7a43371b306 351 if(res) {
ram54288 0:a7a43371b306 352 res->set_register_uri(false);
ram54288 0:a7a43371b306 353
ram54288 0:a7a43371b306 354 res->set_operation(operation);
ram54288 0:a7a43371b306 355 res->set_value(value);
ram54288 0:a7a43371b306 356 }
ram54288 0:a7a43371b306 357 }
ram54288 0:a7a43371b306 358 }
ram54288 0:a7a43371b306 359 return res;
ram54288 0:a7a43371b306 360 }
ram54288 0:a7a43371b306 361
ram54288 0:a7a43371b306 362 bool M2MFirmware::set_resource_value(FirmwareResource resource,
ram54288 0:a7a43371b306 363 const String &value)
ram54288 0:a7a43371b306 364 {
ram54288 0:a7a43371b306 365 bool success = false;
ram54288 0:a7a43371b306 366 M2MResource* res = get_resource(resource);
ram54288 0:a7a43371b306 367 if(res) {
ram54288 0:a7a43371b306 368 if(M2MFirmware::PackageUri == resource ||
ram54288 0:a7a43371b306 369 M2MFirmware::PackageName == resource ||
ram54288 0:a7a43371b306 370 M2MFirmware::PackageVersion == resource) {
ram54288 0:a7a43371b306 371 if (value.size() < 256) {
ram54288 0:a7a43371b306 372 if(value.empty()) {
ram54288 0:a7a43371b306 373 res->clear_value();
ram54288 0:a7a43371b306 374 success = true;
ram54288 0:a7a43371b306 375 } else {
ram54288 0:a7a43371b306 376 success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
ram54288 0:a7a43371b306 377 }
ram54288 0:a7a43371b306 378 }
ram54288 0:a7a43371b306 379 }
ram54288 0:a7a43371b306 380 }
ram54288 0:a7a43371b306 381 return success;
ram54288 0:a7a43371b306 382 }
ram54288 0:a7a43371b306 383
ram54288 0:a7a43371b306 384 bool M2MFirmware::set_resource_value(FirmwareResource resource,
ram54288 0:a7a43371b306 385 int64_t value)
ram54288 0:a7a43371b306 386 {
ram54288 0:a7a43371b306 387 bool success = false;
ram54288 0:a7a43371b306 388 M2MResource* res = get_resource(resource);
ram54288 0:a7a43371b306 389 if(res) {
ram54288 0:a7a43371b306 390 if(M2MFirmware::State == resource ||
ram54288 0:a7a43371b306 391 M2MFirmware::UpdateSupportedObjects == resource ||
ram54288 0:a7a43371b306 392 M2MFirmware::UpdateResult == resource) {
ram54288 0:a7a43371b306 393 // If it is any of the above resource
ram54288 0:a7a43371b306 394 // set the value of the resource.
ram54288 0:a7a43371b306 395 if (check_value_range(resource, value)) {
ram54288 0:a7a43371b306 396
ram54288 0:a7a43371b306 397 success = res->set_value(value);
ram54288 0:a7a43371b306 398 }
ram54288 0:a7a43371b306 399 }
ram54288 0:a7a43371b306 400 }
ram54288 0:a7a43371b306 401 return success;
ram54288 0:a7a43371b306 402 }
ram54288 0:a7a43371b306 403
ram54288 0:a7a43371b306 404 bool M2MFirmware::set_resource_value(FirmwareResource resource,
ram54288 0:a7a43371b306 405 const uint8_t *value,
ram54288 0:a7a43371b306 406 const uint32_t length)
ram54288 0:a7a43371b306 407 {
ram54288 0:a7a43371b306 408 bool success = false;
ram54288 0:a7a43371b306 409 M2MResource* res = get_resource(resource);
ram54288 0:a7a43371b306 410 if(res) {
ram54288 0:a7a43371b306 411 if(M2MFirmware::Package == resource) {
ram54288 0:a7a43371b306 412 success = res->set_value(value,length);
ram54288 0:a7a43371b306 413 }
ram54288 0:a7a43371b306 414 }
ram54288 0:a7a43371b306 415 return success;
ram54288 0:a7a43371b306 416 }
ram54288 0:a7a43371b306 417
ram54288 0:a7a43371b306 418 bool M2MFirmware::is_resource_present(FirmwareResource resource) const
ram54288 0:a7a43371b306 419 {
ram54288 0:a7a43371b306 420 bool success = false;
ram54288 0:a7a43371b306 421 M2MResource* res = get_resource(resource);
ram54288 0:a7a43371b306 422 if(res) {
ram54288 0:a7a43371b306 423 success = true;
ram54288 0:a7a43371b306 424 }
ram54288 0:a7a43371b306 425 return success;
ram54288 0:a7a43371b306 426 }
ram54288 0:a7a43371b306 427
ram54288 0:a7a43371b306 428 const char* M2MFirmware::resource_name(FirmwareResource resource)
ram54288 0:a7a43371b306 429 {
ram54288 0:a7a43371b306 430 const char* res_name = "";
ram54288 0:a7a43371b306 431 switch(resource) {
ram54288 0:a7a43371b306 432 case Package:
ram54288 0:a7a43371b306 433 res_name = FIRMWARE_PACKAGE;
ram54288 0:a7a43371b306 434 break;
ram54288 0:a7a43371b306 435 case PackageUri:
ram54288 0:a7a43371b306 436 res_name = FIRMWARE_PACKAGE_URI;
ram54288 0:a7a43371b306 437 break;
ram54288 0:a7a43371b306 438 case Update:
ram54288 0:a7a43371b306 439 res_name = FIRMWARE_UPDATE;
ram54288 0:a7a43371b306 440 break;
ram54288 0:a7a43371b306 441 case State:
ram54288 0:a7a43371b306 442 res_name = FIRMWARE_STATE;
ram54288 0:a7a43371b306 443 break;
ram54288 0:a7a43371b306 444 case UpdateSupportedObjects:
ram54288 0:a7a43371b306 445 res_name = FIRMWARE_UPDATE_SUPPORTED_OBJECTS;
ram54288 0:a7a43371b306 446 break;
ram54288 0:a7a43371b306 447 case UpdateResult:
ram54288 0:a7a43371b306 448 res_name = FIRMWARE_UPDATE_RESULT;
ram54288 0:a7a43371b306 449 break;
ram54288 0:a7a43371b306 450 case PackageName:
ram54288 0:a7a43371b306 451 res_name = FIRMWARE_PACKAGE_NAME;
ram54288 0:a7a43371b306 452 break;
ram54288 0:a7a43371b306 453 case PackageVersion:
ram54288 0:a7a43371b306 454 res_name = FIRMWARE_PACKAGE_VERSION;
ram54288 0:a7a43371b306 455 break;
ram54288 0:a7a43371b306 456 }
ram54288 0:a7a43371b306 457 return res_name;
ram54288 0:a7a43371b306 458 }
ram54288 0:a7a43371b306 459
ram54288 0:a7a43371b306 460 uint16_t M2MFirmware::per_resource_count(FirmwareResource res) const
ram54288 0:a7a43371b306 461 {
ram54288 0:a7a43371b306 462 uint16_t count = 0;
ram54288 0:a7a43371b306 463 if(_firmware_instance) {
ram54288 0:a7a43371b306 464 count = _firmware_instance->resource_count(resource_name(res));
ram54288 0:a7a43371b306 465 }
ram54288 0:a7a43371b306 466 return count;
ram54288 0:a7a43371b306 467 }
ram54288 0:a7a43371b306 468
ram54288 0:a7a43371b306 469 uint16_t M2MFirmware::total_resource_count() const
ram54288 0:a7a43371b306 470 {
ram54288 0:a7a43371b306 471 uint16_t count = 0;
ram54288 0:a7a43371b306 472 if(_firmware_instance) {
ram54288 0:a7a43371b306 473 count = _firmware_instance->resources().size();
ram54288 0:a7a43371b306 474 }
ram54288 0:a7a43371b306 475 return count;
ram54288 0:a7a43371b306 476 }
ram54288 0:a7a43371b306 477
ram54288 0:a7a43371b306 478 uint32_t M2MFirmware::resource_value_buffer(FirmwareResource resource,
ram54288 0:a7a43371b306 479 uint8_t *&data) const
ram54288 0:a7a43371b306 480 {
ram54288 0:a7a43371b306 481 uint32_t size = 0;
ram54288 0:a7a43371b306 482 M2MResource* res = get_resource(resource);
ram54288 0:a7a43371b306 483 if(res) {
ram54288 0:a7a43371b306 484 if(M2MFirmware::Package == resource) {
ram54288 0:a7a43371b306 485 res->get_value(data,size);
ram54288 0:a7a43371b306 486 }
ram54288 0:a7a43371b306 487 }
ram54288 0:a7a43371b306 488 return size;
ram54288 0:a7a43371b306 489 }
ram54288 0:a7a43371b306 490
ram54288 0:a7a43371b306 491 M2MResource* M2MFirmware::get_resource(FirmwareResource res) const
ram54288 0:a7a43371b306 492 {
ram54288 0:a7a43371b306 493 M2MResource* res_object = NULL;
ram54288 0:a7a43371b306 494 if(_firmware_instance) {
ram54288 0:a7a43371b306 495 const char* res_name_ptr = "";
ram54288 0:a7a43371b306 496 switch(res) {
ram54288 0:a7a43371b306 497 case Package:
ram54288 0:a7a43371b306 498 res_name_ptr = FIRMWARE_PACKAGE;
ram54288 0:a7a43371b306 499 break;
ram54288 0:a7a43371b306 500 case PackageUri:
ram54288 0:a7a43371b306 501 res_name_ptr = FIRMWARE_PACKAGE_URI;
ram54288 0:a7a43371b306 502 break;
ram54288 0:a7a43371b306 503 case Update:
ram54288 0:a7a43371b306 504 res_name_ptr = FIRMWARE_UPDATE;
ram54288 0:a7a43371b306 505 break;
ram54288 0:a7a43371b306 506 case State:
ram54288 0:a7a43371b306 507 res_name_ptr = FIRMWARE_STATE;
ram54288 0:a7a43371b306 508 break;
ram54288 0:a7a43371b306 509 case UpdateSupportedObjects:
ram54288 0:a7a43371b306 510 res_name_ptr = FIRMWARE_UPDATE_SUPPORTED_OBJECTS;
ram54288 0:a7a43371b306 511 break;
ram54288 0:a7a43371b306 512 case UpdateResult:
ram54288 0:a7a43371b306 513 res_name_ptr = FIRMWARE_UPDATE_RESULT;
ram54288 0:a7a43371b306 514 break;
ram54288 0:a7a43371b306 515 case PackageName:
ram54288 0:a7a43371b306 516 res_name_ptr = FIRMWARE_PACKAGE_NAME;
ram54288 0:a7a43371b306 517 break;
ram54288 0:a7a43371b306 518 case PackageVersion:
ram54288 0:a7a43371b306 519 res_name_ptr = FIRMWARE_PACKAGE_VERSION;
ram54288 0:a7a43371b306 520 break;
ram54288 0:a7a43371b306 521 }
ram54288 0:a7a43371b306 522
ram54288 0:a7a43371b306 523 res_object = _firmware_instance->resource(res_name_ptr);
ram54288 0:a7a43371b306 524 }
ram54288 0:a7a43371b306 525 return res_object;
ram54288 0:a7a43371b306 526 }
ram54288 0:a7a43371b306 527
ram54288 0:a7a43371b306 528 bool M2MFirmware::delete_resource(FirmwareResource resource)
ram54288 0:a7a43371b306 529 {
ram54288 0:a7a43371b306 530 bool success = false;
ram54288 0:a7a43371b306 531 if(M2MFirmware::UpdateSupportedObjects == resource ||
ram54288 0:a7a43371b306 532 M2MFirmware::PackageName == resource ||
ram54288 0:a7a43371b306 533 M2MFirmware::PackageVersion == resource) {
ram54288 0:a7a43371b306 534 if(_firmware_instance) {
ram54288 0:a7a43371b306 535 success = _firmware_instance->remove_resource(resource_name(resource));
ram54288 0:a7a43371b306 536 }
ram54288 0:a7a43371b306 537 }
ram54288 0:a7a43371b306 538 return success;
ram54288 0:a7a43371b306 539 }
ram54288 0:a7a43371b306 540
ram54288 0:a7a43371b306 541 int64_t M2MFirmware::resource_value_int(FirmwareResource resource) const
ram54288 0:a7a43371b306 542 {
ram54288 0:a7a43371b306 543 int64_t value = -1;
ram54288 0:a7a43371b306 544 M2MResource* res = get_resource(resource);
ram54288 0:a7a43371b306 545 if(res) {
ram54288 0:a7a43371b306 546 if(M2MFirmware::State == resource ||
ram54288 0:a7a43371b306 547 M2MFirmware::UpdateSupportedObjects == resource ||
ram54288 0:a7a43371b306 548 M2MFirmware::UpdateResult == resource) {
ram54288 0:a7a43371b306 549
ram54288 0:a7a43371b306 550 value = res->get_value_int();
ram54288 0:a7a43371b306 551 }
ram54288 0:a7a43371b306 552 }
ram54288 0:a7a43371b306 553 return value;
ram54288 0:a7a43371b306 554 }
ram54288 0:a7a43371b306 555
ram54288 0:a7a43371b306 556 String M2MFirmware::resource_value_string(FirmwareResource resource) const
ram54288 0:a7a43371b306 557 {
ram54288 0:a7a43371b306 558 String value = "";
ram54288 0:a7a43371b306 559 M2MResource* res = get_resource(resource);
ram54288 0:a7a43371b306 560 if(res) {
ram54288 0:a7a43371b306 561 if(M2MFirmware::PackageUri == resource ||
ram54288 0:a7a43371b306 562 M2MFirmware::PackageName == resource ||
ram54288 0:a7a43371b306 563 M2MFirmware::PackageVersion == resource) {
ram54288 0:a7a43371b306 564
ram54288 0:a7a43371b306 565 value = res->get_value_string();
ram54288 0:a7a43371b306 566 }
ram54288 0:a7a43371b306 567 }
ram54288 0:a7a43371b306 568 return value;
ram54288 0:a7a43371b306 569 }
ram54288 0:a7a43371b306 570
ram54288 0:a7a43371b306 571 bool M2MFirmware::check_value_range(FirmwareResource resource, int64_t value) const
ram54288 0:a7a43371b306 572 {
ram54288 0:a7a43371b306 573 bool success = false;
ram54288 0:a7a43371b306 574 switch (resource) {
ram54288 0:a7a43371b306 575 case UpdateSupportedObjects:
ram54288 0:a7a43371b306 576 if(value == 0 || value == 1) {
ram54288 0:a7a43371b306 577 success = true;
ram54288 0:a7a43371b306 578 }
ram54288 0:a7a43371b306 579 break;
ram54288 0:a7a43371b306 580 case State:
ram54288 0:a7a43371b306 581 if (value >= 0 && value <= 3) {
ram54288 0:a7a43371b306 582 success = true;
ram54288 0:a7a43371b306 583 M2MResource* updateRes = get_resource(M2MFirmware::Update);
ram54288 0:a7a43371b306 584 if (updateRes){
ram54288 0:a7a43371b306 585 if (value == M2MFirmware::Downloaded) {
ram54288 0:a7a43371b306 586 updateRes->set_operation(M2MBase::POST_ALLOWED);
ram54288 0:a7a43371b306 587 }
ram54288 0:a7a43371b306 588 else {
ram54288 0:a7a43371b306 589 updateRes->set_operation(M2MBase::NOT_ALLOWED);
ram54288 0:a7a43371b306 590 }
ram54288 0:a7a43371b306 591 }
ram54288 0:a7a43371b306 592 }
ram54288 0:a7a43371b306 593 break;
ram54288 0:a7a43371b306 594 case UpdateResult:
ram54288 0:a7a43371b306 595 if (value >= 0 && value <= 7) {
ram54288 0:a7a43371b306 596 success = true;
ram54288 0:a7a43371b306 597 }
ram54288 0:a7a43371b306 598 break;
ram54288 0:a7a43371b306 599 default:
ram54288 0:a7a43371b306 600 break;
ram54288 0:a7a43371b306 601 }
ram54288 0:a7a43371b306 602 return success;
ram54288 0:a7a43371b306 603 }
ram54288 0:a7a43371b306 604