Donald Meyers / Mbed OS evan
Committer:
djmeyers
Date:
Sat Mar 18 22:37:16 2017 +0000
Revision:
0:06ee5f8a484a
Initial commit

Who changed what in which revision?

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