Doug Anson / mbedConnectorInterfaceV3
Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers DeviceFirmwareCompositeResource.cpp Source File

DeviceFirmwareCompositeResource.cpp

Go to the documentation of this file.
00001 /**
00002  * @file    DeviceFirmwareCompositeResource.cpp
00003  * @brief   mbed CoAP Endpoint Device Firmware Composited Resource
00004  * @author  Doug Anson
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 // Class 
00024 #include "mbed-connector-interface/DeviceFirmwareCompositeResource.h"
00025 
00026 // Endpoint Class
00027 #include "mbed-connector-interface/ConnectorEndpoint.h"
00028  
00029 // Options Builder
00030 #include "mbed-connector-interface/OptionsBuilder.h"
00031 
00032 // DeviceManagementResponder
00033 #include "mbed-connector-interface/DeviceManagementResponder.h"
00034 
00035 // DeviceStringResource
00036 #include "mbed-connector-interface/DeviceStringResource.h"
00037 
00038 // DeviceIntegerResource
00039 #include "mbed-connector-interface/DeviceIntegerResource.h"
00040 
00041 // DeviceFirmwareUpdateResource
00042 #include "mbed-connector-interface/DeviceFirmwareUpdateResource.h"
00043 
00044 // DeviceFirmwareManifestResource
00045 #include "mbed-connector-interface/DeviceFirmwareManifestResource.h"
00046  
00047 // Default Constructor
00048 DeviceFirmwareCompositeResource::DeviceFirmwareCompositeResource(const Logger *logger,const char *obj_name,const void *dm_responder) {
00049     this->m_logger = (Logger *)logger;
00050     this->m_dm_responder = (void *)dm_responder;
00051     this->m_obj_name = (char *)obj_name;
00052     for(int i=0;i<NUM_FIRMWARE_RESOURCE_IDS;++i) {
00053         this->m_firmware_resource[i] = NULL;
00054     }
00055 }
00056  
00057 // Copy Constructor
00058 DeviceFirmwareCompositeResource::DeviceFirmwareCompositeResource(const DeviceFirmwareCompositeResource &res) {
00059     this->m_logger = res.m_logger;
00060     this->m_dm_responder = res.m_dm_responder;
00061     this->m_obj_name = res.m_obj_name;
00062     for(int i=0;i<NUM_FIRMWARE_RESOURCE_IDS;++i) {
00063         this->m_firmware_resource[i] = res.m_firmware_resource[i];
00064     }
00065 }
00066  
00067 // Destructor
00068 DeviceFirmwareCompositeResource::~DeviceFirmwareCompositeResource() {
00069 }
00070 
00071 // Build out our Firmware Resources
00072 void DeviceFirmwareCompositeResource::buildResources() {
00073     // LWM2M_PAYLOAD_ID (TODO: Needs to be OPAQUE and full firmware blob...)
00074     this->m_firmware_resource[LWM2M_PAYLOAD_ID] = new DeviceStringResource(this->m_logger,this->m_obj_name,LWM2M_DEV_FIRMWARE_PACKAGE_ID,"fw_package",this->m_dm_responder,false);
00075     
00076     // LWM2M_MANIFEST_ID
00077     this->m_firmware_resource[LWM2M_MANIFEST_ID] = new DeviceFirmwareManifestResource(this->m_logger,this->m_obj_name,LWM2M_DEV_FIRMWARE_PACKAGE_URI_ID,this->m_dm_responder,false);
00078     
00079     // LWM2M_UPDATE_ID
00080     this->m_firmware_resource[LWM2M_UPDATE_ID] = new DeviceFirmwareUpdateResource(this->m_logger,this->m_obj_name,LWM2M_DEV_FIRMWARE_UPDATE_ID,this->m_dm_responder,false);
00081     
00082     // LWM2M_STATE_ID
00083     this->m_firmware_resource[LWM2M_STATE_ID] = new DeviceIntegerResource(this->m_logger,this->m_obj_name,LWM2M_DEV_FIRMWARE_STATE_ID,"fw_state",this->m_dm_responder,false);
00084     
00085     // LWM2M_RESULT_ID
00086     this->m_firmware_resource[LWM2M_RESULT_ID] = new DeviceIntegerResource(this->m_logger,this->m_obj_name,LWM2M_DEV_FIRMWARE_RESULT_ID,"fw_result",this->m_dm_responder,true);
00087     
00088     // LWM2M_PKGNAME_ID
00089     this->m_firmware_resource[LWM2M_PKGNAME_ID] = new DeviceStringResource(this->m_logger,this->m_obj_name,LWM2M_DEV_FIRMWARE_PKG_NAME_ID,"fw_pkg_name",this->m_dm_responder,false);
00090     
00091     // LWM2M_PKGVERSION_ID
00092     this->m_firmware_resource[LWM2M_PKGVERSION_ID] = new DeviceStringResource(this->m_logger,this->m_obj_name,LWM2M_DEV_FIRMWARE_PKG_VERSION_ID,"fw_pkg_version",this->m_dm_responder,false);
00093     
00094     // Establish default values for State and Result
00095     this->m_firmware_resource[LWM2M_STATE_ID]->put("1");         // idle == 1
00096     this->m_firmware_resource[LWM2M_RESULT_ID]->put("0");        // default result == 0  
00097     
00098     // Tie firmare composite resource for future updating by the dm_responder functions
00099     DeviceManagementResponder *dmr = (DeviceManagementResponder *)this->m_dm_responder;
00100     dmr->setFirmwareCompositeResource(this);
00101 }
00102  
00103 // add resources
00104 void DeviceFirmwareCompositeResource::addResources(void *cfg) {
00105     // our Endpoint configuration
00106     Connector::OptionsBuilder *configure_options = (Connector::OptionsBuilder *)cfg;
00107     
00108     // loop through the internal resources and add them... 
00109     for(int i=0;i<NUM_FIRMWARE_RESOURCE_IDS;++i) {
00110         if (this->m_firmware_resource[i] != NULL) {
00111             configure_options->addResource(this->m_firmware_resource[i]);
00112         }
00113     }
00114 }
00115 
00116 // get a specific resource
00117 void *DeviceFirmwareCompositeResource::getResource(FirmwareResourceIDs id) {
00118     int index = (int)id;
00119     if (index >= 0 && index < NUM_FIRMWARE_RESOURCE_IDS) {
00120         return this->m_firmware_resource[index];
00121     }
00122     return NULL;
00123 }
00124 
00125 
00126