boting ren / Mbed OS BLEClient_mbedDevConn
Committer:
Ren Boting
Date:
Tue Sep 05 11:56:13 2017 +0900
Revision:
2:b894b3508057
Parent:
0:29983394c6b6
Update all libraries and reform main.cpp

Who changed what in which revision?

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