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
- GR-PEACH ( https://developer.mbed.org/platforms/Renesas-GR-PEACH/ )
- Audio Camera Shield ( https://developer.mbed.org/teams/Renesas/wiki/Audio_Camera-shield )
- LCD Shield ( https://developer.mbed.org/teams/Renesas/wiki/LCD-shield )
- BP3595 ( https://developer.mbed.org/components/BP3595-for-GR-PEACH/ )
- Ethernet cable and connection to the internet
Application setup
- 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. - 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. - 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. - 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
- Import this sample program onto mbed Compiler.
- Configure this sample program in accordance with Application setup.
- Compile the example on mbed Compiler and download the resultant binary file.
- Plug the Ethernet cable into GR-PEACH if you are using Ethernet mode.
- Plug the micro-USB cable into the OpenSDA port with lies on the next to the RESET button.
- 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.
- Press the RESET button on the board to run this sample program.
- 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:
- /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.
- /888/0/7700: Decode result of barcode data input from camera (GET)
Setup of Watson IoT
- 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:
- Select Internet of Things" as follows:
- Press Get Started as follows:
- Configure Watson IoT Instance
- Leave unbound
- Select the Free plan, then click Create
- You should create Watson IoT Application Credentials
Once you successfully create Watson IoT Instance, you should see the following Watson IoT dashboard:
- On dashboard, launch the Connect your devices dashboard
- Click APPS
- Click Generate API Key
- Record the API Key and Authenticatoin Token. Then click Generate after adding a comment Note that these two values will be needed in the later step.
- 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
- Select Node-RED Starter
- Enter a unique App name and Click Create
- Application will Stage after a few minutes
- Application will report app is running when the staging has completed
- Watson NodeRED Application should be binded to Watson IoT instance
- You can now see the dashboard below:
- Click Connections. Then, press Connect Existing
- Click on Watson IoT Instance badge. Then, press Connect
- NodeRED application will restage. This will take a while. Please wait for Your app is running state
- You should acquire mbed Device Connector DOMAIN value
- Go to the mbed Device Connector Dashboard: https://connector.mbed.com and log in
- Select Access Key in order to create a new token
- Click CREATE NEW ACCESS KEY and enter a unique name. Then, push ADD bution
- an API token is generated. Need to save the generated string for later steps
- You should configure Watson IoT ARM mbed Connector Bridge
- Go back to the Watson IoT Dashboard and select Extensions
- Press Add Extension
- Add ARM mbed Connector
- Setup the bridge
- Enter your Connector API Token to Access Key and MBED_DOMAIN to Domain Id, respectively. Then, click Check Connection
- If the connection is successfully established, you can see Connection Established. Then, press Done
- 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
- Select menu, Import and Clipboard
- Paste the entire contents of JSON code described in NODEFLOW_GR-PEACH.txt and click Import
- Watson IoT Application Node Flow should be configured
- Double-click input node and link them to your Watson IoT instance.
- Click on the edit button
- First enter arbitrary name. Then, Watson API Key and Watson Auth Token previously acquired. Finally, press Add to save
- Enter MBED_ENDPOINT_NAME in security.h as Device ID. Then, press Done to save
- Double-click output node
- 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:
- Click Deproy to deploy NodeRED application
- Invoke sample program
- Press the reset button on GR-PEACH
- The decode result of barcode data should be shown in debug window
- Also, you can toggle LED by clicking Turn LED OFF and Turn LED ON injection node
mbedConnectorInterface/source/DynamicResource.cpp@0:ad834d403a8c, 2016-11-24 (annotated)
- Committer:
- Osamu Nakamura
- Date:
- Thu Nov 24 13:59:16 2016 +0900
- Revision:
- 0:ad834d403a8c
Initial Commit
Who changed what in which revision?
User | Revision | Line number | New 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 | } |