Doug Anson / mbedConnectorInterfaceV3
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers DeviceResource.cpp Source File

DeviceResource.cpp

00001 /**
00002  * @file    DeviceResource.h
00003  * @brief   mbed CoAP Endpoint Device Resource class
00004  * @author  Doug Anson/Chris Paola
00005  * @version 1.0
00006  * @see
00007  *
00008  * Copyright (c) 2014
00009  *
00010  * Licensed under the Apache License, Version 2.0 (the "License");
00011  * you may not use this file except in compliance with the License.
00012  * You may obtain a copy of the License at
00013  *
00014  *     http://www.apache.org/licenses/LICENSE-2.0
00015  *
00016  * Unless required by applicable law or agreed to in writing, software
00017  * distributed under the License is distributed on an "AS IS" BASIS,
00018  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00019  * See the License for the specific language governing permissions and
00020  * limitations under the License.
00021  */
00022  
00023  // configuration
00024  #include "mbed-connector-interface/mbedConnectorInterface.h"
00025  
00026  // mbed-client support
00027  #include "mbed-client/m2mconstants.h"
00028  
00029  // BaseClass 
00030  #include "mbed-connector-interface/DeviceResource.h"
00031  
00032 // Constructor
00033 DeviceResource::DeviceResource(const Logger *logger,M2MDevice::DeviceResource name, const char *value) : Resource<string>(logger,string(M2M_DEVICE_RES_ROOT),this->resource_name(name),string(value)), m_data_wrapper()
00034 {
00035     this->m_object = NULL;
00036     this->m_dev_name = name;
00037 }
00038 
00039 // Constructor
00040 DeviceResource::DeviceResource(const Logger *logger,M2MDevice::DeviceResource name,const string value) : Resource<string>(logger,string(M2M_DEVICE_RES_ROOT),this->resource_name(name),string(value))
00041 {
00042     this->m_data_wrapper = NULL;
00043     this->m_object = NULL;
00044     this->m_dev_name = name;
00045 }
00046 
00047 // Copy constructor
00048 DeviceResource::DeviceResource(const DeviceResource &resource) : Resource<string>((const Resource<string> &)resource)
00049 {
00050     this->m_data_wrapper = resource.m_data_wrapper;
00051     this->m_object = resource.m_object;
00052     this->m_dev_name = resource.m_dev_name;
00053 }
00054 
00055 // Destructor
00056 DeviceResource::~DeviceResource() {
00057 }
00058 
00059 // bind CoAP Resource..
00060 M2MObject *DeviceResource::bind(void *p) {
00061     if (p != NULL) {
00062         M2MDevice *resource = M2MInterfaceFactory::create_device();
00063             if (resource != NULL) {
00064             if (this->getDataWrapper() != NULL) {
00065                     // wrap the data...
00066                     this->getDataWrapper()->wrap((uint8_t *)this->getValue().c_str(),(int)this->getValue().size());
00067                     string str_value = string((char *)this->getDataWrapper()->get());
00068                     resource->create_resource(this->m_dev_name,str_value.c_str());
00069                     this->logger()->log("DeviceResource: [%s] value: [%s] bound",this->getFullName().c_str(),this->getDataWrapper()->get());
00070             }
00071             else {
00072                     // do not wrap the data...
00073                     resource->create_resource(this->m_dev_name,this->getValue().c_str());
00074                     this->logger()->log("DeviceResource: [%s] value: [%s] bound",this->getFullName().c_str(),this->getValue().c_str());
00075             }
00076             this->m_object = (M2MObject *)resource;
00077             }
00078             else {
00079              this->logger()->log("DeviceResource: M2MInterfaceFactory::create_device() FAILED");
00080             }
00081         }
00082         else {
00083             this->logger()->log("DeviceResource: NULL value parameter in bind() request...");
00084         }
00085         return this->m_object;
00086 }
00087 
00088 // no reason why this should not be public in M2MDevice... 
00089 string DeviceResource::resource_name(M2MDevice::DeviceResource name)  const {
00090     m2m::String res_name = "";
00091     switch(name) {
00092         case M2MDevice::Manufacturer:
00093             res_name = DEVICE_MANUFACTURER;
00094             break;
00095         case M2MDevice::DeviceType:
00096             res_name = DEVICE_DEVICE_TYPE;
00097             break;
00098         case M2MDevice::ModelNumber:
00099             res_name = DEVICE_MODEL_NUMBER;
00100             break;
00101         case M2MDevice::SerialNumber:
00102             res_name = DEVICE_SERIAL_NUMBER;
00103             break;
00104         case M2MDevice::HardwareVersion:
00105             res_name = DEVICE_HARDWARE_VERSION;
00106             break;
00107         case M2MDevice::FirmwareVersion:
00108             res_name = DEVICE_FIRMWARE_VERSION;
00109             break;
00110         case M2MDevice::SoftwareVersion:
00111             res_name = DEVICE_SOFTWARE_VERSION;
00112             break;
00113         case M2MDevice::Reboot:
00114             res_name = DEVICE_REBOOT;
00115             break;
00116         case M2MDevice::FactoryReset:
00117             res_name = DEVICE_FACTORY_RESET;
00118             break;
00119         case M2MDevice::AvailablePowerSources:
00120             res_name = DEVICE_AVAILABLE_POWER_SOURCES;
00121             break;
00122         case M2MDevice::PowerSourceVoltage:
00123             res_name = DEVICE_POWER_SOURCE_VOLTAGE;
00124             break;
00125         case M2MDevice::PowerSourceCurrent:
00126             res_name = DEVICE_POWER_SOURCE_CURRENT;
00127             break;
00128         case M2MDevice::BatteryLevel:
00129             res_name = DEVICE_BATTERY_LEVEL;
00130             break;
00131         case M2MDevice::BatteryStatus:
00132             res_name = DEVICE_BATTERY_STATUS;
00133             break;
00134         case M2MDevice::MemoryFree:
00135             res_name = DEVICE_MEMORY_FREE;
00136             break;
00137         case M2MDevice::MemoryTotal:
00138             res_name = DEVICE_MEMORY_TOTAL;
00139             break;
00140         case M2MDevice::ErrorCode:
00141             res_name = DEVICE_ERROR_CODE;
00142             break;
00143         case M2MDevice::ResetErrorCode:
00144             res_name = DEVICE_RESET_ERROR_CODE;
00145             break;
00146         case M2MDevice::CurrentTime:
00147             res_name = DEVICE_CURRENT_TIME;
00148             break;
00149         case M2MDevice::UTCOffset:
00150             res_name = DEVICE_UTC_OFFSET;
00151             break;
00152         case M2MDevice::Timezone:
00153             res_name = DEVICE_TIMEZONE;
00154             break;
00155         case M2MDevice::SupportedBindingMode:
00156             res_name = DEVICE_SUPPORTED_BINDING_MODE;
00157             break;
00158     }
00159     string result = string("") + res_name.c_str();
00160     return result;
00161 }
00162