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 OptionsBuilder.cpp
Osamu Nakamura 0:ad834d403a8c 3 * @brief mbed CoAP OptionsBuilder class implementation
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/OptionsBuilder.h"
Osamu Nakamura 0:ad834d403a8c 25
Osamu Nakamura 0:ad834d403a8c 26 // ResourceObserver support
Osamu Nakamura 0:ad834d403a8c 27 #include "mbed-connector-interface/ThreadedResourceObserver.h"
Osamu Nakamura 0:ad834d403a8c 28 #include "mbed-connector-interface/TickerResourceObserver.h"
Osamu Nakamura 0:ad834d403a8c 29 #include "mbed-connector-interface/MinarResourceObserver.h"
Osamu Nakamura 0:ad834d403a8c 30
Osamu Nakamura 0:ad834d403a8c 31 // Connector namespace
Osamu Nakamura 0:ad834d403a8c 32 namespace Connector {
Osamu Nakamura 0:ad834d403a8c 33
Osamu Nakamura 0:ad834d403a8c 34 // Constructor
Osamu Nakamura 0:ad834d403a8c 35 OptionsBuilder::OptionsBuilder()
Osamu Nakamura 0:ad834d403a8c 36 {
Osamu Nakamura 0:ad834d403a8c 37 this->m_endpoint = NULL;
Osamu Nakamura 0:ad834d403a8c 38 this->m_domain = DEFAULT_DOMAIN;
Osamu Nakamura 0:ad834d403a8c 39 this->m_endpoint_type = DEFAULT_ENDPOINT_TYPE;
Osamu Nakamura 0:ad834d403a8c 40 this->m_node_name = NODE_NAME;
Osamu Nakamura 0:ad834d403a8c 41 this->m_lifetime = REG_LIFETIME_SEC;
Osamu Nakamura 0:ad834d403a8c 42 this->m_connector_url = string(CONNECTOR_URL);
Osamu Nakamura 0:ad834d403a8c 43 this->m_server_cert = NULL;
Osamu Nakamura 0:ad834d403a8c 44 this->m_server_cert_length = 0;
Osamu Nakamura 0:ad834d403a8c 45 this->m_client_cert = NULL;
Osamu Nakamura 0:ad834d403a8c 46 this->m_client_cert_length = 0;
Osamu Nakamura 0:ad834d403a8c 47 this->m_client_key = NULL;
Osamu Nakamura 0:ad834d403a8c 48 this->m_client_key_length = 0;
Osamu Nakamura 0:ad834d403a8c 49 this->m_device_resources_object = NULL;
Osamu Nakamura 0:ad834d403a8c 50 this->m_firmware_resources_object = NULL;
Osamu Nakamura 0:ad834d403a8c 51 this->m_static_resources.clear();
Osamu Nakamura 0:ad834d403a8c 52 this->m_dynamic_resources.clear();
Osamu Nakamura 0:ad834d403a8c 53 this->m_resource_observers.clear();
Osamu Nakamura 0:ad834d403a8c 54 }
Osamu Nakamura 0:ad834d403a8c 55
Osamu Nakamura 0:ad834d403a8c 56 // Copy Constructor
Osamu Nakamura 0:ad834d403a8c 57 OptionsBuilder::OptionsBuilder(const OptionsBuilder &ob) : Options(ob)
Osamu Nakamura 0:ad834d403a8c 58 {
Osamu Nakamura 0:ad834d403a8c 59 this->m_endpoint = ob.m_endpoint;
Osamu Nakamura 0:ad834d403a8c 60 this->m_domain = ob.m_domain;
Osamu Nakamura 0:ad834d403a8c 61 this->m_endpoint_type = ob.m_endpoint_type;
Osamu Nakamura 0:ad834d403a8c 62 this->m_node_name = ob.m_node_name;
Osamu Nakamura 0:ad834d403a8c 63 this->m_lifetime = ob.m_lifetime;
Osamu Nakamura 0:ad834d403a8c 64 this->m_connector_url = ob.m_connector_url;
Osamu Nakamura 0:ad834d403a8c 65 this->m_server_cert = ob.m_server_cert;
Osamu Nakamura 0:ad834d403a8c 66 this->m_server_cert_length = ob.m_server_cert_length;
Osamu Nakamura 0:ad834d403a8c 67 this->m_client_cert = ob.m_client_cert;
Osamu Nakamura 0:ad834d403a8c 68 this->m_client_cert_length = ob.m_client_cert_length;
Osamu Nakamura 0:ad834d403a8c 69 this->m_client_key = ob.m_client_key;
Osamu Nakamura 0:ad834d403a8c 70 this->m_client_key_length= ob.m_client_key_length;
Osamu Nakamura 0:ad834d403a8c 71 this->m_device_resources_object = ob.m_device_resources_object;
Osamu Nakamura 0:ad834d403a8c 72 this->m_firmware_resources_object = ob.m_firmware_resources_object;
Osamu Nakamura 0:ad834d403a8c 73 this->m_static_resources = ob.m_static_resources;
Osamu Nakamura 0:ad834d403a8c 74 this->m_dynamic_resources = ob.m_dynamic_resources;
Osamu Nakamura 0:ad834d403a8c 75 this->m_resource_observers = ob.m_resource_observers;
Osamu Nakamura 0:ad834d403a8c 76 this->m_wifi_ssid = ob.m_wifi_ssid;
Osamu Nakamura 0:ad834d403a8c 77 this->m_wifi_auth_key = ob.m_wifi_auth_key;
Osamu Nakamura 0:ad834d403a8c 78 this->m_wifi_auth_type = ob.m_wifi_auth_type;
Osamu Nakamura 0:ad834d403a8c 79 this->m_coap_connection_type = ob.m_coap_connection_type;
Osamu Nakamura 0:ad834d403a8c 80 this->m_ip_address_type = ob.m_ip_address_type;
Osamu Nakamura 0:ad834d403a8c 81 this->m_enable_immediate_observation = ob.m_enable_immediate_observation;
Osamu Nakamura 0:ad834d403a8c 82 this->m_enable_get_obs_control = ob.m_enable_get_obs_control;
Osamu Nakamura 0:ad834d403a8c 83 this->m_endpoint = ob.m_endpoint;
Osamu Nakamura 0:ad834d403a8c 84 }
Osamu Nakamura 0:ad834d403a8c 85
Osamu Nakamura 0:ad834d403a8c 86 // Destructor
Osamu Nakamura 0:ad834d403a8c 87 OptionsBuilder::~OptionsBuilder()
Osamu Nakamura 0:ad834d403a8c 88 {
Osamu Nakamura 0:ad834d403a8c 89 this->m_device_resources_object = NULL;
Osamu Nakamura 0:ad834d403a8c 90 this->m_firmware_resources_object = NULL;
Osamu Nakamura 0:ad834d403a8c 91 this->m_static_resources.clear();
Osamu Nakamura 0:ad834d403a8c 92 this->m_dynamic_resources.clear();
Osamu Nakamura 0:ad834d403a8c 93 this->m_resource_observers.clear();
Osamu Nakamura 0:ad834d403a8c 94 }
Osamu Nakamura 0:ad834d403a8c 95
Osamu Nakamura 0:ad834d403a8c 96 // set lifetime
Osamu Nakamura 0:ad834d403a8c 97 OptionsBuilder &OptionsBuilder::setLifetime(int lifetime)
Osamu Nakamura 0:ad834d403a8c 98 {
Osamu Nakamura 0:ad834d403a8c 99 this->m_lifetime = lifetime;
Osamu Nakamura 0:ad834d403a8c 100 return *this;
Osamu Nakamura 0:ad834d403a8c 101 }
Osamu Nakamura 0:ad834d403a8c 102
Osamu Nakamura 0:ad834d403a8c 103 // set domain
Osamu Nakamura 0:ad834d403a8c 104 OptionsBuilder &OptionsBuilder::setDomain(const char *domain)
Osamu Nakamura 0:ad834d403a8c 105 {
Osamu Nakamura 0:ad834d403a8c 106 this->m_domain = string(domain);
Osamu Nakamura 0:ad834d403a8c 107 return *this;
Osamu Nakamura 0:ad834d403a8c 108 }
Osamu Nakamura 0:ad834d403a8c 109
Osamu Nakamura 0:ad834d403a8c 110 // set endpoint nodename
Osamu Nakamura 0:ad834d403a8c 111 OptionsBuilder &OptionsBuilder::setEndpointNodename(const char *node_name)
Osamu Nakamura 0:ad834d403a8c 112 {
Osamu Nakamura 0:ad834d403a8c 113 this->m_node_name = string(node_name);
Osamu Nakamura 0:ad834d403a8c 114 return *this;
Osamu Nakamura 0:ad834d403a8c 115 }
Osamu Nakamura 0:ad834d403a8c 116
Osamu Nakamura 0:ad834d403a8c 117 // set lifetime
Osamu Nakamura 0:ad834d403a8c 118 OptionsBuilder &OptionsBuilder::setEndpointType(const char *endpoint_type)
Osamu Nakamura 0:ad834d403a8c 119 {
Osamu Nakamura 0:ad834d403a8c 120 this->m_endpoint_type = string(endpoint_type);
Osamu Nakamura 0:ad834d403a8c 121 return *this;
Osamu Nakamura 0:ad834d403a8c 122 }
Osamu Nakamura 0:ad834d403a8c 123
Osamu Nakamura 0:ad834d403a8c 124 // set Connector URL
Osamu Nakamura 0:ad834d403a8c 125 OptionsBuilder &OptionsBuilder::setConnectorURL(const char *connector_url)
Osamu Nakamura 0:ad834d403a8c 126 {
Osamu Nakamura 0:ad834d403a8c 127 if (connector_url != NULL) {
Osamu Nakamura 0:ad834d403a8c 128 this->m_connector_url = string(connector_url);
Osamu Nakamura 0:ad834d403a8c 129 }
Osamu Nakamura 0:ad834d403a8c 130 return *this;
Osamu Nakamura 0:ad834d403a8c 131 }
Osamu Nakamura 0:ad834d403a8c 132
Osamu Nakamura 0:ad834d403a8c 133 // add the device resources object
Osamu Nakamura 0:ad834d403a8c 134 OptionsBuilder &OptionsBuilder::setDeviceResourcesObject(const void *device_resources_object)
Osamu Nakamura 0:ad834d403a8c 135 {
Osamu Nakamura 0:ad834d403a8c 136 if (device_resources_object != NULL) {
Osamu Nakamura 0:ad834d403a8c 137 this->m_device_resources_object = (void *)device_resources_object;
Osamu Nakamura 0:ad834d403a8c 138 }
Osamu Nakamura 0:ad834d403a8c 139 return *this;
Osamu Nakamura 0:ad834d403a8c 140 }
Osamu Nakamura 0:ad834d403a8c 141
Osamu Nakamura 0:ad834d403a8c 142 // add the firmware resources object
Osamu Nakamura 0:ad834d403a8c 143 OptionsBuilder &OptionsBuilder::setFirmwareResourcesObject(const void *firmware_resources_object)
Osamu Nakamura 0:ad834d403a8c 144 {
Osamu Nakamura 0:ad834d403a8c 145 if (firmware_resources_object != NULL) {
Osamu Nakamura 0:ad834d403a8c 146 this->m_firmware_resources_object = (void *)firmware_resources_object;
Osamu Nakamura 0:ad834d403a8c 147 }
Osamu Nakamura 0:ad834d403a8c 148 return *this;
Osamu Nakamura 0:ad834d403a8c 149 }
Osamu Nakamura 0:ad834d403a8c 150
Osamu Nakamura 0:ad834d403a8c 151 // add static resource
Osamu Nakamura 0:ad834d403a8c 152 OptionsBuilder &OptionsBuilder::addResource(const StaticResource *resource)
Osamu Nakamura 0:ad834d403a8c 153 {
Osamu Nakamura 0:ad834d403a8c 154 if (resource != NULL) {
Osamu Nakamura 0:ad834d403a8c 155 ((StaticResource *)resource)->setOptions(this);
Osamu Nakamura 0:ad834d403a8c 156 this->m_static_resources.push_back((StaticResource *)resource);
Osamu Nakamura 0:ad834d403a8c 157 }
Osamu Nakamura 0:ad834d403a8c 158 return *this;
Osamu Nakamura 0:ad834d403a8c 159 }
Osamu Nakamura 0:ad834d403a8c 160
Osamu Nakamura 0:ad834d403a8c 161 // add dynamic resource
Osamu Nakamura 0:ad834d403a8c 162 OptionsBuilder &OptionsBuilder::addResource(const DynamicResource *resource)
Osamu Nakamura 0:ad834d403a8c 163 {
Osamu Nakamura 0:ad834d403a8c 164 // ensure that the boolean isn't mistaken by the compiler for the obs period...
Osamu Nakamura 0:ad834d403a8c 165 return this->addResource(resource,DEFAULT_OBS_PERIOD,!(((DynamicResource *)resource)->implementsObservation()));
Osamu Nakamura 0:ad834d403a8c 166 }
Osamu Nakamura 0:ad834d403a8c 167
Osamu Nakamura 0:ad834d403a8c 168 // add dynamic resource
Osamu Nakamura 0:ad834d403a8c 169 OptionsBuilder &OptionsBuilder::addResource(const DynamicResource *resource,const int sleep_time)
Osamu Nakamura 0:ad834d403a8c 170 {
Osamu Nakamura 0:ad834d403a8c 171 // ensure that the boolean isn't mistaken by the compiler for the obs period...
Osamu Nakamura 0:ad834d403a8c 172 return this->addResource(resource,sleep_time,!(((DynamicResource *)resource)->implementsObservation()));
Osamu Nakamura 0:ad834d403a8c 173 }
Osamu Nakamura 0:ad834d403a8c 174
Osamu Nakamura 0:ad834d403a8c 175 // add dynamic resource
Osamu Nakamura 0:ad834d403a8c 176 OptionsBuilder &OptionsBuilder::addResource(const DynamicResource *resource,const bool use_observer)
Osamu Nakamura 0:ad834d403a8c 177 {
Osamu Nakamura 0:ad834d403a8c 178 // ensure that the boolean isn't mistaken by the compiler for the obs period...
Osamu Nakamura 0:ad834d403a8c 179 return this->addResource(resource,DEFAULT_OBS_PERIOD,use_observer);
Osamu Nakamura 0:ad834d403a8c 180 }
Osamu Nakamura 0:ad834d403a8c 181
Osamu Nakamura 0:ad834d403a8c 182 // add dynamic resource
Osamu Nakamura 0:ad834d403a8c 183 OptionsBuilder &OptionsBuilder::addResource(const DynamicResource *resource,const int sleep_time,const bool use_observer)
Osamu Nakamura 0:ad834d403a8c 184 {
Osamu Nakamura 0:ad834d403a8c 185 if (resource != NULL) {
Osamu Nakamura 0:ad834d403a8c 186 this->m_dynamic_resources.push_back((DynamicResource *)resource);
Osamu Nakamura 0:ad834d403a8c 187 ((DynamicResource *)resource)->setOptions(this);
Osamu Nakamura 0:ad834d403a8c 188 ((DynamicResource *)resource)->setEndpoint((const void *)this->getEndpoint());
Osamu Nakamura 0:ad834d403a8c 189 if (((DynamicResource *)resource)->isObservable() == true && use_observer == true) {
Osamu Nakamura 0:ad834d403a8c 190 // Establish the appropriate ResourceObserver
Osamu Nakamura 0:ad834d403a8c 191 #if defined (MCI_MINAR_SCHEDULER)
Osamu Nakamura 0:ad834d403a8c 192 // Minar-based Scheduler ResourceObserver
Osamu Nakamura 0:ad834d403a8c 193 MinarResourceObserver *observer = new MinarResourceObserver((DynamicResource *)resource,(int)sleep_time);
Osamu Nakamura 0:ad834d403a8c 194 #else
Osamu Nakamura 0:ad834d403a8c 195 #ifdef CONNECTOR_USING_THREADS
Osamu Nakamura 0:ad834d403a8c 196 // mbedOS RTOS Thread ResourceObserver
Osamu Nakamura 0:ad834d403a8c 197 ThreadedResourceObserver *observer = new ThreadedResourceObserver((DynamicResource *)resource,(int)sleep_time);
Osamu Nakamura 0:ad834d403a8c 198 #endif
Osamu Nakamura 0:ad834d403a8c 199 #ifdef CONNECTOR_USING_TICKER
Osamu Nakamura 0:ad834d403a8c 200 // mbed Ticker ResourceObserver
Osamu Nakamura 0:ad834d403a8c 201 TickerResourceObserver *observer = new TickerResourceObserver((DynamicResource *)resource,(int)sleep_time);
Osamu Nakamura 0:ad834d403a8c 202 #endif
Osamu Nakamura 0:ad834d403a8c 203 #endif
Osamu Nakamura 0:ad834d403a8c 204 // If no observer type is set in mbed-connector-interface/configuration.h (EndpointNetwork lib), then "observer" will be unresolved
Osamu Nakamura 0:ad834d403a8c 205 this->m_resource_observers.push_back(observer);
Osamu Nakamura 0:ad834d403a8c 206
Osamu Nakamura 0:ad834d403a8c 207 // immedate observation enablement option
Osamu Nakamura 0:ad834d403a8c 208 if (this->immedateObservationEnabled()) {
Osamu Nakamura 0:ad834d403a8c 209 observer->beginObservation();
Osamu Nakamura 0:ad834d403a8c 210 }
Osamu Nakamura 0:ad834d403a8c 211 }
Osamu Nakamura 0:ad834d403a8c 212 }
Osamu Nakamura 0:ad834d403a8c 213 return *this;
Osamu Nakamura 0:ad834d403a8c 214 }
Osamu Nakamura 0:ad834d403a8c 215
Osamu Nakamura 0:ad834d403a8c 216 // set WiFi SSID
Osamu Nakamura 0:ad834d403a8c 217 OptionsBuilder &OptionsBuilder::setWiFiSSID(char *ssid)
Osamu Nakamura 0:ad834d403a8c 218 {
Osamu Nakamura 0:ad834d403a8c 219 this->m_wifi_ssid = string(ssid);
Osamu Nakamura 0:ad834d403a8c 220 return *this;
Osamu Nakamura 0:ad834d403a8c 221 }
Osamu Nakamura 0:ad834d403a8c 222
Osamu Nakamura 0:ad834d403a8c 223 // set WiFi AuthType
Osamu Nakamura 0:ad834d403a8c 224 OptionsBuilder &OptionsBuilder::setWiFiAuthType(WiFiAuthTypes auth_type)
Osamu Nakamura 0:ad834d403a8c 225 {
Osamu Nakamura 0:ad834d403a8c 226 this->m_wifi_auth_type = auth_type;
Osamu Nakamura 0:ad834d403a8c 227 return *this;
Osamu Nakamura 0:ad834d403a8c 228 }
Osamu Nakamura 0:ad834d403a8c 229
Osamu Nakamura 0:ad834d403a8c 230 // set WiFi AuthKey
Osamu Nakamura 0:ad834d403a8c 231 OptionsBuilder &OptionsBuilder::setWiFiAuthKey(char *auth_key)
Osamu Nakamura 0:ad834d403a8c 232 {
Osamu Nakamura 0:ad834d403a8c 233 this->m_wifi_auth_key = string(auth_key);
Osamu Nakamura 0:ad834d403a8c 234 return *this;
Osamu Nakamura 0:ad834d403a8c 235 }
Osamu Nakamura 0:ad834d403a8c 236
Osamu Nakamura 0:ad834d403a8c 237 // set the CoAP Connection Type
Osamu Nakamura 0:ad834d403a8c 238 OptionsBuilder &OptionsBuilder::setCoAPConnectionType(CoAPConnectionTypes coap_connection_type)
Osamu Nakamura 0:ad834d403a8c 239 {
Osamu Nakamura 0:ad834d403a8c 240 this->m_coap_connection_type = coap_connection_type;
Osamu Nakamura 0:ad834d403a8c 241 return *this;
Osamu Nakamura 0:ad834d403a8c 242 }
Osamu Nakamura 0:ad834d403a8c 243
Osamu Nakamura 0:ad834d403a8c 244 // set the IP Address Type
Osamu Nakamura 0:ad834d403a8c 245 OptionsBuilder &OptionsBuilder::setIPAddressType(IPAddressTypes ip_address_type)
Osamu Nakamura 0:ad834d403a8c 246 {
Osamu Nakamura 0:ad834d403a8c 247 this->m_ip_address_type = ip_address_type;
Osamu Nakamura 0:ad834d403a8c 248 return *this;
Osamu Nakamura 0:ad834d403a8c 249 }
Osamu Nakamura 0:ad834d403a8c 250
Osamu Nakamura 0:ad834d403a8c 251 // build out our immutable self
Osamu Nakamura 0:ad834d403a8c 252 Options *OptionsBuilder::build()
Osamu Nakamura 0:ad834d403a8c 253 {
Osamu Nakamura 0:ad834d403a8c 254 return (Options *)this;
Osamu Nakamura 0:ad834d403a8c 255 }
Osamu Nakamura 0:ad834d403a8c 256
Osamu Nakamura 0:ad834d403a8c 257 // Enable/Disable immediate observationing
Osamu Nakamura 0:ad834d403a8c 258 OptionsBuilder &OptionsBuilder::setImmedateObservationEnabled(bool enable) {
Osamu Nakamura 0:ad834d403a8c 259 this->m_enable_immediate_observation = enable;
Osamu Nakamura 0:ad834d403a8c 260 return *this;
Osamu Nakamura 0:ad834d403a8c 261 }
Osamu Nakamura 0:ad834d403a8c 262
Osamu Nakamura 0:ad834d403a8c 263 // Enable/Disable GET-based control of observations
Osamu Nakamura 0:ad834d403a8c 264 OptionsBuilder &OptionsBuilder::setEnableGETObservationControl(bool enable) {
Osamu Nakamura 0:ad834d403a8c 265 this->m_enable_get_obs_control = enable;
Osamu Nakamura 0:ad834d403a8c 266 return *this;
Osamu Nakamura 0:ad834d403a8c 267 }
Osamu Nakamura 0:ad834d403a8c 268
Osamu Nakamura 0:ad834d403a8c 269 // set the server certificate
Osamu Nakamura 0:ad834d403a8c 270 OptionsBuilder &OptionsBuilder::setServerCertificate(uint8_t *cert,int cert_size) {
Osamu Nakamura 0:ad834d403a8c 271 this->m_server_cert = cert;
Osamu Nakamura 0:ad834d403a8c 272 this->m_server_cert_length = cert_size;
Osamu Nakamura 0:ad834d403a8c 273 return *this;
Osamu Nakamura 0:ad834d403a8c 274 }
Osamu Nakamura 0:ad834d403a8c 275
Osamu Nakamura 0:ad834d403a8c 276 // set the client certificate
Osamu Nakamura 0:ad834d403a8c 277 OptionsBuilder &OptionsBuilder::setClientCertificate(uint8_t *cert,int cert_size) {
Osamu Nakamura 0:ad834d403a8c 278 this->m_client_cert = cert;
Osamu Nakamura 0:ad834d403a8c 279 this->m_client_cert_length = cert_size;
Osamu Nakamura 0:ad834d403a8c 280 return *this;
Osamu Nakamura 0:ad834d403a8c 281 }
Osamu Nakamura 0:ad834d403a8c 282
Osamu Nakamura 0:ad834d403a8c 283 // set the client key
Osamu Nakamura 0:ad834d403a8c 284 OptionsBuilder &OptionsBuilder::setClientKey(uint8_t *key,int key_size) {
Osamu Nakamura 0:ad834d403a8c 285 this->m_client_key = key;
Osamu Nakamura 0:ad834d403a8c 286 this->m_client_key_length = key_size;
Osamu Nakamura 0:ad834d403a8c 287 return *this;
Osamu Nakamura 0:ad834d403a8c 288 }
Osamu Nakamura 0:ad834d403a8c 289
Osamu Nakamura 0:ad834d403a8c 290 // set our endpoint
Osamu Nakamura 0:ad834d403a8c 291 void OptionsBuilder::setEndpoint(void *endpoint) {
Osamu Nakamura 0:ad834d403a8c 292 this->m_endpoint = endpoint;
Osamu Nakamura 0:ad834d403a8c 293 }
Osamu Nakamura 0:ad834d403a8c 294
Osamu Nakamura 0:ad834d403a8c 295 } // namespace Connector