This is the sample program that can see the decode result of barcode data on Watson IoT.
Dependencies: AsciiFont DisplayApp GR-PEACH_video LCD_shield_config LWIPBP3595Interface_STA_for_mbed-os USBDevice
mbedConnectorInterface/source/ObjectInstanceManager.cpp@1:67f8b5cfde75, 2016-11-10 (annotated)
- Committer:
- Osamu Nakamura
- Date:
- Thu Nov 10 20:23:55 2016 +0900
- Revision:
- 1:67f8b5cfde75
- Parent:
- 0:7d720671e6dc
Revised the initial value of /888/0/7700
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Osamu Nakamura |
0:7d720671e6dc | 1 | /** |
Osamu Nakamura |
0:7d720671e6dc | 2 | * @file ObjectInstanceManager.cpp |
Osamu Nakamura |
0:7d720671e6dc | 3 | * @brief mbed CoAP Endpoint Device Management Object Instance Manager |
Osamu Nakamura |
0:7d720671e6dc | 4 | * @author Doug Anson |
Osamu Nakamura |
0:7d720671e6dc | 5 | * @version 1.0 |
Osamu Nakamura |
0:7d720671e6dc | 6 | * @see |
Osamu Nakamura |
0:7d720671e6dc | 7 | * |
Osamu Nakamura |
0:7d720671e6dc | 8 | * Copyright (c) 2016 |
Osamu Nakamura |
0:7d720671e6dc | 9 | * |
Osamu Nakamura |
0:7d720671e6dc | 10 | * Licensed under the Apache License, Version 2.0 (the "License"); |
Osamu Nakamura |
0:7d720671e6dc | 11 | * you may not use this file except in compliance with the License. |
Osamu Nakamura |
0:7d720671e6dc | 12 | * You may obtain a copy of the License at |
Osamu Nakamura |
0:7d720671e6dc | 13 | * |
Osamu Nakamura |
0:7d720671e6dc | 14 | * http://www.apache.org/licenses/LICENSE-2.0 |
Osamu Nakamura |
0:7d720671e6dc | 15 | * |
Osamu Nakamura |
0:7d720671e6dc | 16 | * Unless required by applicable law or agreed to in writing, software |
Osamu Nakamura |
0:7d720671e6dc | 17 | * distributed under the License is distributed on an "AS IS" BASIS, |
Osamu Nakamura |
0:7d720671e6dc | 18 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
Osamu Nakamura |
0:7d720671e6dc | 19 | * See the License for the specific language governing permissions and |
Osamu Nakamura |
0:7d720671e6dc | 20 | * limitations under the License. |
Osamu Nakamura |
0:7d720671e6dc | 21 | */ |
Osamu Nakamura |
0:7d720671e6dc | 22 | |
Osamu Nakamura |
0:7d720671e6dc | 23 | // Class support |
Osamu Nakamura |
0:7d720671e6dc | 24 | #include "mbed-connector-interface/ObjectInstanceManager.h" |
Osamu Nakamura |
0:7d720671e6dc | 25 | |
Osamu Nakamura |
0:7d720671e6dc | 26 | // mbed-client support |
Osamu Nakamura |
0:7d720671e6dc | 27 | #include "mbed-client/m2minterfacefactory.h" |
Osamu Nakamura |
0:7d720671e6dc | 28 | #include "mbed-client/m2minterfaceobserver.h" |
Osamu Nakamura |
0:7d720671e6dc | 29 | #include "mbed-client/m2minterface.h" |
Osamu Nakamura |
0:7d720671e6dc | 30 | #include "mbed-client/m2mobjectinstance.h" |
Osamu Nakamura |
0:7d720671e6dc | 31 | #include "mbed-client/m2mresource.h" |
Osamu Nakamura |
0:7d720671e6dc | 32 | #include "mbed-client/m2mdevice.h" |
Osamu Nakamura |
0:7d720671e6dc | 33 | #include "mbed-client/m2mfirmware.h" |
Osamu Nakamura |
0:7d720671e6dc | 34 | |
Osamu Nakamura |
0:7d720671e6dc | 35 | // string support |
Osamu Nakamura |
0:7d720671e6dc | 36 | #include <string> |
Osamu Nakamura |
0:7d720671e6dc | 37 | |
Osamu Nakamura |
0:7d720671e6dc | 38 | // constructor |
Osamu Nakamura |
0:7d720671e6dc | 39 | ObjectInstanceManager::ObjectInstanceManager(const Logger *logger,const void *ep) { |
Osamu Nakamura |
0:7d720671e6dc | 40 | this->m_logger = (Logger *)logger; |
Osamu Nakamura |
0:7d720671e6dc | 41 | this->m_ep = (void *)ep; |
Osamu Nakamura |
0:7d720671e6dc | 42 | this->m_object_list.clear(); |
Osamu Nakamura |
0:7d720671e6dc | 43 | this->m_instance_number = 0; |
Osamu Nakamura |
0:7d720671e6dc | 44 | } |
Osamu Nakamura |
0:7d720671e6dc | 45 | |
Osamu Nakamura |
0:7d720671e6dc | 46 | // copy constructor |
Osamu Nakamura |
0:7d720671e6dc | 47 | ObjectInstanceManager::ObjectInstanceManager(const ObjectInstanceManager &oim) { |
Osamu Nakamura |
0:7d720671e6dc | 48 | this->m_logger = oim.m_logger; |
Osamu Nakamura |
0:7d720671e6dc | 49 | this->m_ep = oim.m_ep; |
Osamu Nakamura |
0:7d720671e6dc | 50 | this->m_object_list = oim.m_object_list; |
Osamu Nakamura |
0:7d720671e6dc | 51 | this->m_instance_number = oim.m_instance_number; |
Osamu Nakamura |
0:7d720671e6dc | 52 | } |
Osamu Nakamura |
0:7d720671e6dc | 53 | |
Osamu Nakamura |
0:7d720671e6dc | 54 | // destructor |
Osamu Nakamura |
0:7d720671e6dc | 55 | ObjectInstanceManager::~ObjectInstanceManager() { |
Osamu Nakamura |
0:7d720671e6dc | 56 | this->m_object_list.clear(); |
Osamu Nakamura |
0:7d720671e6dc | 57 | } |
Osamu Nakamura |
0:7d720671e6dc | 58 | |
Osamu Nakamura |
0:7d720671e6dc | 59 | // create a Dynamic Resource Instance |
Osamu Nakamura |
0:7d720671e6dc | 60 | void *ObjectInstanceManager::createDynamicResourceInstance(char *objID,char *resID,char *resName,int resType,bool observable) { |
Osamu Nakamura |
0:7d720671e6dc | 61 | void *res = NULL; |
Osamu Nakamura |
0:7d720671e6dc | 62 | M2MObjectInstance *instance = (M2MObjectInstance *)this->getOrCreateInstance(objID,resID); |
Osamu Nakamura |
0:7d720671e6dc | 63 | if (instance != NULL) { |
Osamu Nakamura |
0:7d720671e6dc | 64 | // DEBUG |
Osamu Nakamura |
0:7d720671e6dc | 65 | //this->logger()->logging("ObjectInstanceManager: Creating Dynamic Resource: ObjID:%s ResID:%s ResName:%s Type:%d Observable: %d",objID,resID,resName,resType,observable); |
Osamu Nakamura |
0:7d720671e6dc | 66 | |
Osamu Nakamura |
0:7d720671e6dc | 67 | // create the resource |
Osamu Nakamura |
0:7d720671e6dc | 68 | res = (void *)instance->create_dynamic_resource(resID,resName,(M2MResourceInstance::ResourceType)resType,observable); |
Osamu Nakamura |
0:7d720671e6dc | 69 | } |
Osamu Nakamura |
0:7d720671e6dc | 70 | return res; |
Osamu Nakamura |
0:7d720671e6dc | 71 | } |
Osamu Nakamura |
0:7d720671e6dc | 72 | |
Osamu Nakamura |
0:7d720671e6dc | 73 | // create a Static Resource Instance |
Osamu Nakamura |
0:7d720671e6dc | 74 | void *ObjectInstanceManager::createStaticResourceInstance(char *objID,char *resID,char *resName,int resType,void *data,int data_length) { |
Osamu Nakamura |
0:7d720671e6dc | 75 | void *res = NULL; |
Osamu Nakamura |
0:7d720671e6dc | 76 | M2MObjectInstance *instance = (M2MObjectInstance *)this->getOrCreateInstance(objID,resID); |
Osamu Nakamura |
0:7d720671e6dc | 77 | if (instance != NULL) { |
Osamu Nakamura |
0:7d720671e6dc | 78 | // DEBUG |
Osamu Nakamura |
0:7d720671e6dc | 79 | //this->logger()->logging("ObjectInstanceManager: Creating Static Resource: ObjID:%s ResID:%s ResName:%s Type:%d DataLength: %d",objID,resID,resName,resType,data_length); |
Osamu Nakamura |
0:7d720671e6dc | 80 | |
Osamu Nakamura |
0:7d720671e6dc | 81 | // create the resource |
Osamu Nakamura |
0:7d720671e6dc | 82 | res = (void *)instance->create_static_resource(resID,resName,(M2MResourceInstance::ResourceType)resType,(uint8_t *)data,(uint8_t)data_length); |
Osamu Nakamura |
0:7d720671e6dc | 83 | } |
Osamu Nakamura |
0:7d720671e6dc | 84 | return res; |
Osamu Nakamura |
0:7d720671e6dc | 85 | } |
Osamu Nakamura |
0:7d720671e6dc | 86 | |
Osamu Nakamura |
0:7d720671e6dc | 87 | // Get the instance number of the resource just created |
Osamu Nakamura |
0:7d720671e6dc | 88 | int ObjectInstanceManager::getLastCreatedInstanceNumber() { |
Osamu Nakamura |
0:7d720671e6dc | 89 | return this->m_instance_number; |
Osamu Nakamura |
0:7d720671e6dc | 90 | } |
Osamu Nakamura |
0:7d720671e6dc | 91 | |
Osamu Nakamura |
0:7d720671e6dc | 92 | // create and/or retrieve a given instance |
Osamu Nakamura |
0:7d720671e6dc | 93 | void *ObjectInstanceManager::getOrCreateInstance(char *objID,char *resID) { |
Osamu Nakamura |
0:7d720671e6dc | 94 | void *instance = NULL; |
Osamu Nakamura |
0:7d720671e6dc | 95 | NamedPointer *obj_np = this->getOrCreateObject(objID); |
Osamu Nakamura |
0:7d720671e6dc | 96 | if (obj_np != NULL) { |
Osamu Nakamura |
0:7d720671e6dc | 97 | NamedPointerList *list = (NamedPointerList *)obj_np->list(); |
Osamu Nakamura |
0:7d720671e6dc | 98 | NamedPointer *inst_np = this->getNamedPointer(resID,list); |
Osamu Nakamura |
0:7d720671e6dc | 99 | if (inst_np != NULL) { |
Osamu Nakamura |
0:7d720671e6dc | 100 | // instance already exists... so create another one (n)... |
Osamu Nakamura |
0:7d720671e6dc | 101 | M2MObject *obj = (M2MObject *)(obj_np->ptr()); |
Osamu Nakamura |
0:7d720671e6dc | 102 | if (obj != NULL) { |
Osamu Nakamura |
0:7d720671e6dc | 103 | instance = (void *)obj->create_object_instance(); |
Osamu Nakamura |
0:7d720671e6dc | 104 | this->m_instance_number = inst_np->index()+1; |
Osamu Nakamura |
0:7d720671e6dc | 105 | NamedPointer new_inst_np(string(resID),instance,this->m_instance_number); |
Osamu Nakamura |
0:7d720671e6dc | 106 | list->push_back(new_inst_np); |
Osamu Nakamura |
0:7d720671e6dc | 107 | } |
Osamu Nakamura |
0:7d720671e6dc | 108 | } |
Osamu Nakamura |
0:7d720671e6dc | 109 | else if (list->size() > 0) { |
Osamu Nakamura |
0:7d720671e6dc | 110 | // 0th instance exists... parent the resource to it... |
Osamu Nakamura |
0:7d720671e6dc | 111 | this->m_instance_number = 0; |
Osamu Nakamura |
0:7d720671e6dc | 112 | instance = (void *)(list->at(0).ptr()); |
Osamu Nakamura |
0:7d720671e6dc | 113 | } |
Osamu Nakamura |
0:7d720671e6dc | 114 | else { |
Osamu Nakamura |
0:7d720671e6dc | 115 | // no instance does not exist so create one (0).. |
Osamu Nakamura |
0:7d720671e6dc | 116 | M2MObject *obj = (M2MObject *)(obj_np->ptr()); |
Osamu Nakamura |
0:7d720671e6dc | 117 | if (obj != NULL) { |
Osamu Nakamura |
0:7d720671e6dc | 118 | instance = (void *)obj->create_object_instance(); |
Osamu Nakamura |
0:7d720671e6dc | 119 | this->m_instance_number = 0; |
Osamu Nakamura |
0:7d720671e6dc | 120 | NamedPointer new_inst_np(string(resID),instance,this->m_instance_number); |
Osamu Nakamura |
0:7d720671e6dc | 121 | list->push_back(new_inst_np); |
Osamu Nakamura |
0:7d720671e6dc | 122 | } |
Osamu Nakamura |
0:7d720671e6dc | 123 | } |
Osamu Nakamura |
0:7d720671e6dc | 124 | } |
Osamu Nakamura |
0:7d720671e6dc | 125 | else { |
Osamu Nakamura |
0:7d720671e6dc | 126 | // DEBUG |
Osamu Nakamura |
0:7d720671e6dc | 127 | this->logger()->logging("getOrCreateInstance: unable to create object instance for objID:%s",objID); |
Osamu Nakamura |
0:7d720671e6dc | 128 | } |
Osamu Nakamura |
0:7d720671e6dc | 129 | return instance; |
Osamu Nakamura |
0:7d720671e6dc | 130 | } |
Osamu Nakamura |
0:7d720671e6dc | 131 | |
Osamu Nakamura |
0:7d720671e6dc | 132 | // create and/or retrieve a given objectID |
Osamu Nakamura |
0:7d720671e6dc | 133 | NamedPointer *ObjectInstanceManager::getOrCreateObject(char *objID) { |
Osamu Nakamura |
0:7d720671e6dc | 134 | NamedPointer *result = NULL; |
Osamu Nakamura |
0:7d720671e6dc | 135 | if (objID != NULL) { |
Osamu Nakamura |
0:7d720671e6dc | 136 | result = this->getNamedPointer(objID,&(this->m_object_list)); |
Osamu Nakamura |
0:7d720671e6dc | 137 | } |
Osamu Nakamura |
0:7d720671e6dc | 138 | if (result == NULL) { |
Osamu Nakamura |
0:7d720671e6dc | 139 | void *obj = (void *)M2MInterfaceFactory::create_object(objID); |
Osamu Nakamura |
0:7d720671e6dc | 140 | NamedPointer new_np(string(objID),obj,0); |
Osamu Nakamura |
0:7d720671e6dc | 141 | this->m_object_list.push_back(new_np); |
Osamu Nakamura |
0:7d720671e6dc | 142 | result = this->getNamedPointer(objID,&(this->m_object_list)); |
Osamu Nakamura |
0:7d720671e6dc | 143 | } |
Osamu Nakamura |
0:7d720671e6dc | 144 | return result; |
Osamu Nakamura |
0:7d720671e6dc | 145 | } |
Osamu Nakamura |
0:7d720671e6dc | 146 | |
Osamu Nakamura |
0:7d720671e6dc | 147 | // get the named pointer for a given id |
Osamu Nakamura |
0:7d720671e6dc | 148 | NamedPointer *ObjectInstanceManager::getNamedPointer(const char *id,NamedPointerList *list) { |
Osamu Nakamura |
0:7d720671e6dc | 149 | NamedPointer *result = NULL; |
Osamu Nakamura |
0:7d720671e6dc | 150 | bool found = false; |
Osamu Nakamura |
0:7d720671e6dc | 151 | for(int i=0;list != NULL && i<(int)list->size() && !found;++i) { |
Osamu Nakamura |
0:7d720671e6dc | 152 | char *tmp_id = (char *)list->at(i).name().c_str(); |
Osamu Nakamura |
0:7d720671e6dc | 153 | if (id != NULL && tmp_id != NULL && strcmp(id,tmp_id) == 0) { |
Osamu Nakamura |
0:7d720671e6dc | 154 | found = true; |
Osamu Nakamura |
0:7d720671e6dc | 155 | result = &(list->at(i)); |
Osamu Nakamura |
0:7d720671e6dc | 156 | } |
Osamu Nakamura |
0:7d720671e6dc | 157 | } |
Osamu Nakamura |
0:7d720671e6dc | 158 | return result; |
Osamu Nakamura |
0:7d720671e6dc | 159 | } |
Osamu Nakamura |
0:7d720671e6dc | 160 | |
Osamu Nakamura |
0:7d720671e6dc | 161 | // Get our Object List |
Osamu Nakamura |
0:7d720671e6dc | 162 | NamedPointerList ObjectInstanceManager::getObjectList() { |
Osamu Nakamura |
0:7d720671e6dc | 163 | return this->m_object_list; |
Osamu Nakamura |
0:7d720671e6dc | 164 | } |
Osamu Nakamura |
0:7d720671e6dc | 165 | |
Osamu Nakamura |
0:7d720671e6dc | 166 | // Logger |
Osamu Nakamura |
0:7d720671e6dc | 167 | Logger *ObjectInstanceManager::logger() { |
Osamu Nakamura |
0:7d720671e6dc | 168 | return this->m_logger; |
Osamu Nakamura |
0:7d720671e6dc | 169 | } |
Osamu Nakamura |
0:7d720671e6dc | 170 |