Sample program showing how to connect GR-PEACH into Watson IoT through mbed Connector and Watson's Connector Bridge

Dependencies:   AsciiFont DisplayApp GR-PEACH_video LCD_shield_config LWIPBP3595Interface_STA_for_mbed-os USBDevice

Overview

This sample program shows how to connect GR-PEACH into Watson IoT through mbed Connector and Watson's Connector Bridge. Note that this program is derived from https://github.com/ARMmbed/mbed-ethernet-sample-techcon2016.

In this program, at first, the barcode data input from camera is decoded on GR-PEACH using ZXing which is an open-source, multi-format 1D/2D barcode image processing library. Then, the decoded string is sent to Watson IoT via mbed Device Connector and Watson's Connector Bridge. At last, the delivered string is confirmed via NodeRED flow.

Required hardware

Application setup

  1. Select the connection type. For details, please refer to the following wiki:
    https://developer.mbed.org/teams/Renesas/code/mbed-os_Watson-IoT_ZXing_sample/wiki/Connection-type.
  2. Set the client credentials. For details, please refer to the following wiki:
    https://developer.mbed.org/teams/Renesas/code/mbed-os_Watson-IoT_ZXing_sample/wiki/Client-credentials.
  3. Change Ethernet settings. For details, please refer to the following wiki:
    https://developer.mbed.org/teams/Renesas/code/mbed-os_Watson-IoT_ZXing_sample/wiki/Ethernet-settings.
  4. Change Wifi settings. For details, please refer to the following wiki:
    https://developer.mbed.org/teams/Renesas/code/mbed-os_Watson-IoT_ZXing_sample/wiki/Wifi-settings.

Building this sample program

  1. Import this sample program onto mbed Compiler.
  2. Configure this sample program in accordance with Application setup.
  3. Compile the example on mbed Compiler and download the resultant binary file.
  4. Plug the Ethernet cable into GR-PEACH if you are using Ethernet mode. /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen7.png
  5. Plug the micro-USB cable into the OpenSDA port with lies on the next to the RESET button.
  6. Copy the binary previously downloaded to your PC to GR-PEACH to flash this sample program. When the copy is successfully completed, the board is ready to work.
  7. Press the RESET button on the board to run this sample program.
  8. For verification, please refer to the following wiki:
    https://developer.mbed.org/teams/Renesas/code/mbed-os_Watson-IoT_ZXing_sample/wiki/Monitoring-the-application.

Application resources

This sample program exposes two resources listed below:

  1. /311/0/5850 : Trigger to toggle LED on GR-PEACH (PUT). When "1" is sent to this resource by PUT method, LED should be turned off. Otherwise, LED should be turned on.
  2. /888/0/7700: Decode result of barcode data input from camera (GET)

