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

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?

UserRevisionLine numberNew 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