sandbox / mbed-client

Fork of mbed-client by Christopher Haster

Committer:
Yogesh Pande
Date:
Sat Apr 02 00:31:13 2016 +0300
Revision:
4:ae5178938864
Parent:
1:79b6cc67d8b4
Latest updated sources from Github and some trace group refactor.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 1:79b6cc67d8b4 1 /*
Christopher Haster 1:79b6cc67d8b4 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
Christopher Haster 1:79b6cc67d8b4 3 * SPDX-License-Identifier: Apache-2.0
Christopher Haster 1:79b6cc67d8b4 4 * Licensed under the Apache License, Version 2.0 (the License); you may
Christopher Haster 1:79b6cc67d8b4 5 * not use this file except in compliance with the License.
Christopher Haster 1:79b6cc67d8b4 6 * You may obtain a copy of the License at
Christopher Haster 1:79b6cc67d8b4 7 *
Christopher Haster 1:79b6cc67d8b4 8 * http://www.apache.org/licenses/LICENSE-2.0
Christopher Haster 1:79b6cc67d8b4 9 *
Christopher Haster 1:79b6cc67d8b4 10 * Unless required by applicable law or agreed to in writing, software
Christopher Haster 1:79b6cc67d8b4 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
Christopher Haster 1:79b6cc67d8b4 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Christopher Haster 1:79b6cc67d8b4 13 * See the License for the specific language governing permissions and
Christopher Haster 1:79b6cc67d8b4 14 * limitations under the License.
Christopher Haster 1:79b6cc67d8b4 15 */
Christopher Haster 1:79b6cc67d8b4 16 #include <cstdio>
Christopher Haster 1:79b6cc67d8b4 17 #include "mbed-client/m2mfirmware.h"
Christopher Haster 1:79b6cc67d8b4 18 #include "mbed-client/m2mconstants.h"
Christopher Haster 1:79b6cc67d8b4 19 #include "mbed-client/m2mobject.h"
Christopher Haster 1:79b6cc67d8b4 20 #include "mbed-client/m2mobjectinstance.h"
Christopher Haster 1:79b6cc67d8b4 21 #include "mbed-client/m2mresource.h"
Christopher Haster 1:79b6cc67d8b4 22
Yogesh Pande 4:ae5178938864 23 #define BUFFER_SIZE 21
Yogesh Pande 4:ae5178938864 24 #define TRACE_GROUP "mClt"
Yogesh Pande 4:ae5178938864 25
Christopher Haster 1:79b6cc67d8b4 26 M2MFirmware* M2MFirmware::_instance = NULL;
Christopher Haster 1:79b6cc67d8b4 27
Christopher Haster 1:79b6cc67d8b4 28 M2MFirmware* M2MFirmware::get_instance()
Christopher Haster 1:79b6cc67d8b4 29 {
Christopher Haster 1:79b6cc67d8b4 30 if(_instance == NULL) {
Christopher Haster 1:79b6cc67d8b4 31 _instance = new M2MFirmware();
Christopher Haster 1:79b6cc67d8b4 32 }
Christopher Haster 1:79b6cc67d8b4 33 return _instance;
Christopher Haster 1:79b6cc67d8b4 34 }
Christopher Haster 1:79b6cc67d8b4 35
Christopher Haster 1:79b6cc67d8b4 36 void M2MFirmware::delete_instance()
Christopher Haster 1:79b6cc67d8b4 37 {
Christopher Haster 1:79b6cc67d8b4 38 if(_instance) {
Christopher Haster 1:79b6cc67d8b4 39 delete _instance;
Christopher Haster 1:79b6cc67d8b4 40 _instance = NULL;
Christopher Haster 1:79b6cc67d8b4 41 }
Christopher Haster 1:79b6cc67d8b4 42 }
Christopher Haster 1:79b6cc67d8b4 43
Christopher Haster 1:79b6cc67d8b4 44 M2MFirmware::M2MFirmware()
Christopher Haster 1:79b6cc67d8b4 45 : M2MObject(M2M_FIRMWARE_ID)
Christopher Haster 1:79b6cc67d8b4 46 {
Yogesh Pande 4:ae5178938864 47 M2MBase::set_register_uri(false);
Yogesh Pande 4:ae5178938864 48 M2MBase::set_operation(M2MBase::GET_PUT_ALLOWED);
Christopher Haster 1:79b6cc67d8b4 49 _firmware_instance = M2MObject::create_object_instance();
Christopher Haster 1:79b6cc67d8b4 50 if(_firmware_instance) {
Yogesh Pande 4:ae5178938864 51 _firmware_instance->set_operation(M2MBase::GET_PUT_ALLOWED);
Christopher Haster 1:79b6cc67d8b4 52 create_mandatory_resources();
Christopher Haster 1:79b6cc67d8b4 53 }
Christopher Haster 1:79b6cc67d8b4 54 }
Christopher Haster 1:79b6cc67d8b4 55
Christopher Haster 1:79b6cc67d8b4 56 M2MFirmware::~M2MFirmware()
Christopher Haster 1:79b6cc67d8b4 57 {
Christopher Haster 1:79b6cc67d8b4 58 }
Christopher Haster 1:79b6cc67d8b4 59
Christopher Haster 1:79b6cc67d8b4 60 void M2MFirmware::create_mandatory_resources()
Christopher Haster 1:79b6cc67d8b4 61 {
Christopher Haster 1:79b6cc67d8b4 62 _firmware_instance->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
Christopher Haster 1:79b6cc67d8b4 63 M2MResource* res = _firmware_instance->create_dynamic_resource(FIRMWARE_PACKAGE,
Christopher Haster 1:79b6cc67d8b4 64 OMA_RESOURCE_TYPE,
Christopher Haster 1:79b6cc67d8b4 65 M2MResourceInstance::OPAQUE,
Christopher Haster 1:79b6cc67d8b4 66 false);
Christopher Haster 1:79b6cc67d8b4 67 if(res) {
Christopher Haster 1:79b6cc67d8b4 68 res->set_operation(M2MBase::PUT_ALLOWED);
Yogesh Pande 4:ae5178938864 69 res->set_register_uri(false);
Christopher Haster 1:79b6cc67d8b4 70 }
Christopher Haster 1:79b6cc67d8b4 71
Christopher Haster 1:79b6cc67d8b4 72 res = _firmware_instance->create_dynamic_resource(FIRMWARE_PACKAGE_URI,
Christopher Haster 1:79b6cc67d8b4 73 OMA_RESOURCE_TYPE,
Christopher Haster 1:79b6cc67d8b4 74 M2MResourceInstance::STRING,
Christopher Haster 1:79b6cc67d8b4 75 false);
Christopher Haster 1:79b6cc67d8b4 76 if(res) {
Christopher Haster 1:79b6cc67d8b4 77 res->set_operation(M2MBase::PUT_ALLOWED);
Yogesh Pande 4:ae5178938864 78 res->set_register_uri(false);
Christopher Haster 1:79b6cc67d8b4 79 }
Christopher Haster 1:79b6cc67d8b4 80
Christopher Haster 1:79b6cc67d8b4 81 res = _firmware_instance->create_dynamic_resource(FIRMWARE_UPDATE,
Christopher Haster 1:79b6cc67d8b4 82 OMA_RESOURCE_TYPE,
Christopher Haster 1:79b6cc67d8b4 83 M2MResourceInstance::OPAQUE,
Christopher Haster 1:79b6cc67d8b4 84 false);
Christopher Haster 1:79b6cc67d8b4 85 if(res) {
Christopher Haster 1:79b6cc67d8b4 86 res->set_operation(M2MBase::NOT_ALLOWED);
Yogesh Pande 4:ae5178938864 87 res->set_register_uri(false);
Christopher Haster 1:79b6cc67d8b4 88 }
Christopher Haster 1:79b6cc67d8b4 89
Christopher Haster 1:79b6cc67d8b4 90 res = _firmware_instance->create_dynamic_resource(FIRMWARE_STATE,
Christopher Haster 1:79b6cc67d8b4 91 OMA_RESOURCE_TYPE,
Christopher Haster 1:79b6cc67d8b4 92 M2MResourceInstance::INTEGER,
Yogesh Pande 4:ae5178938864 93 true);
Yogesh Pande 4:ae5178938864 94 set_zero_value(res);
Yogesh Pande 4:ae5178938864 95 if(res) {
Christopher Haster 1:79b6cc67d8b4 96 res->set_operation(M2MBase::GET_ALLOWED);
Yogesh Pande 4:ae5178938864 97 res->set_register_uri(false);
Christopher Haster 1:79b6cc67d8b4 98 }
Christopher Haster 1:79b6cc67d8b4 99 res = _firmware_instance->create_dynamic_resource(FIRMWARE_UPDATE_RESULT,
Christopher Haster 1:79b6cc67d8b4 100 OMA_RESOURCE_TYPE,
Christopher Haster 1:79b6cc67d8b4 101 M2MResourceInstance::INTEGER,
Yogesh Pande 4:ae5178938864 102 true);
Yogesh Pande 4:ae5178938864 103 set_zero_value(res);
Christopher Haster 1:79b6cc67d8b4 104 if(res) {
Christopher Haster 1:79b6cc67d8b4 105 res->set_operation(M2MBase::GET_ALLOWED);
Yogesh Pande 4:ae5178938864 106 res->set_register_uri(false);
Christopher Haster 1:79b6cc67d8b4 107 }
Christopher Haster 1:79b6cc67d8b4 108 }
Christopher Haster 1:79b6cc67d8b4 109
Christopher Haster 1:79b6cc67d8b4 110 M2MResource* M2MFirmware::create_resource(FirmwareResource resource, const String &value)
Christopher Haster 1:79b6cc67d8b4 111 {
Christopher Haster 1:79b6cc67d8b4 112 M2MResource* res = NULL;
Christopher Haster 1:79b6cc67d8b4 113 String firmware_id = "";
Christopher Haster 1:79b6cc67d8b4 114 M2MBase::Operation operation = M2MBase::GET_ALLOWED;
Christopher Haster 1:79b6cc67d8b4 115 if(!is_resource_present(resource)) {
Christopher Haster 1:79b6cc67d8b4 116 switch(resource) {
Christopher Haster 1:79b6cc67d8b4 117 case PackageName:
Christopher Haster 1:79b6cc67d8b4 118 firmware_id = FIRMWARE_PACKAGE_NAME;
Christopher Haster 1:79b6cc67d8b4 119 break;
Christopher Haster 1:79b6cc67d8b4 120 case PackageVersion:
Christopher Haster 1:79b6cc67d8b4 121 firmware_id = FIRMWARE_PACKAGE_VERSION;
Christopher Haster 1:79b6cc67d8b4 122 break;
Christopher Haster 1:79b6cc67d8b4 123 default:
Christopher Haster 1:79b6cc67d8b4 124 break;
Christopher Haster 1:79b6cc67d8b4 125 }
Christopher Haster 1:79b6cc67d8b4 126 }
Christopher Haster 1:79b6cc67d8b4 127 if(!firmware_id.empty() && value.size() < 256) {
Christopher Haster 1:79b6cc67d8b4 128 if(_firmware_instance) {
Christopher Haster 1:79b6cc67d8b4 129 res = _firmware_instance->create_dynamic_resource(firmware_id,
Christopher Haster 1:79b6cc67d8b4 130 OMA_RESOURCE_TYPE,
Christopher Haster 1:79b6cc67d8b4 131 M2MResourceInstance::STRING,
Christopher Haster 1:79b6cc67d8b4 132 false);
Christopher Haster 1:79b6cc67d8b4 133
Christopher Haster 1:79b6cc67d8b4 134 if(res) {
Yogesh Pande 4:ae5178938864 135 res->set_register_uri(false);
Christopher Haster 1:79b6cc67d8b4 136 res->set_operation(operation);
Christopher Haster 1:79b6cc67d8b4 137 if(value.empty()) {
Christopher Haster 1:79b6cc67d8b4 138 res->clear_value();
Christopher Haster 1:79b6cc67d8b4 139 } else {
Christopher Haster 1:79b6cc67d8b4 140 res->set_value((const uint8_t*)value.c_str(),
Christopher Haster 1:79b6cc67d8b4 141 (uint32_t)value.length());
Christopher Haster 1:79b6cc67d8b4 142 }
Christopher Haster 1:79b6cc67d8b4 143 }
Christopher Haster 1:79b6cc67d8b4 144 }
Christopher Haster 1:79b6cc67d8b4 145 }
Christopher Haster 1:79b6cc67d8b4 146 return res;
Christopher Haster 1:79b6cc67d8b4 147 }
Christopher Haster 1:79b6cc67d8b4 148
Christopher Haster 1:79b6cc67d8b4 149 M2MResource* M2MFirmware::create_resource(FirmwareResource resource, int64_t value)
Christopher Haster 1:79b6cc67d8b4 150 {
Christopher Haster 1:79b6cc67d8b4 151 M2MResource* res = NULL;
Christopher Haster 1:79b6cc67d8b4 152 String firmware_id = "";
Christopher Haster 1:79b6cc67d8b4 153 M2MBase::Operation operation = M2MBase::GET_ALLOWED;
Christopher Haster 1:79b6cc67d8b4 154 if(!is_resource_present(resource)) {
Christopher Haster 1:79b6cc67d8b4 155 switch(resource) {
Christopher Haster 1:79b6cc67d8b4 156 case UpdateSupportedObjects:
Christopher Haster 1:79b6cc67d8b4 157 if(check_value_range(resource, value)) {
Christopher Haster 1:79b6cc67d8b4 158 firmware_id = FIRMWARE_UPDATE_SUPPORTED_OBJECTS;
Christopher Haster 1:79b6cc67d8b4 159 operation = M2MBase::GET_PUT_ALLOWED;
Christopher Haster 1:79b6cc67d8b4 160 }
Christopher Haster 1:79b6cc67d8b4 161 break;
Christopher Haster 1:79b6cc67d8b4 162 default:
Christopher Haster 1:79b6cc67d8b4 163 break;
Christopher Haster 1:79b6cc67d8b4 164 }
Christopher Haster 1:79b6cc67d8b4 165 }
Christopher Haster 1:79b6cc67d8b4 166 if(!firmware_id.empty()) {
Christopher Haster 1:79b6cc67d8b4 167 if(_firmware_instance) {
Christopher Haster 1:79b6cc67d8b4 168 res = _firmware_instance->create_dynamic_resource(firmware_id,
Christopher Haster 1:79b6cc67d8b4 169 OMA_RESOURCE_TYPE,
Christopher Haster 1:79b6cc67d8b4 170 M2MResourceInstance::INTEGER,
Christopher Haster 1:79b6cc67d8b4 171 false);
Christopher Haster 1:79b6cc67d8b4 172
Christopher Haster 1:79b6cc67d8b4 173 if(res) {
Yogesh Pande 4:ae5178938864 174 res->set_register_uri(false);
Yogesh Pande 4:ae5178938864 175 char *buffer = (char*)malloc(BUFFER_SIZE);
Christopher Haster 1:79b6cc67d8b4 176 if(buffer) {
Yogesh Pande 4:ae5178938864 177 uint32_t size = m2m::itoa_c(value, buffer);
Yogesh Pande 4:ae5178938864 178 if (size <= BUFFER_SIZE) {
Yogesh Pande 4:ae5178938864 179 res->set_operation(operation);
Yogesh Pande 4:ae5178938864 180 res->set_value((const uint8_t*)buffer, size);
Yogesh Pande 4:ae5178938864 181 }
Yogesh Pande 4:ae5178938864 182 free(buffer);
Christopher Haster 1:79b6cc67d8b4 183 }
Christopher Haster 1:79b6cc67d8b4 184 }
Christopher Haster 1:79b6cc67d8b4 185 }
Christopher Haster 1:79b6cc67d8b4 186 }
Christopher Haster 1:79b6cc67d8b4 187 return res;
Christopher Haster 1:79b6cc67d8b4 188 }
Christopher Haster 1:79b6cc67d8b4 189
Christopher Haster 1:79b6cc67d8b4 190 bool M2MFirmware::set_resource_value(FirmwareResource resource,
Christopher Haster 1:79b6cc67d8b4 191 const String &value)
Christopher Haster 1:79b6cc67d8b4 192 {
Christopher Haster 1:79b6cc67d8b4 193 bool success = false;
Christopher Haster 1:79b6cc67d8b4 194 M2MResource* res = get_resource(resource);
Christopher Haster 1:79b6cc67d8b4 195 if(res) {
Christopher Haster 1:79b6cc67d8b4 196 if(M2MFirmware::PackageUri == resource ||
Christopher Haster 1:79b6cc67d8b4 197 M2MFirmware::PackageName == resource ||
Christopher Haster 1:79b6cc67d8b4 198 M2MFirmware::PackageVersion == resource) {
Christopher Haster 1:79b6cc67d8b4 199 if (value.size() < 256) {
Christopher Haster 1:79b6cc67d8b4 200 if(value.empty()) {
Christopher Haster 1:79b6cc67d8b4 201 res->clear_value();
Christopher Haster 1:79b6cc67d8b4 202 success = true;
Christopher Haster 1:79b6cc67d8b4 203 } else {
Christopher Haster 1:79b6cc67d8b4 204 success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
Christopher Haster 1:79b6cc67d8b4 205 }
Christopher Haster 1:79b6cc67d8b4 206 }
Christopher Haster 1:79b6cc67d8b4 207 }
Christopher Haster 1:79b6cc67d8b4 208 }
Christopher Haster 1:79b6cc67d8b4 209 return success;
Christopher Haster 1:79b6cc67d8b4 210 }
Christopher Haster 1:79b6cc67d8b4 211
Christopher Haster 1:79b6cc67d8b4 212 bool M2MFirmware::set_resource_value(FirmwareResource resource,
Christopher Haster 1:79b6cc67d8b4 213 int64_t value)
Christopher Haster 1:79b6cc67d8b4 214 {
Christopher Haster 1:79b6cc67d8b4 215 bool success = false;
Christopher Haster 1:79b6cc67d8b4 216 M2MResource* res = get_resource(resource);
Christopher Haster 1:79b6cc67d8b4 217 if(res) {
Christopher Haster 1:79b6cc67d8b4 218 if(M2MFirmware::State == resource ||
Christopher Haster 1:79b6cc67d8b4 219 M2MFirmware::UpdateSupportedObjects == resource ||
Christopher Haster 1:79b6cc67d8b4 220 M2MFirmware::UpdateResult == resource) {
Christopher Haster 1:79b6cc67d8b4 221 // If it is any of the above resource
Christopher Haster 1:79b6cc67d8b4 222 // set the value of the resource.
Christopher Haster 1:79b6cc67d8b4 223 if (check_value_range(resource, value)) {
Yogesh Pande 4:ae5178938864 224 char *buffer = (char*)malloc(BUFFER_SIZE);
Christopher Haster 1:79b6cc67d8b4 225 if(buffer) {
Yogesh Pande 4:ae5178938864 226 uint32_t size = m2m::itoa_c(value, buffer);
Yogesh Pande 4:ae5178938864 227 if (size <= BUFFER_SIZE) {
Yogesh Pande 4:ae5178938864 228 success = res->set_value((const uint8_t*)buffer, size);
Yogesh Pande 4:ae5178938864 229 }
Yogesh Pande 4:ae5178938864 230 free(buffer);
Christopher Haster 1:79b6cc67d8b4 231 }
Christopher Haster 1:79b6cc67d8b4 232 }
Christopher Haster 1:79b6cc67d8b4 233 }
Christopher Haster 1:79b6cc67d8b4 234 }
Christopher Haster 1:79b6cc67d8b4 235 return success;
Christopher Haster 1:79b6cc67d8b4 236 }
Christopher Haster 1:79b6cc67d8b4 237
Christopher Haster 1:79b6cc67d8b4 238 bool M2MFirmware::set_resource_value(FirmwareResource resource,
Christopher Haster 1:79b6cc67d8b4 239 const uint8_t *value,
Christopher Haster 1:79b6cc67d8b4 240 const uint32_t length)
Christopher Haster 1:79b6cc67d8b4 241 {
Christopher Haster 1:79b6cc67d8b4 242 bool success = false;
Christopher Haster 1:79b6cc67d8b4 243 M2MResource* res = get_resource(resource);
Christopher Haster 1:79b6cc67d8b4 244 if(res) {
Christopher Haster 1:79b6cc67d8b4 245 if(M2MFirmware::Package == resource) {
Christopher Haster 1:79b6cc67d8b4 246 success = res->set_value(value,length);
Christopher Haster 1:79b6cc67d8b4 247 }
Christopher Haster 1:79b6cc67d8b4 248 }
Christopher Haster 1:79b6cc67d8b4 249 return success;
Christopher Haster 1:79b6cc67d8b4 250 }
Christopher Haster 1:79b6cc67d8b4 251
Christopher Haster 1:79b6cc67d8b4 252 bool M2MFirmware::is_resource_present(FirmwareResource resource) const
Christopher Haster 1:79b6cc67d8b4 253 {
Christopher Haster 1:79b6cc67d8b4 254 bool success = false;
Christopher Haster 1:79b6cc67d8b4 255 M2MResource* res = get_resource(resource);
Christopher Haster 1:79b6cc67d8b4 256 if(res) {
Christopher Haster 1:79b6cc67d8b4 257 success = true;
Christopher Haster 1:79b6cc67d8b4 258 }
Christopher Haster 1:79b6cc67d8b4 259 return success;
Christopher Haster 1:79b6cc67d8b4 260 }
Christopher Haster 1:79b6cc67d8b4 261
Christopher Haster 1:79b6cc67d8b4 262 String M2MFirmware::resource_name(FirmwareResource resource) const
Christopher Haster 1:79b6cc67d8b4 263 {
Christopher Haster 1:79b6cc67d8b4 264 String res_name = "";
Christopher Haster 1:79b6cc67d8b4 265 switch(resource) {
Christopher Haster 1:79b6cc67d8b4 266 case Package:
Christopher Haster 1:79b6cc67d8b4 267 res_name = FIRMWARE_PACKAGE;
Christopher Haster 1:79b6cc67d8b4 268 break;
Christopher Haster 1:79b6cc67d8b4 269 case PackageUri:
Christopher Haster 1:79b6cc67d8b4 270 res_name = FIRMWARE_PACKAGE_URI;
Christopher Haster 1:79b6cc67d8b4 271 break;
Christopher Haster 1:79b6cc67d8b4 272 case Update:
Christopher Haster 1:79b6cc67d8b4 273 res_name = FIRMWARE_UPDATE;
Christopher Haster 1:79b6cc67d8b4 274 break;
Christopher Haster 1:79b6cc67d8b4 275 case State:
Christopher Haster 1:79b6cc67d8b4 276 res_name = FIRMWARE_STATE;
Christopher Haster 1:79b6cc67d8b4 277 break;
Christopher Haster 1:79b6cc67d8b4 278 case UpdateSupportedObjects:
Christopher Haster 1:79b6cc67d8b4 279 res_name = FIRMWARE_UPDATE_SUPPORTED_OBJECTS;
Christopher Haster 1:79b6cc67d8b4 280 break;
Christopher Haster 1:79b6cc67d8b4 281 case UpdateResult:
Christopher Haster 1:79b6cc67d8b4 282 res_name = FIRMWARE_UPDATE_RESULT;
Christopher Haster 1:79b6cc67d8b4 283 break;
Christopher Haster 1:79b6cc67d8b4 284 case PackageName:
Christopher Haster 1:79b6cc67d8b4 285 res_name = FIRMWARE_PACKAGE_NAME;
Christopher Haster 1:79b6cc67d8b4 286 break;
Christopher Haster 1:79b6cc67d8b4 287 case PackageVersion:
Christopher Haster 1:79b6cc67d8b4 288 res_name = FIRMWARE_PACKAGE_VERSION;
Christopher Haster 1:79b6cc67d8b4 289 break;
Christopher Haster 1:79b6cc67d8b4 290 }
Christopher Haster 1:79b6cc67d8b4 291 return res_name;
Christopher Haster 1:79b6cc67d8b4 292 }
Christopher Haster 1:79b6cc67d8b4 293
Christopher Haster 1:79b6cc67d8b4 294 uint16_t M2MFirmware::per_resource_count(FirmwareResource res) const
Christopher Haster 1:79b6cc67d8b4 295 {
Christopher Haster 1:79b6cc67d8b4 296 uint16_t count = 0;
Christopher Haster 1:79b6cc67d8b4 297 if(_firmware_instance) {
Christopher Haster 1:79b6cc67d8b4 298 count = _firmware_instance->resource_count(resource_name(res));
Christopher Haster 1:79b6cc67d8b4 299 }
Christopher Haster 1:79b6cc67d8b4 300 return count;
Christopher Haster 1:79b6cc67d8b4 301 }
Christopher Haster 1:79b6cc67d8b4 302
Christopher Haster 1:79b6cc67d8b4 303 uint16_t M2MFirmware::total_resource_count() const
Christopher Haster 1:79b6cc67d8b4 304 {
Christopher Haster 1:79b6cc67d8b4 305 uint16_t count = 0;
Christopher Haster 1:79b6cc67d8b4 306 if(_firmware_instance) {
Christopher Haster 1:79b6cc67d8b4 307 count = _firmware_instance->resources().size();
Christopher Haster 1:79b6cc67d8b4 308 }
Christopher Haster 1:79b6cc67d8b4 309 return count;
Christopher Haster 1:79b6cc67d8b4 310 }
Christopher Haster 1:79b6cc67d8b4 311
Christopher Haster 1:79b6cc67d8b4 312 uint32_t M2MFirmware::resource_value_buffer(FirmwareResource resource,
Christopher Haster 1:79b6cc67d8b4 313 uint8_t *&data) const
Christopher Haster 1:79b6cc67d8b4 314 {
Christopher Haster 1:79b6cc67d8b4 315 uint32_t size = 0;
Christopher Haster 1:79b6cc67d8b4 316 M2MResource* res = get_resource(resource);
Christopher Haster 1:79b6cc67d8b4 317 if(res) {
Christopher Haster 1:79b6cc67d8b4 318 if(M2MFirmware::Package == resource) {
Christopher Haster 1:79b6cc67d8b4 319 res->get_value(data,size);
Christopher Haster 1:79b6cc67d8b4 320 }
Christopher Haster 1:79b6cc67d8b4 321 }
Christopher Haster 1:79b6cc67d8b4 322 return size;
Christopher Haster 1:79b6cc67d8b4 323 }
Christopher Haster 1:79b6cc67d8b4 324
Christopher Haster 1:79b6cc67d8b4 325 M2MResource* M2MFirmware::get_resource(FirmwareResource res) const
Christopher Haster 1:79b6cc67d8b4 326 {
Christopher Haster 1:79b6cc67d8b4 327 M2MResource* res_object = NULL;
Christopher Haster 1:79b6cc67d8b4 328 if(_firmware_instance) {
Christopher Haster 1:79b6cc67d8b4 329 String res_name = "";
Christopher Haster 1:79b6cc67d8b4 330 switch(res) {
Christopher Haster 1:79b6cc67d8b4 331 case Package:
Christopher Haster 1:79b6cc67d8b4 332 res_name = FIRMWARE_PACKAGE;
Christopher Haster 1:79b6cc67d8b4 333 break;
Christopher Haster 1:79b6cc67d8b4 334 case PackageUri:
Christopher Haster 1:79b6cc67d8b4 335 res_name = FIRMWARE_PACKAGE_URI;
Christopher Haster 1:79b6cc67d8b4 336 break;
Christopher Haster 1:79b6cc67d8b4 337 case Update:
Christopher Haster 1:79b6cc67d8b4 338 res_name = FIRMWARE_UPDATE;
Christopher Haster 1:79b6cc67d8b4 339 break;
Christopher Haster 1:79b6cc67d8b4 340 case State:
Christopher Haster 1:79b6cc67d8b4 341 res_name = FIRMWARE_STATE;
Christopher Haster 1:79b6cc67d8b4 342 break;
Christopher Haster 1:79b6cc67d8b4 343 case UpdateSupportedObjects:
Christopher Haster 1:79b6cc67d8b4 344 res_name = FIRMWARE_UPDATE_SUPPORTED_OBJECTS;
Christopher Haster 1:79b6cc67d8b4 345 break;
Christopher Haster 1:79b6cc67d8b4 346 case UpdateResult:
Christopher Haster 1:79b6cc67d8b4 347 res_name = FIRMWARE_UPDATE_RESULT;
Christopher Haster 1:79b6cc67d8b4 348 break;
Christopher Haster 1:79b6cc67d8b4 349 case PackageName:
Christopher Haster 1:79b6cc67d8b4 350 res_name = FIRMWARE_PACKAGE_NAME;
Christopher Haster 1:79b6cc67d8b4 351 break;
Christopher Haster 1:79b6cc67d8b4 352 case PackageVersion:
Christopher Haster 1:79b6cc67d8b4 353 res_name = FIRMWARE_PACKAGE_VERSION;
Christopher Haster 1:79b6cc67d8b4 354 break;
Christopher Haster 1:79b6cc67d8b4 355 }
Christopher Haster 1:79b6cc67d8b4 356 res_object = _firmware_instance->resource(res_name);
Christopher Haster 1:79b6cc67d8b4 357 }
Christopher Haster 1:79b6cc67d8b4 358 return res_object;
Christopher Haster 1:79b6cc67d8b4 359 }
Christopher Haster 1:79b6cc67d8b4 360
Christopher Haster 1:79b6cc67d8b4 361 bool M2MFirmware::delete_resource(FirmwareResource resource)
Christopher Haster 1:79b6cc67d8b4 362 {
Christopher Haster 1:79b6cc67d8b4 363 bool success = false;
Christopher Haster 1:79b6cc67d8b4 364 if(M2MFirmware::UpdateSupportedObjects == resource ||
Christopher Haster 1:79b6cc67d8b4 365 M2MFirmware::PackageName == resource ||
Christopher Haster 1:79b6cc67d8b4 366 M2MFirmware::PackageVersion == resource) {
Christopher Haster 1:79b6cc67d8b4 367 if(_firmware_instance) {
Christopher Haster 1:79b6cc67d8b4 368 success = _firmware_instance->remove_resource(resource_name(resource));
Christopher Haster 1:79b6cc67d8b4 369 }
Christopher Haster 1:79b6cc67d8b4 370 }
Christopher Haster 1:79b6cc67d8b4 371 return success;
Christopher Haster 1:79b6cc67d8b4 372 }
Christopher Haster 1:79b6cc67d8b4 373
Christopher Haster 1:79b6cc67d8b4 374 int64_t M2MFirmware::resource_value_int(FirmwareResource resource) const
Christopher Haster 1:79b6cc67d8b4 375 {
Christopher Haster 1:79b6cc67d8b4 376 int64_t value = -1;
Christopher Haster 1:79b6cc67d8b4 377 M2MResource* res = get_resource(resource);
Christopher Haster 1:79b6cc67d8b4 378 if(res) {
Christopher Haster 1:79b6cc67d8b4 379 if(M2MFirmware::State == resource ||
Christopher Haster 1:79b6cc67d8b4 380 M2MFirmware::UpdateSupportedObjects == resource ||
Christopher Haster 1:79b6cc67d8b4 381 M2MFirmware::UpdateResult == resource) {
Christopher Haster 1:79b6cc67d8b4 382 // Get the value and convert it into integer
Christopher Haster 1:79b6cc67d8b4 383 uint8_t* buffer = NULL;
Christopher Haster 1:79b6cc67d8b4 384 uint32_t length = 0;
Christopher Haster 1:79b6cc67d8b4 385 res->get_value(buffer,length);
Christopher Haster 1:79b6cc67d8b4 386 if(buffer) {
Christopher Haster 1:79b6cc67d8b4 387 value = atoi((const char*)buffer);
Christopher Haster 1:79b6cc67d8b4 388 free(buffer);
Christopher Haster 1:79b6cc67d8b4 389 }
Christopher Haster 1:79b6cc67d8b4 390 }
Christopher Haster 1:79b6cc67d8b4 391 }
Christopher Haster 1:79b6cc67d8b4 392 return value;
Christopher Haster 1:79b6cc67d8b4 393 }
Christopher Haster 1:79b6cc67d8b4 394
Christopher Haster 1:79b6cc67d8b4 395 String M2MFirmware::resource_value_string(FirmwareResource resource) const
Christopher Haster 1:79b6cc67d8b4 396 {
Christopher Haster 1:79b6cc67d8b4 397 String value = "";
Christopher Haster 1:79b6cc67d8b4 398 M2MResource* res = get_resource(resource);
Christopher Haster 1:79b6cc67d8b4 399 if(res) {
Christopher Haster 1:79b6cc67d8b4 400 if(M2MFirmware::PackageUri == resource ||
Christopher Haster 1:79b6cc67d8b4 401 M2MFirmware::PackageName == resource ||
Christopher Haster 1:79b6cc67d8b4 402 M2MFirmware::PackageVersion == resource) {
Christopher Haster 1:79b6cc67d8b4 403 uint8_t* buffer = NULL;
Christopher Haster 1:79b6cc67d8b4 404 uint32_t length = 0;
Christopher Haster 1:79b6cc67d8b4 405 res->get_value(buffer,length);
Christopher Haster 1:79b6cc67d8b4 406
Christopher Haster 1:79b6cc67d8b4 407 char *char_buffer = (char*)malloc(length+1);
Christopher Haster 1:79b6cc67d8b4 408 if(char_buffer) {
Christopher Haster 1:79b6cc67d8b4 409 memset(char_buffer,0,length+1);
Christopher Haster 1:79b6cc67d8b4 410 memcpy(char_buffer,(char*)buffer,length);
Christopher Haster 1:79b6cc67d8b4 411
Christopher Haster 1:79b6cc67d8b4 412 String s_name(char_buffer);
Christopher Haster 1:79b6cc67d8b4 413 value = s_name;
Christopher Haster 1:79b6cc67d8b4 414 if(char_buffer) {
Christopher Haster 1:79b6cc67d8b4 415 free(char_buffer);
Christopher Haster 1:79b6cc67d8b4 416 }
Christopher Haster 1:79b6cc67d8b4 417 }
Christopher Haster 1:79b6cc67d8b4 418 if(buffer) {
Christopher Haster 1:79b6cc67d8b4 419 free(buffer);
Christopher Haster 1:79b6cc67d8b4 420 }
Christopher Haster 1:79b6cc67d8b4 421 }
Christopher Haster 1:79b6cc67d8b4 422 }
Christopher Haster 1:79b6cc67d8b4 423 return value;
Christopher Haster 1:79b6cc67d8b4 424 }
Christopher Haster 1:79b6cc67d8b4 425
Christopher Haster 1:79b6cc67d8b4 426 bool M2MFirmware::check_value_range(FirmwareResource resource, int64_t value) const
Christopher Haster 1:79b6cc67d8b4 427 {
Christopher Haster 1:79b6cc67d8b4 428 bool success = false;
Christopher Haster 1:79b6cc67d8b4 429 switch (resource) {
Christopher Haster 1:79b6cc67d8b4 430 case UpdateSupportedObjects:
Christopher Haster 1:79b6cc67d8b4 431 if(value == 0 || value == 1) {
Christopher Haster 1:79b6cc67d8b4 432 success = true;
Christopher Haster 1:79b6cc67d8b4 433 }
Christopher Haster 1:79b6cc67d8b4 434 break;
Christopher Haster 1:79b6cc67d8b4 435 case State:
Yogesh Pande 4:ae5178938864 436 if (value >= 0 && value <= 3) {
Christopher Haster 1:79b6cc67d8b4 437 success = true;
Christopher Haster 1:79b6cc67d8b4 438 M2MResource* updateRes = get_resource(M2MFirmware::Update);
Christopher Haster 1:79b6cc67d8b4 439 if (updateRes){
Christopher Haster 1:79b6cc67d8b4 440 if (value == M2MFirmware::Downloaded) {
Christopher Haster 1:79b6cc67d8b4 441 updateRes->set_operation(M2MBase::POST_ALLOWED);
Christopher Haster 1:79b6cc67d8b4 442 }
Christopher Haster 1:79b6cc67d8b4 443 else {
Christopher Haster 1:79b6cc67d8b4 444 updateRes->set_operation(M2MBase::NOT_ALLOWED);
Christopher Haster 1:79b6cc67d8b4 445 }
Christopher Haster 1:79b6cc67d8b4 446 }
Christopher Haster 1:79b6cc67d8b4 447 }
Christopher Haster 1:79b6cc67d8b4 448 break;
Christopher Haster 1:79b6cc67d8b4 449 case UpdateResult:
Christopher Haster 1:79b6cc67d8b4 450 if (value >= 0 && value <= 7) {
Christopher Haster 1:79b6cc67d8b4 451 success = true;
Christopher Haster 1:79b6cc67d8b4 452 }
Christopher Haster 1:79b6cc67d8b4 453 break;
Christopher Haster 1:79b6cc67d8b4 454 default:
Christopher Haster 1:79b6cc67d8b4 455 break;
Christopher Haster 1:79b6cc67d8b4 456 }
Christopher Haster 1:79b6cc67d8b4 457 return success;
Christopher Haster 1:79b6cc67d8b4 458 }
Christopher Haster 1:79b6cc67d8b4 459
Yogesh Pande 4:ae5178938864 460 void M2MFirmware::set_zero_value(M2MResource *resource)
Yogesh Pande 4:ae5178938864 461 {
Yogesh Pande 4:ae5178938864 462 char *buffer = (char*)malloc(BUFFER_SIZE);
Yogesh Pande 4:ae5178938864 463 int64_t value = 0;
Yogesh Pande 4:ae5178938864 464 if(buffer) {
Yogesh Pande 4:ae5178938864 465 uint32_t size = m2m::itoa_c(value, buffer);
Yogesh Pande 4:ae5178938864 466 if (size <= BUFFER_SIZE) {
Yogesh Pande 4:ae5178938864 467 resource->set_value((const uint8_t*)buffer, size);
Yogesh Pande 4:ae5178938864 468 }
Yogesh Pande 4:ae5178938864 469 free(buffer);
Yogesh Pande 4:ae5178938864 470 }
Yogesh Pande 4:ae5178938864 471 }