Setup of Watson IoT

  1. You should create Watson IoT Instance by the following procedure:
    • Login IBM Bluemix from https://console.ng.bluemix.net/ and login it.
    • Select Services as follows: /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen6.png
    • Select Internet of Things" as follows: /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen7_1.png
    • Press Get Started as follows: /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen8.png
    • Configure Watson IoT Instance
      • Leave unbound /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen9.png
      • Select the Free plan, then click Create /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen10.png

  2. You should create Watson IoT Application Credentials Once you successfully create Watson IoT Instance, you should see the following Watson IoT dashboard: /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen11.png
    • On dashboard, launch the Connect your devices dashboard /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen12.png
    • Click APPS /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen13.png
    • Click Generate API Key /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen14_1.png
    • Record the API Key and Authenticatoin Token. Then click Generate after adding a comment /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen15.png Note that these two values will be needed in the later step.
  3. Watson IoT NodeRED Application should be created in accordance with the following procedure:
    • Go back to your Bluemix Dashboard: https://console.ng.bluemix.net
    • Click Create Application /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen16.png
    • Select Node-RED Starter /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen17.png
    • Enter a unique App name and Click Create /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen18.png
    • Application will Stage after a few minutes
    • Application will report app is running when the staging has completed
  4. Watson NodeRED Application should be binded to Watson IoT instance
    • You can now see the dashboard below: /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen19.png
    • Click Connections. Then, press Connect Existing /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen20.png
    • Click on Watson IoT Instance badge. Then, press Connect /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen21.png
    • NodeRED application will restage. This will take a while. Please wait for Your app is running state /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen22.png /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen23.png
  5. You should acquire mbed Device Connector DOMAIN value
    • Go to the mbed Device Connector Dashboard: https://connector.mbed.com and log in /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen41.png
    • Select Access Key in order to create a new token /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen42.png
    • Click CREATE NEW ACCESS KEY and enter a unique name. Then, push ADD bution /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen43.png
    • an API token is generated. Need to save the generated string for later steps /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen44.png
  1. You should configure Watson IoT ARM mbed Connector Bridge
    • Go back to the Watson IoT Dashboard and select Extensions /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen24.png
    • Press Add Extension /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen25.png
    • Add ARM mbed Connector /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen26_1.png
    • Setup the bridge /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen27.png
    • Enter your Connector API Token to Access Key and MBED_DOMAIN to Domain Id, respectively. Then, click Check Connection /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen28.png
    • If the connection is successfully established, you can see Connection Established. Then, press Done /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen29.png
  2. NodeRED Flow Example should be imported
    • Open NODEFLOW_GR-PEACH.txt
    • Navigate to the URL that you recorded earlier for your Watson IoT NodeRED Application (i.e. http://<app name>.mybluemix.net) and Select Go to your NodeRED flow editor /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen30.png
    • Select menu, Import and Clipboard /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen31.png
    • Paste the entire contents of JSON code described in NODEFLOW_GR-PEACH.txt and click Import /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen32.png
  3. Watson IoT Application Node Flow should be configured
    • Double-click input node and link them to your Watson IoT instance. /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen33.png
    • Click on the edit button /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen34.png
    • First enter arbitrary name. Then, Watson API Key and Watson Auth Token previously acquired. Finally, press Add to save /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen35.png
    • Enter MBED_ENDPOINT_NAME in security.h as Device ID. Then, press Done to save /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen36.png
    • Double-click output node /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen37.png
    • Edit API Key and Device Id in the same manner as that for input node
    • Click LED OFF and LED ON node and replace MBED_ENDPOINT_NAME_GOES_HERE with MBED_ENDPOINT_NAME as shown below: /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen38.png
    • Click Deproy to deploy NodeRED application /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen39.png
  4. Invoke sample program
    • Press the reset button on GR-PEACH
    • The decode result of barcode data should be shown in debug window /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen40_1.png
    • Also, you can toggle LED by clicking Turn LED OFF and Turn LED ON injection node /media/uploads/HinoNaka/mbed-os_watson-iot_zxing_sample_screen40_2.png
Committer:
Osamu Nakamura
Date:
Thu Nov 24 13:59:16 2016 +0900
Revision:
0:ad834d403a8c
Initial Commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Osamu Nakamura 0:ad834d403a8c 1 /**
Osamu Nakamura 0:ad834d403a8c 2 * @file DynamicResource.cpp
Osamu Nakamura 0:ad834d403a8c 3 * @brief mbed CoAP Endpoint Dynamic Resource class
Osamu Nakamura 0:ad834d403a8c 4 * @author Doug Anson/Chris Paola
Osamu Nakamura 0:ad834d403a8c 5 * @version 1.0
Osamu Nakamura 0:ad834d403a8c 6 * @see
Osamu Nakamura 0:ad834d403a8c 7 *
Osamu Nakamura 0:ad834d403a8c 8 * Copyright (c) 2014
Osamu Nakamura 0:ad834d403a8c 9 *
Osamu Nakamura 0:ad834d403a8c 10 * Licensed under the Apache License, Version 2.0 (the "License");
Osamu Nakamura 0:ad834d403a8c 11 * you may not use this file except in compliance with the License.
Osamu Nakamura 0:ad834d403a8c 12 * You may obtain a copy of the License at
Osamu Nakamura 0:ad834d403a8c 13 *
Osamu Nakamura 0:ad834d403a8c 14 * http://www.apache.org/licenses/LICENSE-2.0
Osamu Nakamura 0:ad834d403a8c 15 *
Osamu Nakamura 0:ad834d403a8c 16 * Unless required by applicable law or agreed to in writing, software
Osamu Nakamura 0:ad834d403a8c 17 * distributed under the License is distributed on an "AS IS" BASIS,
Osamu Nakamura 0:ad834d403a8c 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Osamu Nakamura 0:ad834d403a8c 19 * See the License for the specific language governing permissions and
Osamu Nakamura 0:ad834d403a8c 20 * limitations under the License.
Osamu Nakamura 0:ad834d403a8c 21 */
Osamu Nakamura 0:ad834d403a8c 22
Osamu Nakamura 0:ad834d403a8c 23 // Class support
Osamu Nakamura 0:ad834d403a8c 24 #include "mbed-connector-interface/DynamicResource.h"
Osamu Nakamura 0:ad834d403a8c 25
Osamu Nakamura 0:ad834d403a8c 26 // ResourceObserver help
Osamu Nakamura 0:ad834d403a8c 27 #include "mbed-connector-interface/ResourceObserver.h"
Osamu Nakamura 0:ad834d403a8c 28
Osamu Nakamura 0:ad834d403a8c 29 // Options enablement
Osamu Nakamura 0:ad834d403a8c 30 #include "mbed-connector-interface/Options.h"
Osamu Nakamura 0:ad834d403a8c 31
Osamu Nakamura 0:ad834d403a8c 32 // Endpoint
Osamu Nakamura 0:ad834d403a8c 33 #include "mbed-connector-interface/ConnectorEndpoint.h"
Osamu Nakamura 0:ad834d403a8c 34
Osamu Nakamura 0:ad834d403a8c 35 // GET option that can be used to Start/Stop Observations...
Osamu Nakamura 0:ad834d403a8c 36 #define START_OBS 0
Osamu Nakamura 0:ad834d403a8c 37 #define STOP_OBS 1
Osamu Nakamura 0:ad834d403a8c 38
Osamu Nakamura 0:ad834d403a8c 39 // MaxAge support for each DynamicResource
Osamu Nakamura 0:ad834d403a8c 40 #define DEFAULT_MAXAGE 60
Osamu Nakamura 0:ad834d403a8c 41
Osamu Nakamura 0:ad834d403a8c 42 // ContentFormat defaults for each DynamicResource
Osamu Nakamura 0:ad834d403a8c 43 #define DEFAULT_CONTENT_FORMAT 0
Osamu Nakamura 0:ad834d403a8c 44
Osamu Nakamura 0:ad834d403a8c 45 // default constructor
Osamu Nakamura 0:ad834d403a8c 46 DynamicResource::DynamicResource(const Logger *logger,const char *obj_name,const char *res_name,const char *res_type,uint8_t res_mask,const bool observable,const ResourceType type) : Resource<string>(logger,string(obj_name),string(res_name),string(""))
Osamu Nakamura 0:ad834d403a8c 47 {
Osamu Nakamura 0:ad834d403a8c 48 this->m_res_type = string(res_type);
Osamu Nakamura 0:ad834d403a8c 49 this->m_type = type;
Osamu Nakamura 0:ad834d403a8c 50 this->m_observable = observable;
Osamu Nakamura 0:ad834d403a8c 51 this->m_res_mask = res_mask;
Osamu Nakamura 0:ad834d403a8c 52 this->m_obs_number = 0;
Osamu Nakamura 0:ad834d403a8c 53 this->m_data_wrapper = NULL;
Osamu Nakamura 0:ad834d403a8c 54 this->m_observer = NULL;
Osamu Nakamura 0:ad834d403a8c 55 this->m_maxage = DEFAULT_MAXAGE;
Osamu Nakamura 0:ad834d403a8c 56 this->m_content_format = DEFAULT_CONTENT_FORMAT;
Osamu Nakamura 0:ad834d403a8c 57 this->m_ep = NULL;
Osamu Nakamura 0:ad834d403a8c 58 this->m_res = NULL;
Osamu Nakamura 0:ad834d403a8c 59 }
Osamu Nakamura 0:ad834d403a8c 60
Osamu Nakamura 0:ad834d403a8c 61 // constructor (input initial value)
Osamu Nakamura 0:ad834d403a8c 62 DynamicResource::DynamicResource(const Logger *logger,const char *obj_name,const char *res_name,const char *res_type,const string value,uint8_t res_mask,const bool observable,const ResourceType type) : Resource<string>(logger,string(obj_name),string(res_name),value)
Osamu Nakamura 0:ad834d403a8c 63 {
Osamu Nakamura 0:ad834d403a8c 64 this->m_res_type = string(res_type);
Osamu Nakamura 0:ad834d403a8c 65 this->m_type = type;
Osamu Nakamura 0:ad834d403a8c 66 this->m_observable = observable;
Osamu Nakamura 0:ad834d403a8c 67 this->m_res_mask = res_mask;
Osamu Nakamura 0:ad834d403a8c 68 this->m_obs_number = 0;
Osamu Nakamura 0:ad834d403a8c 69 this->m_data_wrapper = NULL;
Osamu Nakamura 0:ad834d403a8c 70 this->m_observer = NULL;
Osamu Nakamura 0:ad834d403a8c 71 this->m_maxage = DEFAULT_MAXAGE;
Osamu Nakamura 0:ad834d403a8c 72 this->m_content_format = DEFAULT_CONTENT_FORMAT;
Osamu Nakamura 0:ad834d403a8c 73 this->m_ep = NULL;
Osamu Nakamura 0:ad834d403a8c 74 this->m_res = NULL;
Osamu Nakamura 0:ad834d403a8c 75 }
Osamu Nakamura 0:ad834d403a8c 76
Osamu Nakamura 0:ad834d403a8c 77 // constructor (strings)
Osamu Nakamura 0:ad834d403a8c 78 DynamicResource::DynamicResource(const Logger *logger,const string obj_name,const string res_name,const string res_type,const string value,uint8_t res_mask,const bool observable,const ResourceType type) : Resource<string>(logger,obj_name,res_name,value)
Osamu Nakamura 0:ad834d403a8c 79 {
Osamu Nakamura 0:ad834d403a8c 80 this->m_res_type = res_type;
Osamu Nakamura 0:ad834d403a8c 81 this->m_type = type;
Osamu Nakamura 0:ad834d403a8c 82 this->m_observable = observable;
Osamu Nakamura 0:ad834d403a8c 83 this->m_res_mask = res_mask;
Osamu Nakamura 0:ad834d403a8c 84 this->m_obs_number = 0;
Osamu Nakamura 0:ad834d403a8c 85 this->m_data_wrapper = NULL;
Osamu Nakamura 0:ad834d403a8c 86 this->m_observer = NULL;
Osamu Nakamura 0:ad834d403a8c 87 this->m_maxage = DEFAULT_MAXAGE;
Osamu Nakamura 0:ad834d403a8c 88 this->m_content_format = DEFAULT_CONTENT_FORMAT;
Osamu Nakamura 0:ad834d403a8c 89 this->m_ep = NULL;
Osamu Nakamura 0:ad834d403a8c 90 this->m_res = NULL;
Osamu Nakamura 0:ad834d403a8c 91 }
Osamu Nakamura 0:ad834d403a8c 92
Osamu Nakamura 0:ad834d403a8c 93 // copy constructor
Osamu Nakamura 0:ad834d403a8c 94 DynamicResource::DynamicResource(const DynamicResource &resource) : Resource<string>((const Resource<string> &)resource)
Osamu Nakamura 0:ad834d403a8c 95 {
Osamu Nakamura 0:ad834d403a8c 96 this->m_res_type = resource.m_res_type;
Osamu Nakamura 0:ad834d403a8c 97 this->m_type = resource.m_type;
Osamu Nakamura 0:ad834d403a8c 98 this->m_observable = resource.m_observable;
Osamu Nakamura 0:ad834d403a8c 99 this->m_res_mask = resource.m_res_mask;
Osamu Nakamura 0:ad834d403a8c 100 this->m_obs_number = resource.m_obs_number;
Osamu Nakamura 0:ad834d403a8c 101 this->m_data_wrapper = resource.m_data_wrapper;
Osamu Nakamura 0:ad834d403a8c 102 this->m_observer = resource.m_observer;
Osamu Nakamura 0:ad834d403a8c 103 this->m_maxage = resource.m_maxage;
Osamu Nakamura 0:ad834d403a8c 104 this->m_content_format = resource.m_content_format;
Osamu Nakamura 0:ad834d403a8c 105 this->m_ep = resource.m_ep;
Osamu Nakamura 0:ad834d403a8c 106 this->m_res = resource.m_res;
Osamu Nakamura 0:ad834d403a8c 107 }
Osamu Nakamura 0:ad834d403a8c 108
Osamu Nakamura 0:ad834d403a8c 109 // destructor
Osamu Nakamura 0:ad834d403a8c 110 DynamicResource::~DynamicResource() {
Osamu Nakamura 0:ad834d403a8c 111 }
Osamu Nakamura 0:ad834d403a8c 112
Osamu Nakamura 0:ad834d403a8c 113 // bind CoAP Resource...
Osamu Nakamura 0:ad834d403a8c 114 void DynamicResource::bind(void *ep) {
Osamu Nakamura 0:ad834d403a8c 115 if (ep != NULL) {
Osamu Nakamura 0:ad834d403a8c 116 // cast
Osamu Nakamura 0:ad834d403a8c 117 Connector::Endpoint *endpoint = (Connector::Endpoint *)ep;
Osamu Nakamura 0:ad834d403a8c 118
Osamu Nakamura 0:ad834d403a8c 119 // get our ObjectInstanceManager
Osamu Nakamura 0:ad834d403a8c 120 ObjectInstanceManager *oim = endpoint->getObjectInstanceManager();
Osamu Nakamura 0:ad834d403a8c 121
Osamu Nakamura 0:ad834d403a8c 122 // Create our Resource
Osamu Nakamura 0:ad834d403a8c 123 this->m_res = (M2MResource *)oim->createDynamicResourceInstance((char *)this->getObjName().c_str(),(char *)this->getResName().c_str(),(char *)this->m_res_type.c_str(),(int)this->m_type,this->m_observable);
Osamu Nakamura 0:ad834d403a8c 124 if (this->m_res != NULL) {
Osamu Nakamura 0:ad834d403a8c 125 // Record our Instance Number
Osamu Nakamura 0:ad834d403a8c 126 this->setInstanceNumber(oim->getLastCreatedInstanceNumber());
Osamu Nakamura 0:ad834d403a8c 127
Osamu Nakamura 0:ad834d403a8c 128 // perform an initial get() to initialize our data value
Osamu Nakamura 0:ad834d403a8c 129 this->setValue(this->get());
Osamu Nakamura 0:ad834d403a8c 130
Osamu Nakamura 0:ad834d403a8c 131 // now record the data value
Osamu Nakamura 0:ad834d403a8c 132 if (this->getDataWrapper() != NULL) {
Osamu Nakamura 0:ad834d403a8c 133 // wrap the data...
Osamu Nakamura 0:ad834d403a8c 134 this->getDataWrapper()->wrap((uint8_t *)this->getValue().c_str(),(int)this->getValue().size());
Osamu Nakamura 0:ad834d403a8c 135 this->m_res->set_operation((M2MBase::Operation)this->m_res_mask);
Osamu Nakamura 0:ad834d403a8c 136 this->m_res->set_value( this->getDataWrapper()->get(),(uint8_t)this->getDataWrapper()->length());
Osamu Nakamura 0:ad834d403a8c 137 this->logger()->logging("%s: [%s] value: [%s] bound (observable: %d)",this->m_res_type.c_str(),this->getFullName().c_str(),this->getDataWrapper()->get(),this->m_observable);
Osamu Nakamura 0:ad834d403a8c 138 }
Osamu Nakamura 0:ad834d403a8c 139 else {
Osamu Nakamura 0:ad834d403a8c 140 // do not wrap the data...
Osamu Nakamura 0:ad834d403a8c 141 this->m_res->set_operation((M2MBase::Operation)this->m_res_mask);
Osamu Nakamura 0:ad834d403a8c 142 this->m_res->set_value((uint8_t *)this->getValue().c_str(),(uint8_t)this->getValue().size());
Osamu Nakamura 0:ad834d403a8c 143 this->logger()->logging("%s: [%s] value: [%s] bound (observable: %d)",this->m_res_type.c_str(),this->getFullName().c_str(),this->getValue().c_str(),this->m_observable);
Osamu Nakamura 0:ad834d403a8c 144 }
Osamu Nakamura 0:ad834d403a8c 145
Osamu Nakamura 0:ad834d403a8c 146 // set our endpoint instance
Osamu Nakamura 0:ad834d403a8c 147 this->m_ep = (void *)ep;
Osamu Nakamura 0:ad834d403a8c 148
Osamu Nakamura 0:ad834d403a8c 149 // For POST-enabled RESOURCES (only...), we must add a callback
Osamu Nakamura 0:ad834d403a8c 150 if ((this->m_res_mask & M2MBase::POST_ALLOWED) != 0) {
Osamu Nakamura 0:ad834d403a8c 151 // add a callback for the execute function...we will just direct through process()...
Osamu Nakamura 0:ad834d403a8c 152 //this->logger()->logging("DynamicResource::bind(): Setting up POST execute callback function");
Osamu Nakamura 0:ad834d403a8c 153 this->m_res->set_execute_function(execute_callback(this, &DynamicResource::process_resource_post));
Osamu Nakamura 0:ad834d403a8c 154 }
Osamu Nakamura 0:ad834d403a8c 155 }
Osamu Nakamura 0:ad834d403a8c 156 }
Osamu Nakamura 0:ad834d403a8c 157 else {
Osamu Nakamura 0:ad834d403a8c 158 // no instance pointer to our endpoint
Osamu Nakamura 0:ad834d403a8c 159 this->logger()->logging("%s: NULL endpoint instance pointer in bind() request...",this->m_res_type.c_str());
Osamu Nakamura 0:ad834d403a8c 160 }
Osamu Nakamura 0:ad834d403a8c 161 }
Osamu Nakamura 0:ad834d403a8c 162
Osamu Nakamura 0:ad834d403a8c 163 // get our M2MBase representation
Osamu Nakamura 0:ad834d403a8c 164 M2MResource *DynamicResource::getResource() {
Osamu Nakamura 0:ad834d403a8c 165 return this->m_res;
Osamu Nakamura 0:ad834d403a8c 166 }
Osamu Nakamura 0:ad834d403a8c 167
Osamu Nakamura 0:ad834d403a8c 168 // process inbound mbed-client POST message for a Resource
Osamu Nakamura 0:ad834d403a8c 169 void DynamicResource::process_resource_post(void *args) {
Osamu Nakamura 0:ad834d403a8c 170 // just call process() for POST and Resources...
Osamu Nakamura 0:ad834d403a8c 171 //this->logger()->logging("DynamicResource::process_resource_post(): calling process(POST)");
Osamu Nakamura 0:ad834d403a8c 172 (void)this->process(M2MBase::POST_ALLOWED,this->m_res->base_type(),args);
Osamu Nakamura 0:ad834d403a8c 173 }
Osamu Nakamura 0:ad834d403a8c 174
Osamu Nakamura 0:ad834d403a8c 175 // process inbound mbed-client message
Osamu Nakamura 0:ad834d403a8c 176 uint8_t DynamicResource::process(M2MBase::Operation op,M2MBase::BaseType type,void *args) {
Osamu Nakamura 0:ad834d403a8c 177 #if defined (HAS_EXECUTE_PARAMS)
Osamu Nakamura 0:ad834d403a8c 178 M2MResource::M2MExecuteParameter* param = NULL;
Osamu Nakamura 0:ad834d403a8c 179
Osamu Nakamura 0:ad834d403a8c 180 // cast args if present...
Osamu Nakamura 0:ad834d403a8c 181 if (args != NULL) {
Osamu Nakamura 0:ad834d403a8c 182 param = (M2MResource::M2MExecuteParameter*)args;
Osamu Nakamura 0:ad834d403a8c 183 }
Osamu Nakamura 0:ad834d403a8c 184 #endif
Osamu Nakamura 0:ad834d403a8c 185 // DEBUG
Osamu Nakamura 0:ad834d403a8c 186 //this->logger()->logging("in %s::process() Operation=0x0%x Type=%x%x",this->m_res_type.c_str(),op,type);
Osamu Nakamura 0:ad834d403a8c 187
Osamu Nakamura 0:ad834d403a8c 188 // PUT() check
Osamu Nakamura 0:ad834d403a8c 189 if ((op & M2MBase::PUT_ALLOWED) != 0) {
Osamu Nakamura 0:ad834d403a8c 190 string value = this->coapDataToString(this->m_res->value(),this->m_res->value_length());
Osamu Nakamura 0:ad834d403a8c 191 this->logger()->logging("%s: put(%d) [%s]=[%s] called.",this->m_res_type.c_str(),type,this->getFullName().c_str(),value.c_str());
Osamu Nakamura 0:ad834d403a8c 192 this->put(value.c_str());
Osamu Nakamura 0:ad834d403a8c 193 return 0;
Osamu Nakamura 0:ad834d403a8c 194 }
Osamu Nakamura 0:ad834d403a8c 195
Osamu Nakamura 0:ad834d403a8c 196 #if defined (HAS_EXECUTE_PARAMS)
Osamu Nakamura 0:ad834d403a8c 197 // POST() check
Osamu Nakamura 0:ad834d403a8c 198 if ((op & M2MBase::POST_ALLOWED) != 0) {
Osamu Nakamura 0:ad834d403a8c 199 string value;
Osamu Nakamura 0:ad834d403a8c 200 if (param != NULL) {
Osamu Nakamura 0:ad834d403a8c 201 // use parameters
Osamu Nakamura 0:ad834d403a8c 202 String object_name = param->get_argument_object_name();
Osamu Nakamura 0:ad834d403a8c 203 int instance_id = (int)param->get_argument_object_instance_id();
Osamu Nakamura 0:ad834d403a8c 204 String resource_name = param->get_argument_resource_name();
Osamu Nakamura 0:ad834d403a8c 205 value = this->coapDataToString(param->get_argument_value(),param->get_argument_value_length());
Osamu Nakamura 0:ad834d403a8c 206 this->logger()->logging("%s: post(%d) [%s/%d/%s]=[%s]) called.",this->m_res_type.c_str(),type,object_name.c_str(),instance_id,resource_name.c_str(),value.c_str());
Osamu Nakamura 0:ad834d403a8c 207 }
Osamu Nakamura 0:ad834d403a8c 208 else {
Osamu Nakamura 0:ad834d403a8c 209 // use the resource value itself
Osamu Nakamura 0:ad834d403a8c 210 value = this->coapDataToString(this->m_res->value(),this->m_res->value_length());
Osamu Nakamura 0:ad834d403a8c 211 this->logger()->logging("%s: post(%d) [%s]=[%s] called.",this->m_res_type.c_str(),type,this->getFullName().c_str(),value.c_str());
Osamu Nakamura 0:ad834d403a8c 212 }
Osamu Nakamura 0:ad834d403a8c 213
Osamu Nakamura 0:ad834d403a8c 214 // invoke
Osamu Nakamura 0:ad834d403a8c 215 this->post(args);
Osamu Nakamura 0:ad834d403a8c 216 return 0;
Osamu Nakamura 0:ad834d403a8c 217 }
Osamu Nakamura 0:ad834d403a8c 218 #else
Osamu Nakamura 0:ad834d403a8c 219 // POST() check
Osamu Nakamura 0:ad834d403a8c 220 if ((op & M2MBase::POST_ALLOWED) != 0) {
Osamu Nakamura 0:ad834d403a8c 221 if (args != NULL) {
Osamu Nakamura 0:ad834d403a8c 222 this->logger()->logging("%s: post(%d) [%s]=[%s] called.",this->m_res_type.c_str(),type,this->getFullName().c_str(),(char *)args);
Osamu Nakamura 0:ad834d403a8c 223 this->post(args);
Osamu Nakamura 0:ad834d403a8c 224 }
Osamu Nakamura 0:ad834d403a8c 225 else {
Osamu Nakamura 0:ad834d403a8c 226 string value = this->coapDataToString(this->m_res->value(),this->m_res->value_length());
Osamu Nakamura 0:ad834d403a8c 227 this->logger()->logging("%s: post(%d) [%s]=[%s] called.",this->m_res_type.c_str(),type,this->getFullName().c_str(),value.c_str());
Osamu Nakamura 0:ad834d403a8c 228 this->post((void *)value.c_str());
Osamu Nakamura 0:ad834d403a8c 229 }
Osamu Nakamura 0:ad834d403a8c 230 return 0;
Osamu Nakamura 0:ad834d403a8c 231 }
Osamu Nakamura 0:ad834d403a8c 232 #endif
Osamu Nakamura 0:ad834d403a8c 233
Osamu Nakamura 0:ad834d403a8c 234 #if defined (HAS_EXECUTE_PARAMS)
Osamu Nakamura 0:ad834d403a8c 235 // DELETE() check
Osamu Nakamura 0:ad834d403a8c 236 if ((op & M2MBase::DELETE_ALLOWED) != 0) {
Osamu Nakamura 0:ad834d403a8c 237 if (param != NULL) {
Osamu Nakamura 0:ad834d403a8c 238 // use parameters
Osamu Nakamura 0:ad834d403a8c 239 String object_name = param->get_argument_object_name();
Osamu Nakamura 0:ad834d403a8c 240 int instance_id = (int)param->get_argument_object_instance_id();
Osamu Nakamura 0:ad834d403a8c 241 String resource_name = param->get_argument_resource_name();
Osamu Nakamura 0:ad834d403a8c 242 string value = this->coapDataToString(param->get_argument_value(),param->get_argument_value_length());
Osamu Nakamura 0:ad834d403a8c 243 this->logger()->logging("%s: delete(%d) [%s/%d/%s]=[%s]) called.",this->m_res_type.c_str(),type,object_name.c_str(),instance_id,resource_name.c_str(),value.c_str());
Osamu Nakamura 0:ad834d403a8c 244 }
Osamu Nakamura 0:ad834d403a8c 245 else {
Osamu Nakamura 0:ad834d403a8c 246 // use the resource value itself
Osamu Nakamura 0:ad834d403a8c 247 string value = this->coapDataToString(this->m_res->value(),this->m_res->value_length());
Osamu Nakamura 0:ad834d403a8c 248 this->logger()->logging("%s: delete(%d) [%s]=[%s] called.",this->m_res_type.c_str(),type,this->getFullName().c_str(),value.c_str());
Osamu Nakamura 0:ad834d403a8c 249 }
Osamu Nakamura 0:ad834d403a8c 250
Osamu Nakamura 0:ad834d403a8c 251 // invoke
Osamu Nakamura 0:ad834d403a8c 252 this->del(args);
Osamu Nakamura 0:ad834d403a8c 253 return 0;
Osamu Nakamura 0:ad834d403a8c 254 }
Osamu Nakamura 0:ad834d403a8c 255 #else
Osamu Nakamura 0:ad834d403a8c 256 // DELETE() check
Osamu Nakamura 0:ad834d403a8c 257 if ((op & M2MBase::DELETE_ALLOWED) != 0) {
Osamu Nakamura 0:ad834d403a8c 258 if (args != NULL) {
Osamu Nakamura 0:ad834d403a8c 259 this->logger()->logging("%s: delete(%d) [%s]=[%s] called.",this->m_res_type.c_str(),type,this->getFullName().c_str(),(char *)args);
Osamu Nakamura 0:ad834d403a8c 260 this->del(args);
Osamu Nakamura 0:ad834d403a8c 261 }
Osamu Nakamura 0:ad834d403a8c 262 else {
Osamu Nakamura 0:ad834d403a8c 263 string value = this->coapDataToString(this->m_res->value(),this->m_res->value_length());
Osamu Nakamura 0:ad834d403a8c 264 this->logger()->logging("%s: delete(%d) [%s]=[%s] called.",this->m_res_type.c_str(),type,this->getFullName().c_str(),value.c_str());
Osamu Nakamura 0:ad834d403a8c 265 this->del((void *)value.c_str());
Osamu Nakamura 0:ad834d403a8c 266 }
Osamu Nakamura 0:ad834d403a8c 267 }
Osamu Nakamura 0:ad834d403a8c 268 #endif
Osamu Nakamura 0:ad834d403a8c 269
Osamu Nakamura 0:ad834d403a8c 270 // unknown type...
Osamu Nakamura 0:ad834d403a8c 271 this->logger()->logging("%s: Unknown Operation (0x%x) for [%s]=[%s]... FAILED.",op,this->m_res_type.c_str(),this->getFullName().c_str(),this->m_res->value());
Osamu Nakamura 0:ad834d403a8c 272 return 1;
Osamu Nakamura 0:ad834d403a8c 273 }
Osamu Nakamura 0:ad834d403a8c 274
Osamu Nakamura 0:ad834d403a8c 275 // send the notification
Osamu Nakamura 0:ad834d403a8c 276 int DynamicResource::notify(const string data) {
Osamu Nakamura 0:ad834d403a8c 277 return this->notify((uint8_t *)data.c_str(),(int)data.length());
Osamu Nakamura 0:ad834d403a8c 278 }
Osamu Nakamura 0:ad834d403a8c 279
Osamu Nakamura 0:ad834d403a8c 280 // send the notification
Osamu Nakamura 0:ad834d403a8c 281 int DynamicResource::notify(uint8_t *data,int data_length) {
Osamu Nakamura 0:ad834d403a8c 282 uint8_t *notify_data = NULL;
Osamu Nakamura 0:ad834d403a8c 283 int notify_data_length = 0;
Osamu Nakamura 0:ad834d403a8c 284 int status = 0;
Osamu Nakamura 0:ad834d403a8c 285
Osamu Nakamura 0:ad834d403a8c 286 // convert the string from the GET to something suitable for CoAP payloads
Osamu Nakamura 0:ad834d403a8c 287 if (this->getDataWrapper() != NULL) {
Osamu Nakamura 0:ad834d403a8c 288 // wrap the data...
Osamu Nakamura 0:ad834d403a8c 289 this->getDataWrapper()->wrap((uint8_t *)data,data_length);
Osamu Nakamura 0:ad834d403a8c 290
Osamu Nakamura 0:ad834d403a8c 291 // announce (after wrap)
Osamu Nakamura 0:ad834d403a8c 292 //this->logger()->logging("Notify payload [%s]...",this->getDataWrapper()->get());
Osamu Nakamura 0:ad834d403a8c 293
Osamu Nakamura 0:ad834d403a8c 294 // fill notify
Osamu Nakamura 0:ad834d403a8c 295 notify_data_length = this->getDataWrapper()->length();
Osamu Nakamura 0:ad834d403a8c 296 notify_data = this->getDataWrapper()->get();
Osamu Nakamura 0:ad834d403a8c 297 }
Osamu Nakamura 0:ad834d403a8c 298 else {
Osamu Nakamura 0:ad834d403a8c 299 // announce (no wrap)
Osamu Nakamura 0:ad834d403a8c 300 //this->logger()->logging("Notify payload [%s]...",data);
Osamu Nakamura 0:ad834d403a8c 301
Osamu Nakamura 0:ad834d403a8c 302 // do not wrap the data...
Osamu Nakamura 0:ad834d403a8c 303 notify_data_length = data_length;
Osamu Nakamura 0:ad834d403a8c 304 notify_data = data;
Osamu Nakamura 0:ad834d403a8c 305 }
Osamu Nakamura 0:ad834d403a8c 306
Osamu Nakamura 0:ad834d403a8c 307 // update the resource
Osamu Nakamura 0:ad834d403a8c 308 this->m_res->set_value((uint8_t *)notify_data,(uint8_t)notify_data_length);
Osamu Nakamura 0:ad834d403a8c 309
Osamu Nakamura 0:ad834d403a8c 310 // return our status
Osamu Nakamura 0:ad834d403a8c 311 return status;
Osamu Nakamura 0:ad834d403a8c 312 }
Osamu Nakamura 0:ad834d403a8c 313
Osamu Nakamura 0:ad834d403a8c 314 // default GET (does nothing)
Osamu Nakamura 0:ad834d403a8c 315 string DynamicResource::get()
Osamu Nakamura 0:ad834d403a8c 316 {
Osamu Nakamura 0:ad834d403a8c 317 // not used by default
Osamu Nakamura 0:ad834d403a8c 318 //this->logger()->logging("DynamicResource::get() invoked (NOOP)");
Osamu Nakamura 0:ad834d403a8c 319 return string("");
Osamu Nakamura 0:ad834d403a8c 320 }
Osamu Nakamura 0:ad834d403a8c 321
Osamu Nakamura 0:ad834d403a8c 322 // default PUT (does nothing)
Osamu Nakamura 0:ad834d403a8c 323 void DynamicResource::put(const string /* value */)
Osamu Nakamura 0:ad834d403a8c 324 {
Osamu Nakamura 0:ad834d403a8c 325 // not used by default
Osamu Nakamura 0:ad834d403a8c 326 //this->logger()->logging("DynamicResource::put() invoked (NOOP)");
Osamu Nakamura 0:ad834d403a8c 327 }
Osamu Nakamura 0:ad834d403a8c 328
Osamu Nakamura 0:ad834d403a8c 329 // default POST (does nothing)
Osamu Nakamura 0:ad834d403a8c 330 void DynamicResource::post(void * /* args */)
Osamu Nakamura 0:ad834d403a8c 331 {
Osamu Nakamura 0:ad834d403a8c 332 // not used by default
Osamu Nakamura 0:ad834d403a8c 333 //this->logger()->logging("DynamicResource::post() invoked (NOOP)");
Osamu Nakamura 0:ad834d403a8c 334 }
Osamu Nakamura 0:ad834d403a8c 335
Osamu Nakamura 0:ad834d403a8c 336 // default DELETE (does nothing)
Osamu Nakamura 0:ad834d403a8c 337 void DynamicResource::del(void * /* args */)
Osamu Nakamura 0:ad834d403a8c 338 {
Osamu Nakamura 0:ad834d403a8c 339 // not used by default
Osamu Nakamura 0:ad834d403a8c 340 //this->logger()->logging("DynamicResource::del() invoked (NOOP)");
Osamu Nakamura 0:ad834d403a8c 341 }
Osamu Nakamura 0:ad834d403a8c 342
Osamu Nakamura 0:ad834d403a8c 343 // default observe behavior
Osamu Nakamura 0:ad834d403a8c 344 void DynamicResource::observe() {
Osamu Nakamura 0:ad834d403a8c 345 if (this->m_observable == true && this->isRegistered() == true) {
Osamu Nakamura 0:ad834d403a8c 346 this->notify(this->get());
Osamu Nakamura 0:ad834d403a8c 347 }
Osamu Nakamura 0:ad834d403a8c 348 }
Osamu Nakamura 0:ad834d403a8c 349
Osamu Nakamura 0:ad834d403a8c 350 // set the observer pointer
Osamu Nakamura 0:ad834d403a8c 351 void DynamicResource::setObserver(void *observer) {
Osamu Nakamura 0:ad834d403a8c 352 this->m_observer = observer;
Osamu Nakamura 0:ad834d403a8c 353 }
Osamu Nakamura 0:ad834d403a8c 354
Osamu Nakamura 0:ad834d403a8c 355 // set the content-format in responses
Osamu Nakamura 0:ad834d403a8c 356 void DynamicResource::setContentFormat(uint8_t content_format) {
Osamu Nakamura 0:ad834d403a8c 357 this->m_content_format = content_format;
Osamu Nakamura 0:ad834d403a8c 358 }
Osamu Nakamura 0:ad834d403a8c 359
Osamu Nakamura 0:ad834d403a8c 360 // set the max-age of responses
Osamu Nakamura 0:ad834d403a8c 361 void DynamicResource::setMaxAge(uint8_t maxage) {
Osamu Nakamura 0:ad834d403a8c 362 this->m_maxage = maxage;
Osamu Nakamura 0:ad834d403a8c 363 }
Osamu Nakamura 0:ad834d403a8c 364
Osamu Nakamura 0:ad834d403a8c 365 // convert the CoAP data pointer to a string type
Osamu Nakamura 0:ad834d403a8c 366 string DynamicResource::coapDataToString(uint8_t *coap_data_ptr,int coap_data_ptr_length)
Osamu Nakamura 0:ad834d403a8c 367 {
Osamu Nakamura 0:ad834d403a8c 368 if (coap_data_ptr != NULL && coap_data_ptr_length > 0) {
Osamu Nakamura 0:ad834d403a8c 369 if (this->getDataWrapper() != NULL) {
Osamu Nakamura 0:ad834d403a8c 370 // unwrap the data...
Osamu Nakamura 0:ad834d403a8c 371 this->getDataWrapper()->unwrap(coap_data_ptr,coap_data_ptr_length);
Osamu Nakamura 0:ad834d403a8c 372 char *buf = (char *)this->getDataWrapper()->get(); // assumes data is null terminated in DataWrapper...
Osamu Nakamura 0:ad834d403a8c 373 return string(buf);
Osamu Nakamura 0:ad834d403a8c 374 }
Osamu Nakamura 0:ad834d403a8c 375 else {
Osamu Nakamura 0:ad834d403a8c 376 // no unwrap of the data...
Osamu Nakamura 0:ad834d403a8c 377 char buf[MAX_VALUE_BUFFER_LENGTH+1];
Osamu Nakamura 0:ad834d403a8c 378 memset(buf,0,MAX_VALUE_BUFFER_LENGTH+1);
Osamu Nakamura 0:ad834d403a8c 379 memcpy(buf,(char *)coap_data_ptr,coap_data_ptr_length);
Osamu Nakamura 0:ad834d403a8c 380 return string(buf);
Osamu Nakamura 0:ad834d403a8c 381 }
Osamu Nakamura 0:ad834d403a8c 382 }
Osamu Nakamura 0:ad834d403a8c 383 return string("");
Osamu Nakamura 0:ad834d403a8c 384 }
Osamu Nakamura 0:ad834d403a8c 385
Osamu Nakamura 0:ad834d403a8c 386 // convert the CoAP data pointer to an integer type
Osamu Nakamura 0:ad834d403a8c 387 int DynamicResource::coapDataToInteger(uint8_t *coap_data_ptr,int coap_data_ptr_length) {
Osamu Nakamura 0:ad834d403a8c 388 int value = 0;
Osamu Nakamura 0:ad834d403a8c 389 if (coap_data_ptr != NULL && coap_data_ptr_length > 0) {
Osamu Nakamura 0:ad834d403a8c 390 if (this->getDataWrapper() != NULL) {
Osamu Nakamura 0:ad834d403a8c 391 // unwrap the data...
Osamu Nakamura 0:ad834d403a8c 392 this->getDataWrapper()->unwrap(coap_data_ptr,coap_data_ptr_length);
Osamu Nakamura 0:ad834d403a8c 393 //value = (int)this->getDataWrapper()->get(); // assumes data is null terminated in DataWrapper...
Osamu Nakamura 0:ad834d403a8c 394 }
Osamu Nakamura 0:ad834d403a8c 395 else {
Osamu Nakamura 0:ad834d403a8c 396 // no unwrap of the data...
Osamu Nakamura 0:ad834d403a8c 397 //value = (int)coap_data_ptr;
Osamu Nakamura 0:ad834d403a8c 398 }
Osamu Nakamura 0:ad834d403a8c 399 }
Osamu Nakamura 0:ad834d403a8c 400 return value;
Osamu Nakamura 0:ad834d403a8c 401 }
Osamu Nakamura 0:ad834d403a8c 402
Osamu Nakamura 0:ad834d403a8c 403 // convert the CoAP data pointer to a float type
Osamu Nakamura 0:ad834d403a8c 404 float DynamicResource::coapDataToFloat(uint8_t *coap_data_ptr,int coap_data_ptr_length) {
Osamu Nakamura 0:ad834d403a8c 405 float value = 0.0;
Osamu Nakamura 0:ad834d403a8c 406 if (coap_data_ptr != NULL && coap_data_ptr_length > 0) {
Osamu Nakamura 0:ad834d403a8c 407 if (this->getDataWrapper() != NULL) {
Osamu Nakamura 0:ad834d403a8c 408 // unwrap the data...
Osamu Nakamura 0:ad834d403a8c 409 this->getDataWrapper()->unwrap(coap_data_ptr,coap_data_ptr_length);
Osamu Nakamura 0:ad834d403a8c 410 //value = (float)this->getDataWrapper()->get(); // assumes data is null terminated in DataWrapper...
Osamu Nakamura 0:ad834d403a8c 411 }
Osamu Nakamura 0:ad834d403a8c 412 else {
Osamu Nakamura 0:ad834d403a8c 413 // no unwrap of the data...
Osamu Nakamura 0:ad834d403a8c 414 //value = (float)coap_data_ptr;
Osamu Nakamura 0:ad834d403a8c 415 }
Osamu Nakamura 0:ad834d403a8c 416 }
Osamu Nakamura 0:ad834d403a8c 417 return value;
Osamu Nakamura 0:ad834d403a8c 418 }
Osamu Nakamura 0:ad834d403a8c 419
Osamu Nakamura 0:ad834d403a8c 420 // convert the CoAP data pointer to an opaque type
Osamu Nakamura 0:ad834d403a8c 421 void *DynamicResource::coapDataToOpaque(uint8_t *coap_data_ptr,int coap_data_ptr_length) {
Osamu Nakamura 0:ad834d403a8c 422 if (coap_data_ptr != NULL && coap_data_ptr_length > 0) {
Osamu Nakamura 0:ad834d403a8c 423 if (this->getDataWrapper() != NULL) {
Osamu Nakamura 0:ad834d403a8c 424 // unwrap the data...
Osamu Nakamura 0:ad834d403a8c 425 this->getDataWrapper()->unwrap(coap_data_ptr,coap_data_ptr_length);
Osamu Nakamura 0:ad834d403a8c 426 char *buf = (char *)this->getDataWrapper()->get(); // assumes data is null terminated in DataWrapper...
Osamu Nakamura 0:ad834d403a8c 427 return (void *)buf;
Osamu Nakamura 0:ad834d403a8c 428 }
Osamu Nakamura 0:ad834d403a8c 429 }
Osamu Nakamura 0:ad834d403a8c 430 return (void *)coap_data_ptr;
Osamu Nakamura 0:ad834d403a8c 431 }
Osamu Nakamura 0:ad834d403a8c 432
Osamu Nakamura 0:ad834d403a8c 433 // Determine if we are connected or not
Osamu Nakamura 0:ad834d403a8c 434 bool DynamicResource::isConnected() {
Osamu Nakamura 0:ad834d403a8c 435 bool is_connected = false;
Osamu Nakamura 0:ad834d403a8c 436
Osamu Nakamura 0:ad834d403a8c 437 // get our Endpoint
Osamu Nakamura 0:ad834d403a8c 438 Connector::Endpoint *ep = (Connector::Endpoint *)this->m_endpoint;
Osamu Nakamura 0:ad834d403a8c 439 if (ep != NULL) {
Osamu Nakamura 0:ad834d403a8c 440 is_connected = ep->isConnected();
Osamu Nakamura 0:ad834d403a8c 441 if (is_connected) {
Osamu Nakamura 0:ad834d403a8c 442 //this->logger()->logging("DynamicResource::isConnected = true");
Osamu Nakamura 0:ad834d403a8c 443 }
Osamu Nakamura 0:ad834d403a8c 444 else {
Osamu Nakamura 0:ad834d403a8c 445 //this->logger()->logging("DynamicResource::isConnected = false");
Osamu Nakamura 0:ad834d403a8c 446 }
Osamu Nakamura 0:ad834d403a8c 447 }
Osamu Nakamura 0:ad834d403a8c 448 else {
Osamu Nakamura 0:ad834d403a8c 449 this->logger()->logging("DynamicResource::isConnected = false (no endpoint)");
Osamu Nakamura 0:ad834d403a8c 450 }
Osamu Nakamura 0:ad834d403a8c 451
Osamu Nakamura 0:ad834d403a8c 452 // return our endpoint connection state
Osamu Nakamura 0:ad834d403a8c 453 return is_connected;
Osamu Nakamura 0:ad834d403a8c 454 }
Osamu Nakamura 0:ad834d403a8c 455
Osamu Nakamura 0:ad834d403a8c 456 // Determine if we are registered or not
Osamu Nakamura 0:ad834d403a8c 457 bool DynamicResource::isRegistered() {
Osamu Nakamura 0:ad834d403a8c 458 bool is_registered = false;
Osamu Nakamura 0:ad834d403a8c 459
Osamu Nakamura 0:ad834d403a8c 460 if (this->isConnected() == true) {
Osamu Nakamura 0:ad834d403a8c 461 // get our Endpoint
Osamu Nakamura 0:ad834d403a8c 462 Connector::Endpoint *ep = (Connector::Endpoint *)this->m_endpoint;
Osamu Nakamura 0:ad834d403a8c 463 if (ep != NULL) {
Osamu Nakamura 0:ad834d403a8c 464 is_registered = ep->isRegistered();
Osamu Nakamura 0:ad834d403a8c 465 if (is_registered) {
Osamu Nakamura 0:ad834d403a8c 466 //this->logger()->logging("DynamicResource::isRegistered = true");
Osamu Nakamura 0:ad834d403a8c 467 }
Osamu Nakamura 0:ad834d403a8c 468 else {
Osamu Nakamura 0:ad834d403a8c 469 //this->logger()->logging("DynamicResource::isRegistered = false");
Osamu Nakamura 0:ad834d403a8c 470 }
Osamu Nakamura 0:ad834d403a8c 471 }
Osamu Nakamura 0:ad834d403a8c 472 else {
Osamu Nakamura 0:ad834d403a8c 473 this->logger()->logging("DynamicResource::isRegistered = false (no endpoint)");
Osamu Nakamura 0:ad834d403a8c 474 }
Osamu Nakamura 0:ad834d403a8c 475 }
Osamu Nakamura 0:ad834d403a8c 476
Osamu Nakamura 0:ad834d403a8c 477 // return our endpoint registration state
Osamu Nakamura 0:ad834d403a8c 478 return is_registered;
Osamu Nakamura 0:ad834d403a8c 479 }
Osamu Nakamura 0:ad834d403a8c 480
Osamu Nakamura 0:ad834d403a8c 481 // get our observer
Osamu Nakamura 0:ad834d403a8c 482 void *DynamicResource::getObserver() {
Osamu Nakamura 0:ad834d403a8c 483 return this->m_observer;
Osamu Nakamura 0:ad834d403a8c 484 }