Jim Carver / Mbed OS mbed-cloud-workshop-connect-PIR

Dependencies:   HTS221

Fork of mbed-cloud-workshop-connect-HTS221 by Jim Carver

Committer:
JimCarver
Date:
Fri Oct 12 21:22:49 2018 +0000
Revision:
0:6b753f761943
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
JimCarver 0:6b753f761943 1 /*
JimCarver 0:6b753f761943 2 * Copyright (c) 2015 ARM Limited. All rights reserved.
JimCarver 0:6b753f761943 3 * SPDX-License-Identifier: Apache-2.0
JimCarver 0:6b753f761943 4 * Licensed under the Apache License, Version 2.0 (the License); you may
JimCarver 0:6b753f761943 5 * not use this file except in compliance with the License.
JimCarver 0:6b753f761943 6 * You may obtain a copy of the License at
JimCarver 0:6b753f761943 7 *
JimCarver 0:6b753f761943 8 * http://www.apache.org/licenses/LICENSE-2.0
JimCarver 0:6b753f761943 9 *
JimCarver 0:6b753f761943 10 * Unless required by applicable law or agreed to in writing, software
JimCarver 0:6b753f761943 11 * distributed under the License is distributed on an AS IS BASIS, WITHOUT
JimCarver 0:6b753f761943 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
JimCarver 0:6b753f761943 13 * See the License for the specific language governing permissions and
JimCarver 0:6b753f761943 14 * limitations under the License.
JimCarver 0:6b753f761943 15 */
JimCarver 0:6b753f761943 16
JimCarver 0:6b753f761943 17 #include "mbed-client/m2mdevice.h"
JimCarver 0:6b753f761943 18 #include "mbed-client/m2mconstants.h"
JimCarver 0:6b753f761943 19 #include "mbed-client/m2mobject.h"
JimCarver 0:6b753f761943 20 #include "mbed-client/m2mobjectinstance.h"
JimCarver 0:6b753f761943 21 #include "mbed-client/m2mresource.h"
JimCarver 0:6b753f761943 22 #include "mbed-trace/mbed_trace.h"
JimCarver 0:6b753f761943 23
JimCarver 0:6b753f761943 24 #define BUFFER_SIZE 21
JimCarver 0:6b753f761943 25 #define TRACE_GROUP "mClt"
JimCarver 0:6b753f761943 26
JimCarver 0:6b753f761943 27 M2MDevice* M2MDevice::_instance = NULL;
JimCarver 0:6b753f761943 28
JimCarver 0:6b753f761943 29 M2MDevice* M2MDevice::get_instance()
JimCarver 0:6b753f761943 30 {
JimCarver 0:6b753f761943 31 if(_instance == NULL) {
JimCarver 0:6b753f761943 32 // ownership of this path is transferred to M2MBase.
JimCarver 0:6b753f761943 33 // Since this object is a singleton, we could use the C-structs to avoid heap
JimCarver 0:6b753f761943 34 // allocation on a lot of M2MDevice -objects data.
JimCarver 0:6b753f761943 35 char *path = stringdup(M2M_DEVICE_ID);
JimCarver 0:6b753f761943 36 if (path) {
JimCarver 0:6b753f761943 37 _instance = new M2MDevice(path);
JimCarver 0:6b753f761943 38 }
JimCarver 0:6b753f761943 39 }
JimCarver 0:6b753f761943 40 return _instance;
JimCarver 0:6b753f761943 41 }
JimCarver 0:6b753f761943 42
JimCarver 0:6b753f761943 43 void M2MDevice::delete_instance()
JimCarver 0:6b753f761943 44 {
JimCarver 0:6b753f761943 45 delete _instance;
JimCarver 0:6b753f761943 46 _instance = NULL;
JimCarver 0:6b753f761943 47 }
JimCarver 0:6b753f761943 48
JimCarver 0:6b753f761943 49 M2MDevice::M2MDevice(char *path)
JimCarver 0:6b753f761943 50 : M2MObject(M2M_DEVICE_ID, path)
JimCarver 0:6b753f761943 51 {
JimCarver 0:6b753f761943 52 M2MBase::set_register_uri(false);
JimCarver 0:6b753f761943 53 M2MBase::set_operation(M2MBase::GET_ALLOWED);
JimCarver 0:6b753f761943 54
JimCarver 0:6b753f761943 55 _device_instance = M2MObject::create_object_instance();
JimCarver 0:6b753f761943 56 if(_device_instance) {
JimCarver 0:6b753f761943 57 _device_instance->set_operation(M2MBase::GET_ALLOWED);
JimCarver 0:6b753f761943 58 _device_instance->set_register_uri(true);
JimCarver 0:6b753f761943 59 _device_instance->set_coap_content_type(COAP_CONTENT_OMA_TLV_TYPE);
JimCarver 0:6b753f761943 60 M2MResource* res = _device_instance->create_dynamic_resource(DEVICE_REBOOT,
JimCarver 0:6b753f761943 61 OMA_RESOURCE_TYPE,
JimCarver 0:6b753f761943 62 M2MResourceInstance::OPAQUE,
JimCarver 0:6b753f761943 63 false);
JimCarver 0:6b753f761943 64 if(res) {
JimCarver 0:6b753f761943 65 res->set_operation(M2MBase::POST_ALLOWED);
JimCarver 0:6b753f761943 66 res->set_register_uri(false);
JimCarver 0:6b753f761943 67 }
JimCarver 0:6b753f761943 68
JimCarver 0:6b753f761943 69 M2MResourceInstance* instance = _device_instance->create_dynamic_resource_instance(DEVICE_ERROR_CODE,
JimCarver 0:6b753f761943 70 OMA_RESOURCE_TYPE,
JimCarver 0:6b753f761943 71 M2MResourceInstance::INTEGER,
JimCarver 0:6b753f761943 72 true,0);
JimCarver 0:6b753f761943 73 if(instance) {
JimCarver 0:6b753f761943 74 M2MResource * dev_res = _device_instance->resource(DEVICE_ERROR_CODE);
JimCarver 0:6b753f761943 75 if(dev_res) {
JimCarver 0:6b753f761943 76 dev_res->set_register_uri(false);
JimCarver 0:6b753f761943 77 }
JimCarver 0:6b753f761943 78 instance->set_operation(M2MBase::GET_ALLOWED);
JimCarver 0:6b753f761943 79
JimCarver 0:6b753f761943 80 instance->set_value(0);
JimCarver 0:6b753f761943 81
JimCarver 0:6b753f761943 82 instance->set_register_uri(false);
JimCarver 0:6b753f761943 83 }
JimCarver 0:6b753f761943 84 res = _device_instance->create_dynamic_resource(DEVICE_SUPPORTED_BINDING_MODE,
JimCarver 0:6b753f761943 85 OMA_RESOURCE_TYPE,
JimCarver 0:6b753f761943 86 M2MResourceInstance::STRING,
JimCarver 0:6b753f761943 87 true);
JimCarver 0:6b753f761943 88 if(res) {
JimCarver 0:6b753f761943 89 res->set_operation(M2MBase::GET_ALLOWED);
JimCarver 0:6b753f761943 90 res->set_value((const uint8_t*)BINDING_MODE_UDP,sizeof(BINDING_MODE_UDP)-1);
JimCarver 0:6b753f761943 91 res->set_register_uri(false);
JimCarver 0:6b753f761943 92 }
JimCarver 0:6b753f761943 93 }
JimCarver 0:6b753f761943 94 }
JimCarver 0:6b753f761943 95
JimCarver 0:6b753f761943 96 M2MDevice::~M2MDevice()
JimCarver 0:6b753f761943 97 {
JimCarver 0:6b753f761943 98 }
JimCarver 0:6b753f761943 99
JimCarver 0:6b753f761943 100 M2MResource* M2MDevice::create_resource(DeviceResource resource, const String &value)
JimCarver 0:6b753f761943 101 {
JimCarver 0:6b753f761943 102 M2MResource* res = NULL;
JimCarver 0:6b753f761943 103 const char* device_id_ptr = "";
JimCarver 0:6b753f761943 104 M2MBase::Operation operation = M2MBase::GET_ALLOWED;
JimCarver 0:6b753f761943 105 if(!is_resource_present(resource) && value.size() <= MAX_ALLOWED_STRING_LENGTH) {
JimCarver 0:6b753f761943 106 switch(resource) {
JimCarver 0:6b753f761943 107 case Manufacturer:
JimCarver 0:6b753f761943 108 device_id_ptr = DEVICE_MANUFACTURER;
JimCarver 0:6b753f761943 109 break;
JimCarver 0:6b753f761943 110 case DeviceType:
JimCarver 0:6b753f761943 111 device_id_ptr = DEVICE_DEVICE_TYPE;
JimCarver 0:6b753f761943 112 break;
JimCarver 0:6b753f761943 113 case ModelNumber:
JimCarver 0:6b753f761943 114 device_id_ptr = DEVICE_MODEL_NUMBER;
JimCarver 0:6b753f761943 115 break;
JimCarver 0:6b753f761943 116 case SerialNumber:
JimCarver 0:6b753f761943 117 device_id_ptr = DEVICE_SERIAL_NUMBER;
JimCarver 0:6b753f761943 118 break;
JimCarver 0:6b753f761943 119 case HardwareVersion:
JimCarver 0:6b753f761943 120 device_id_ptr = DEVICE_HARDWARE_VERSION;
JimCarver 0:6b753f761943 121 break;
JimCarver 0:6b753f761943 122 case FirmwareVersion:
JimCarver 0:6b753f761943 123 device_id_ptr = DEVICE_FIRMWARE_VERSION;
JimCarver 0:6b753f761943 124 break;
JimCarver 0:6b753f761943 125 case SoftwareVersion:
JimCarver 0:6b753f761943 126 device_id_ptr = DEVICE_SOFTWARE_VERSION;
JimCarver 0:6b753f761943 127 break;
JimCarver 0:6b753f761943 128 case UTCOffset:
JimCarver 0:6b753f761943 129 device_id_ptr = DEVICE_UTC_OFFSET;
JimCarver 0:6b753f761943 130 operation = M2MBase::GET_PUT_ALLOWED;
JimCarver 0:6b753f761943 131 break;
JimCarver 0:6b753f761943 132 case Timezone:
JimCarver 0:6b753f761943 133 device_id_ptr = DEVICE_TIMEZONE;
JimCarver 0:6b753f761943 134 operation = M2MBase::GET_PUT_ALLOWED;
JimCarver 0:6b753f761943 135 break;
JimCarver 0:6b753f761943 136 default:
JimCarver 0:6b753f761943 137 break;
JimCarver 0:6b753f761943 138 }
JimCarver 0:6b753f761943 139 }
JimCarver 0:6b753f761943 140 const String device_id(device_id_ptr);
JimCarver 0:6b753f761943 141
JimCarver 0:6b753f761943 142 if(!device_id.empty()) {
JimCarver 0:6b753f761943 143 if(_device_instance) {
JimCarver 0:6b753f761943 144 res = _device_instance->create_dynamic_resource(device_id,
JimCarver 0:6b753f761943 145 OMA_RESOURCE_TYPE,
JimCarver 0:6b753f761943 146 M2MResourceInstance::STRING,
JimCarver 0:6b753f761943 147 true);
JimCarver 0:6b753f761943 148
JimCarver 0:6b753f761943 149 if(res ) {
JimCarver 0:6b753f761943 150 res->set_operation(operation);
JimCarver 0:6b753f761943 151 if (value.empty()) {
JimCarver 0:6b753f761943 152 res->clear_value();
JimCarver 0:6b753f761943 153 } else {
JimCarver 0:6b753f761943 154 res->set_value((const uint8_t*)value.c_str(),
JimCarver 0:6b753f761943 155 (uint32_t)value.length());
JimCarver 0:6b753f761943 156 }
JimCarver 0:6b753f761943 157 res->set_register_uri(false);
JimCarver 0:6b753f761943 158 }
JimCarver 0:6b753f761943 159 }
JimCarver 0:6b753f761943 160 }
JimCarver 0:6b753f761943 161 return res;
JimCarver 0:6b753f761943 162 }
JimCarver 0:6b753f761943 163
JimCarver 0:6b753f761943 164 M2MResource* M2MDevice::create_resource(DeviceResource resource, int64_t value)
JimCarver 0:6b753f761943 165 {
JimCarver 0:6b753f761943 166 M2MResource* res = NULL;
JimCarver 0:6b753f761943 167 const char* device_id_ptr = "";
JimCarver 0:6b753f761943 168 M2MBase::Operation operation = M2MBase::GET_ALLOWED;
JimCarver 0:6b753f761943 169 if(!is_resource_present(resource)) {
JimCarver 0:6b753f761943 170 switch(resource) {
JimCarver 0:6b753f761943 171 case BatteryLevel:
JimCarver 0:6b753f761943 172 if(check_value_range(resource, value)) {
JimCarver 0:6b753f761943 173 device_id_ptr = DEVICE_BATTERY_LEVEL;
JimCarver 0:6b753f761943 174 }
JimCarver 0:6b753f761943 175 break;
JimCarver 0:6b753f761943 176 case BatteryStatus:
JimCarver 0:6b753f761943 177 if(check_value_range(resource, value)) {
JimCarver 0:6b753f761943 178 device_id_ptr = DEVICE_BATTERY_STATUS;
JimCarver 0:6b753f761943 179 }
JimCarver 0:6b753f761943 180 break;
JimCarver 0:6b753f761943 181 case MemoryFree:
JimCarver 0:6b753f761943 182 device_id_ptr = DEVICE_MEMORY_FREE;
JimCarver 0:6b753f761943 183 break;
JimCarver 0:6b753f761943 184 case MemoryTotal:
JimCarver 0:6b753f761943 185 device_id_ptr = DEVICE_MEMORY_TOTAL;
JimCarver 0:6b753f761943 186 break;
JimCarver 0:6b753f761943 187 case CurrentTime:
JimCarver 0:6b753f761943 188 device_id_ptr = DEVICE_CURRENT_TIME;
JimCarver 0:6b753f761943 189 operation = M2MBase::GET_PUT_ALLOWED;
JimCarver 0:6b753f761943 190 break;
JimCarver 0:6b753f761943 191 default:
JimCarver 0:6b753f761943 192 break;
JimCarver 0:6b753f761943 193 }
JimCarver 0:6b753f761943 194 }
JimCarver 0:6b753f761943 195
JimCarver 0:6b753f761943 196 const String device_id(device_id_ptr);
JimCarver 0:6b753f761943 197
JimCarver 0:6b753f761943 198 if(!device_id.empty()) {
JimCarver 0:6b753f761943 199 if(_device_instance) {
JimCarver 0:6b753f761943 200 res = _device_instance->create_dynamic_resource(device_id,
JimCarver 0:6b753f761943 201 OMA_RESOURCE_TYPE,
JimCarver 0:6b753f761943 202 M2MResourceInstance::INTEGER,
JimCarver 0:6b753f761943 203 true);
JimCarver 0:6b753f761943 204
JimCarver 0:6b753f761943 205 if(res) {
JimCarver 0:6b753f761943 206
JimCarver 0:6b753f761943 207
JimCarver 0:6b753f761943 208 res->set_operation(operation);
JimCarver 0:6b753f761943 209 res->set_value(value);
JimCarver 0:6b753f761943 210
JimCarver 0:6b753f761943 211 res->set_register_uri(false);
JimCarver 0:6b753f761943 212 }
JimCarver 0:6b753f761943 213 }
JimCarver 0:6b753f761943 214 }
JimCarver 0:6b753f761943 215 return res;
JimCarver 0:6b753f761943 216 }
JimCarver 0:6b753f761943 217
JimCarver 0:6b753f761943 218 M2MResourceInstance* M2MDevice::create_resource_instance(DeviceResource resource, int64_t value,
JimCarver 0:6b753f761943 219 uint16_t instance_id)
JimCarver 0:6b753f761943 220 {
JimCarver 0:6b753f761943 221 M2MResourceInstance* res_instance = NULL;
JimCarver 0:6b753f761943 222 const char* device_id_ptr = "";
JimCarver 0:6b753f761943 223 // For these resources multiple instance can exist
JimCarver 0:6b753f761943 224 if(AvailablePowerSources == resource) {
JimCarver 0:6b753f761943 225 if(check_value_range(resource, value)) {
JimCarver 0:6b753f761943 226 device_id_ptr = DEVICE_AVAILABLE_POWER_SOURCES;
JimCarver 0:6b753f761943 227 }
JimCarver 0:6b753f761943 228 } else if(PowerSourceVoltage == resource) {
JimCarver 0:6b753f761943 229 device_id_ptr = DEVICE_POWER_SOURCE_VOLTAGE;
JimCarver 0:6b753f761943 230 } else if(PowerSourceCurrent == resource) {
JimCarver 0:6b753f761943 231 device_id_ptr = DEVICE_POWER_SOURCE_CURRENT;
JimCarver 0:6b753f761943 232 } else if(ErrorCode == resource) {
JimCarver 0:6b753f761943 233 if(check_value_range(resource, value)) {
JimCarver 0:6b753f761943 234 device_id_ptr = DEVICE_ERROR_CODE;
JimCarver 0:6b753f761943 235 }
JimCarver 0:6b753f761943 236 }
JimCarver 0:6b753f761943 237
JimCarver 0:6b753f761943 238 const String device_id(device_id_ptr);
JimCarver 0:6b753f761943 239
JimCarver 0:6b753f761943 240 if(!device_id.empty()) {
JimCarver 0:6b753f761943 241 if(_device_instance) {
JimCarver 0:6b753f761943 242 res_instance = _device_instance->create_dynamic_resource_instance(device_id,OMA_RESOURCE_TYPE,
JimCarver 0:6b753f761943 243 M2MResourceInstance::INTEGER,
JimCarver 0:6b753f761943 244 true, instance_id);
JimCarver 0:6b753f761943 245
JimCarver 0:6b753f761943 246 M2MResource *res = _device_instance->resource(device_id);
JimCarver 0:6b753f761943 247 if(res) {
JimCarver 0:6b753f761943 248 res->set_register_uri(false);
JimCarver 0:6b753f761943 249 }
JimCarver 0:6b753f761943 250 if(res_instance) {
JimCarver 0:6b753f761943 251 res_instance->set_value(value);
JimCarver 0:6b753f761943 252 // Only read operation is allowed for above resources
JimCarver 0:6b753f761943 253 res_instance->set_operation(M2MBase::GET_ALLOWED);
JimCarver 0:6b753f761943 254
JimCarver 0:6b753f761943 255 res_instance->set_register_uri(false);
JimCarver 0:6b753f761943 256 }
JimCarver 0:6b753f761943 257 }
JimCarver 0:6b753f761943 258 }
JimCarver 0:6b753f761943 259 return res_instance;
JimCarver 0:6b753f761943 260 }
JimCarver 0:6b753f761943 261 M2MResource* M2MDevice::create_resource(DeviceResource resource)
JimCarver 0:6b753f761943 262 {
JimCarver 0:6b753f761943 263 M2MResource* res = NULL;
JimCarver 0:6b753f761943 264 if(!is_resource_present(resource)) {
JimCarver 0:6b753f761943 265 const char* device_Id_ptr = "";
JimCarver 0:6b753f761943 266 if(FactoryReset == resource) {
JimCarver 0:6b753f761943 267 device_Id_ptr = DEVICE_FACTORY_RESET;
JimCarver 0:6b753f761943 268 } else if(ResetErrorCode == resource) {
JimCarver 0:6b753f761943 269 device_Id_ptr = DEVICE_RESET_ERROR_CODE;
JimCarver 0:6b753f761943 270 }
JimCarver 0:6b753f761943 271 const String device_Id(device_Id_ptr);
JimCarver 0:6b753f761943 272
JimCarver 0:6b753f761943 273 if(_device_instance && !device_Id.empty()) {
JimCarver 0:6b753f761943 274 res = _device_instance->create_dynamic_resource(device_Id,
JimCarver 0:6b753f761943 275 OMA_RESOURCE_TYPE,
JimCarver 0:6b753f761943 276 M2MResourceInstance::OPAQUE,
JimCarver 0:6b753f761943 277 true);
JimCarver 0:6b753f761943 278 if(res) {
JimCarver 0:6b753f761943 279 res->set_operation(M2MBase::POST_ALLOWED);
JimCarver 0:6b753f761943 280 res->set_register_uri(false);
JimCarver 0:6b753f761943 281 }
JimCarver 0:6b753f761943 282 }
JimCarver 0:6b753f761943 283 }
JimCarver 0:6b753f761943 284 return res;
JimCarver 0:6b753f761943 285 }
JimCarver 0:6b753f761943 286
JimCarver 0:6b753f761943 287 bool M2MDevice::delete_resource(DeviceResource resource)
JimCarver 0:6b753f761943 288 {
JimCarver 0:6b753f761943 289 bool success = false;
JimCarver 0:6b753f761943 290 if(M2MDevice::Reboot != resource &&
JimCarver 0:6b753f761943 291 M2MDevice::ErrorCode != resource &&
JimCarver 0:6b753f761943 292 M2MDevice::SupportedBindingMode != resource) {
JimCarver 0:6b753f761943 293 if(_device_instance) {
JimCarver 0:6b753f761943 294 success = _device_instance->remove_resource(resource_name(resource));
JimCarver 0:6b753f761943 295 }
JimCarver 0:6b753f761943 296 }
JimCarver 0:6b753f761943 297 return success;
JimCarver 0:6b753f761943 298 }
JimCarver 0:6b753f761943 299
JimCarver 0:6b753f761943 300 bool M2MDevice::delete_resource_instance(DeviceResource resource,
JimCarver 0:6b753f761943 301 uint16_t instance_id)
JimCarver 0:6b753f761943 302 {
JimCarver 0:6b753f761943 303 bool success = false;
JimCarver 0:6b753f761943 304 if(M2MDevice::Reboot != resource &&
JimCarver 0:6b753f761943 305 M2MDevice::ErrorCode != resource &&
JimCarver 0:6b753f761943 306 M2MDevice::SupportedBindingMode != resource) {
JimCarver 0:6b753f761943 307 if(_device_instance) {
JimCarver 0:6b753f761943 308 success = _device_instance->remove_resource_instance(resource_name(resource),instance_id);
JimCarver 0:6b753f761943 309 }
JimCarver 0:6b753f761943 310 }
JimCarver 0:6b753f761943 311 return success;
JimCarver 0:6b753f761943 312 }
JimCarver 0:6b753f761943 313
JimCarver 0:6b753f761943 314 bool M2MDevice::set_resource_value(DeviceResource resource,
JimCarver 0:6b753f761943 315 const String &value,
JimCarver 0:6b753f761943 316 uint16_t instance_id)
JimCarver 0:6b753f761943 317 {
JimCarver 0:6b753f761943 318 bool success = false;
JimCarver 0:6b753f761943 319 M2MResourceBase* res = get_resource_instance(resource, instance_id);
JimCarver 0:6b753f761943 320 if(res && value.size() <= MAX_ALLOWED_STRING_LENGTH) {
JimCarver 0:6b753f761943 321 if(M2MDevice::Manufacturer == resource ||
JimCarver 0:6b753f761943 322 M2MDevice::ModelNumber == resource ||
JimCarver 0:6b753f761943 323 M2MDevice::DeviceType == resource ||
JimCarver 0:6b753f761943 324 M2MDevice::SerialNumber == resource ||
JimCarver 0:6b753f761943 325 M2MDevice::HardwareVersion == resource ||
JimCarver 0:6b753f761943 326 M2MDevice::FirmwareVersion == resource ||
JimCarver 0:6b753f761943 327 M2MDevice::SoftwareVersion == resource ||
JimCarver 0:6b753f761943 328 M2MDevice::UTCOffset == resource ||
JimCarver 0:6b753f761943 329 M2MDevice::Timezone == resource ||
JimCarver 0:6b753f761943 330 M2MDevice::SupportedBindingMode == resource) {
JimCarver 0:6b753f761943 331 if (value.empty()) {
JimCarver 0:6b753f761943 332 res->clear_value();
JimCarver 0:6b753f761943 333 success = true;
JimCarver 0:6b753f761943 334 } else {
JimCarver 0:6b753f761943 335 success = res->set_value((const uint8_t*)value.c_str(),(uint32_t)value.length());
JimCarver 0:6b753f761943 336 }
JimCarver 0:6b753f761943 337 }
JimCarver 0:6b753f761943 338 }
JimCarver 0:6b753f761943 339 return success;
JimCarver 0:6b753f761943 340 }
JimCarver 0:6b753f761943 341
JimCarver 0:6b753f761943 342 bool M2MDevice::set_resource_value(DeviceResource resource,
JimCarver 0:6b753f761943 343 int64_t value,
JimCarver 0:6b753f761943 344 uint16_t instance_id)
JimCarver 0:6b753f761943 345 {
JimCarver 0:6b753f761943 346 bool success = false;
JimCarver 0:6b753f761943 347 M2MResourceBase* res = get_resource_instance(resource, instance_id);
JimCarver 0:6b753f761943 348 if(res) {
JimCarver 0:6b753f761943 349 if(M2MDevice::BatteryLevel == resource ||
JimCarver 0:6b753f761943 350 M2MDevice::BatteryStatus == resource ||
JimCarver 0:6b753f761943 351 M2MDevice::MemoryFree == resource ||
JimCarver 0:6b753f761943 352 M2MDevice::MemoryTotal == resource ||
JimCarver 0:6b753f761943 353 M2MDevice::ErrorCode == resource ||
JimCarver 0:6b753f761943 354 M2MDevice::CurrentTime == resource ||
JimCarver 0:6b753f761943 355 M2MDevice::AvailablePowerSources == resource ||
JimCarver 0:6b753f761943 356 M2MDevice::PowerSourceVoltage == resource ||
JimCarver 0:6b753f761943 357 M2MDevice::PowerSourceCurrent == resource) {
JimCarver 0:6b753f761943 358 // If it is any of the above resource
JimCarver 0:6b753f761943 359 // set the value of the resource.
JimCarver 0:6b753f761943 360 if (check_value_range(resource, value)) {
JimCarver 0:6b753f761943 361
JimCarver 0:6b753f761943 362 success = res->set_value(value);
JimCarver 0:6b753f761943 363 }
JimCarver 0:6b753f761943 364 }
JimCarver 0:6b753f761943 365 }
JimCarver 0:6b753f761943 366 return success;
JimCarver 0:6b753f761943 367 }
JimCarver 0:6b753f761943 368
JimCarver 0:6b753f761943 369 String M2MDevice::resource_value_string(DeviceResource resource,
JimCarver 0:6b753f761943 370 uint16_t instance_id) const
JimCarver 0:6b753f761943 371 {
JimCarver 0:6b753f761943 372 String value = "";
JimCarver 0:6b753f761943 373 const M2MResourceBase* res = get_resource_instance(resource, instance_id);
JimCarver 0:6b753f761943 374 if(res) {
JimCarver 0:6b753f761943 375 if(M2MDevice::Manufacturer == resource ||
JimCarver 0:6b753f761943 376 M2MDevice::ModelNumber == resource ||
JimCarver 0:6b753f761943 377 M2MDevice::DeviceType == resource ||
JimCarver 0:6b753f761943 378 M2MDevice::SerialNumber == resource ||
JimCarver 0:6b753f761943 379 M2MDevice::HardwareVersion == resource ||
JimCarver 0:6b753f761943 380 M2MDevice::FirmwareVersion == resource ||
JimCarver 0:6b753f761943 381 M2MDevice::SoftwareVersion == resource ||
JimCarver 0:6b753f761943 382 M2MDevice::UTCOffset == resource ||
JimCarver 0:6b753f761943 383 M2MDevice::Timezone == resource ||
JimCarver 0:6b753f761943 384 M2MDevice::SupportedBindingMode == resource) {
JimCarver 0:6b753f761943 385
JimCarver 0:6b753f761943 386
JimCarver 0:6b753f761943 387 value = res->get_value_string();
JimCarver 0:6b753f761943 388 }
JimCarver 0:6b753f761943 389 }
JimCarver 0:6b753f761943 390 return value;
JimCarver 0:6b753f761943 391 }
JimCarver 0:6b753f761943 392
JimCarver 0:6b753f761943 393 int64_t M2MDevice::resource_value_int(DeviceResource resource,
JimCarver 0:6b753f761943 394 uint16_t instance_id) const
JimCarver 0:6b753f761943 395 {
JimCarver 0:6b753f761943 396 int64_t value = -1;
JimCarver 0:6b753f761943 397 M2MResourceBase* res = get_resource_instance(resource, instance_id);
JimCarver 0:6b753f761943 398 if(res) {
JimCarver 0:6b753f761943 399 if(M2MDevice::BatteryLevel == resource ||
JimCarver 0:6b753f761943 400 M2MDevice::BatteryStatus == resource ||
JimCarver 0:6b753f761943 401 M2MDevice::MemoryFree == resource ||
JimCarver 0:6b753f761943 402 M2MDevice::MemoryTotal == resource ||
JimCarver 0:6b753f761943 403 M2MDevice::ErrorCode == resource ||
JimCarver 0:6b753f761943 404 M2MDevice::CurrentTime == resource ||
JimCarver 0:6b753f761943 405 M2MDevice::AvailablePowerSources == resource ||
JimCarver 0:6b753f761943 406 M2MDevice::PowerSourceVoltage == resource ||
JimCarver 0:6b753f761943 407 M2MDevice::PowerSourceCurrent == resource) {
JimCarver 0:6b753f761943 408
JimCarver 0:6b753f761943 409 // note: the value may be 32bit int on 32b archs.
JimCarver 0:6b753f761943 410 value = res->get_value_int();
JimCarver 0:6b753f761943 411 }
JimCarver 0:6b753f761943 412 }
JimCarver 0:6b753f761943 413 return value;
JimCarver 0:6b753f761943 414 }
JimCarver 0:6b753f761943 415
JimCarver 0:6b753f761943 416 bool M2MDevice::is_resource_present(DeviceResource resource) const
JimCarver 0:6b753f761943 417 {
JimCarver 0:6b753f761943 418 bool success = false;
JimCarver 0:6b753f761943 419 const M2MResourceBase* res = get_resource_instance(resource,0);
JimCarver 0:6b753f761943 420 if(res) {
JimCarver 0:6b753f761943 421 success = true;
JimCarver 0:6b753f761943 422 }
JimCarver 0:6b753f761943 423 return success;
JimCarver 0:6b753f761943 424 }
JimCarver 0:6b753f761943 425
JimCarver 0:6b753f761943 426 uint16_t M2MDevice::per_resource_count(DeviceResource res) const
JimCarver 0:6b753f761943 427 {
JimCarver 0:6b753f761943 428 uint16_t count = 0;
JimCarver 0:6b753f761943 429 if(_device_instance) {
JimCarver 0:6b753f761943 430 count = _device_instance->resource_count(resource_name(res));
JimCarver 0:6b753f761943 431 }
JimCarver 0:6b753f761943 432 return count;
JimCarver 0:6b753f761943 433 }
JimCarver 0:6b753f761943 434
JimCarver 0:6b753f761943 435 uint16_t M2MDevice::total_resource_count() const
JimCarver 0:6b753f761943 436 {
JimCarver 0:6b753f761943 437 uint16_t count = 0;
JimCarver 0:6b753f761943 438 if(_device_instance) {
JimCarver 0:6b753f761943 439 count = _device_instance->resources().size();
JimCarver 0:6b753f761943 440 }
JimCarver 0:6b753f761943 441 return count;
JimCarver 0:6b753f761943 442 }
JimCarver 0:6b753f761943 443
JimCarver 0:6b753f761943 444 M2MResourceBase* M2MDevice::get_resource_instance(DeviceResource dev_res,
JimCarver 0:6b753f761943 445 uint16_t instance_id) const
JimCarver 0:6b753f761943 446 {
JimCarver 0:6b753f761943 447 M2MResource* res = NULL;
JimCarver 0:6b753f761943 448 M2MResourceBase* inst = NULL;
JimCarver 0:6b753f761943 449 if(_device_instance) {
JimCarver 0:6b753f761943 450 res = _device_instance->resource(resource_name(dev_res));
JimCarver 0:6b753f761943 451 if(res) {
JimCarver 0:6b753f761943 452 if(res->supports_multiple_instances()) {
JimCarver 0:6b753f761943 453 inst = res->resource_instance(instance_id);
JimCarver 0:6b753f761943 454 } else {
JimCarver 0:6b753f761943 455 inst = res;
JimCarver 0:6b753f761943 456 }
JimCarver 0:6b753f761943 457 }
JimCarver 0:6b753f761943 458 }
JimCarver 0:6b753f761943 459 return inst;
JimCarver 0:6b753f761943 460 }
JimCarver 0:6b753f761943 461
JimCarver 0:6b753f761943 462 const char* M2MDevice::resource_name(DeviceResource resource)
JimCarver 0:6b753f761943 463 {
JimCarver 0:6b753f761943 464 const char* res_name = "";
JimCarver 0:6b753f761943 465 switch(resource) {
JimCarver 0:6b753f761943 466 case Manufacturer:
JimCarver 0:6b753f761943 467 res_name = DEVICE_MANUFACTURER;
JimCarver 0:6b753f761943 468 break;
JimCarver 0:6b753f761943 469 case DeviceType:
JimCarver 0:6b753f761943 470 res_name = DEVICE_DEVICE_TYPE;
JimCarver 0:6b753f761943 471 break;
JimCarver 0:6b753f761943 472 case ModelNumber:
JimCarver 0:6b753f761943 473 res_name = DEVICE_MODEL_NUMBER;
JimCarver 0:6b753f761943 474 break;
JimCarver 0:6b753f761943 475 case SerialNumber:
JimCarver 0:6b753f761943 476 res_name = DEVICE_SERIAL_NUMBER;
JimCarver 0:6b753f761943 477 break;
JimCarver 0:6b753f761943 478 case HardwareVersion:
JimCarver 0:6b753f761943 479 res_name = DEVICE_HARDWARE_VERSION;
JimCarver 0:6b753f761943 480 break;
JimCarver 0:6b753f761943 481 case FirmwareVersion:
JimCarver 0:6b753f761943 482 res_name = DEVICE_FIRMWARE_VERSION;
JimCarver 0:6b753f761943 483 break;
JimCarver 0:6b753f761943 484 case SoftwareVersion:
JimCarver 0:6b753f761943 485 res_name = DEVICE_SOFTWARE_VERSION;
JimCarver 0:6b753f761943 486 break;
JimCarver 0:6b753f761943 487 case Reboot:
JimCarver 0:6b753f761943 488 res_name = DEVICE_REBOOT;
JimCarver 0:6b753f761943 489 break;
JimCarver 0:6b753f761943 490 case FactoryReset:
JimCarver 0:6b753f761943 491 res_name = DEVICE_FACTORY_RESET;
JimCarver 0:6b753f761943 492 break;
JimCarver 0:6b753f761943 493 case AvailablePowerSources:
JimCarver 0:6b753f761943 494 res_name = DEVICE_AVAILABLE_POWER_SOURCES;
JimCarver 0:6b753f761943 495 break;
JimCarver 0:6b753f761943 496 case PowerSourceVoltage:
JimCarver 0:6b753f761943 497 res_name = DEVICE_POWER_SOURCE_VOLTAGE;
JimCarver 0:6b753f761943 498 break;
JimCarver 0:6b753f761943 499 case PowerSourceCurrent:
JimCarver 0:6b753f761943 500 res_name = DEVICE_POWER_SOURCE_CURRENT;
JimCarver 0:6b753f761943 501 break;
JimCarver 0:6b753f761943 502 case BatteryLevel:
JimCarver 0:6b753f761943 503 res_name = DEVICE_BATTERY_LEVEL;
JimCarver 0:6b753f761943 504 break;
JimCarver 0:6b753f761943 505 case BatteryStatus:
JimCarver 0:6b753f761943 506 res_name = DEVICE_BATTERY_STATUS;
JimCarver 0:6b753f761943 507 break;
JimCarver 0:6b753f761943 508 case MemoryFree:
JimCarver 0:6b753f761943 509 res_name = DEVICE_MEMORY_FREE;
JimCarver 0:6b753f761943 510 break;
JimCarver 0:6b753f761943 511 case MemoryTotal:
JimCarver 0:6b753f761943 512 res_name = DEVICE_MEMORY_TOTAL;
JimCarver 0:6b753f761943 513 break;
JimCarver 0:6b753f761943 514 case ErrorCode:
JimCarver 0:6b753f761943 515 res_name = DEVICE_ERROR_CODE;
JimCarver 0:6b753f761943 516 break;
JimCarver 0:6b753f761943 517 case ResetErrorCode:
JimCarver 0:6b753f761943 518 res_name = DEVICE_RESET_ERROR_CODE;
JimCarver 0:6b753f761943 519 break;
JimCarver 0:6b753f761943 520 case CurrentTime:
JimCarver 0:6b753f761943 521 res_name = DEVICE_CURRENT_TIME;
JimCarver 0:6b753f761943 522 break;
JimCarver 0:6b753f761943 523 case UTCOffset:
JimCarver 0:6b753f761943 524 res_name = DEVICE_UTC_OFFSET;
JimCarver 0:6b753f761943 525 break;
JimCarver 0:6b753f761943 526 case Timezone:
JimCarver 0:6b753f761943 527 res_name = DEVICE_TIMEZONE;
JimCarver 0:6b753f761943 528 break;
JimCarver 0:6b753f761943 529 case SupportedBindingMode:
JimCarver 0:6b753f761943 530 res_name = DEVICE_SUPPORTED_BINDING_MODE;
JimCarver 0:6b753f761943 531 break;
JimCarver 0:6b753f761943 532 }
JimCarver 0:6b753f761943 533 return res_name;
JimCarver 0:6b753f761943 534 }
JimCarver 0:6b753f761943 535
JimCarver 0:6b753f761943 536 bool M2MDevice::check_value_range(DeviceResource resource, int64_t value)
JimCarver 0:6b753f761943 537 {
JimCarver 0:6b753f761943 538 bool success = false;
JimCarver 0:6b753f761943 539 switch (resource) {
JimCarver 0:6b753f761943 540 case AvailablePowerSources:
JimCarver 0:6b753f761943 541 if(value >= 0 && value <= 7) {
JimCarver 0:6b753f761943 542 success = true;
JimCarver 0:6b753f761943 543 }
JimCarver 0:6b753f761943 544 break;
JimCarver 0:6b753f761943 545 case BatteryLevel:
JimCarver 0:6b753f761943 546 if (value >= 0 && value <= 100) {
JimCarver 0:6b753f761943 547 success = true;
JimCarver 0:6b753f761943 548 }
JimCarver 0:6b753f761943 549 break;
JimCarver 0:6b753f761943 550 case BatteryStatus:
JimCarver 0:6b753f761943 551 if (value >= 0 && value <= 6) {
JimCarver 0:6b753f761943 552 success = true;
JimCarver 0:6b753f761943 553 }
JimCarver 0:6b753f761943 554 break;
JimCarver 0:6b753f761943 555 case ErrorCode:
JimCarver 0:6b753f761943 556 if (value >= 0 && value <= 8) {
JimCarver 0:6b753f761943 557 success = true;
JimCarver 0:6b753f761943 558 }
JimCarver 0:6b753f761943 559 break;
JimCarver 0:6b753f761943 560 default:
JimCarver 0:6b753f761943 561 success = true;
JimCarver 0:6b753f761943 562 break;
JimCarver 0:6b753f761943 563 }
JimCarver 0:6b753f761943 564 return success;
JimCarver 0:6b753f761943 565 }
JimCarver 0:6b753f761943 566