Add API reference 53/94153/3
authorPawel Wasowski <p.wasowski2@partner.samsung.com>
Tue, 18 Oct 2016 11:24:12 +0000 (13:24 +0200)
committerPawel Wasowski <p.wasowski2@partner.samsung.com>
Thu, 3 Nov 2016 11:57:31 +0000 (12:57 +0100)
PS2: [LB] Code snippet style fix

- Modified line breaks, spaces, and comments to follow the same style as
  in guides (similar update is on-going for the rest of the Web AR too)

Change-Id: Iebd841845054c7b26f27ebdd1ad691d776aa1d8d
Signed-off-by: Pawel Wasowski <p.wasowski2@partner.samsung.com>
org.tizen.web.apireference/html/device_api/mobile/index.html
org.tizen.web.apireference/html/device_api/mobile/tizen/convergence.html [new file with mode: 0644]
org.tizen.web.apireference/html/device_api/tv/index.html
org.tizen.web.apireference/html/device_api/tv/tizen/convergence.html [new file with mode: 0644]
org.tizen.web.apireference/html/device_api/wearable/index.html
org.tizen.web.apireference/html/device_api/wearable/tizen/convergence.html [new file with mode: 0644]
org.tizen.web.apireference/html/index.htm

index 068896b..1bed437 100644 (file)
                 <td>No</td>
 
                 </tr><tr><td>
+                <a href="tizen/convergence.html" data-origin="tizen" data-domain="networking" data-category="core" data-status="D" data-version="">
+                        Convergence</a></td>
+                <td>This API provides interfaces and methods for using Tizen device-to-device convergence services.</td>
+                <td>3.0</td>
+                <td>Optional</td>
+                <td>No</td>
+
+                </tr><tr><td>
                 <a href="tizen/networkbearerselection.html" data-origin="tizen" data-domain="messaging" data-category="core" data-status="D" data-version="">
                         Network Bearer Selection</a></td>
                 <td>This API provides interfaces and methods for users to set network bearer for a specific IP address.</td>
diff --git a/org.tizen.web.apireference/html/device_api/mobile/tizen/convergence.html b/org.tizen.web.apireference/html/device_api/mobile/tizen/convergence.html
new file mode 100644 (file)
index 0000000..1d49f5e
--- /dev/null
@@ -0,0 +1,3702 @@
+<!DOCTYPE html PUBLIC "html">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="tizen.css" media="screen">
+<script type="text/javascript" src="snippet.js"></script><title>Convergence API</title>
+</head>
+<body id="page-content" onload="prettyPrint()">
+<div class="api" id="::Convergence">
+<div class="supported-platforms"><img class="mobile-optional" title="Optional, Supported by Tizen Mobile emulator" src="mobile_s_w_optional.png"></div>
+<div class="title"><h1>Convergence API</h1></div>
+<div class="brief">
+ The Convergence API defines interfaces and methods
+for using Tizen device-to-device convergence services.
+        </div>
+<div class="description">
+        <p>
+The following functionality is provided:
+        </p>
+        <ul>
+          <li>
+Discovering nearby devices which support device-to-device services          </li>
+          <li>
+Getting device and service information          </li>
+          <li>
+Connecting and disconnecting services          </li>
+          <li>
+Starting and stopping services          </li>
+          <li>
+Sending data to services          </li>
+          <li>
+Listening to notifications from the service          </li>
+        </ul>
+        <p>
+The collection of supported device-to-device services includes:
+        </p>
+        <ul>
+          <li>
+<em>Remote App Control Service</em> - Allows launching an application on a remote device.          </li>
+          <li>
+<em>App Communication Service</em> - Allows transferring data between applications on local and remote devices.
+<br>Note that there are 'client' and 'server' implementations of this service which allows easy set-up and
+convenient handling of the data exchange process on both local and remote devices.
+For better flexibility, the data transfer occurs in named user-defined communication channels.          </li>
+        </ul>
+        <p>
+For more information on the Device-to-device Convergence features,
+see the <a href="https://developer.tizen.org/development/guides/web-application/tizen-features/network/convergence">Convergence API Guide</a>.
+        </p>
+        <p>
+Tizen 3.0 only supports Wi-Fi for Convergence services. More connectivity, such as BT/BLE and Wi-Fi Direct, is to be supported in further versions.
+        </p>
+       </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+        </p>
+<h2>Table of Contents</h2>
+<ul class="toc">
+<li>1. <a href="#typedefs-section">Type Definitions</a><ul class="toc">
+<li>
+                    1.1. <a href="#DeviceId">DeviceId</a>
+</li>
+<li>
+                    1.2. <a href="#DeviceProfile">DeviceProfile</a>
+</li>
+<li>
+                    1.3. <a href="#Payload">Payload</a>
+</li>
+<li>
+                    1.4. <a href="#PayloadType">PayloadType</a>
+</li>
+<li>
+                    1.5. <a href="#ConnectionState">ConnectionState</a>
+</li>
+</ul>
+</li>
+<li>2. <a href="#interfaces-section">Interfaces</a><ul class="toc">
+<li>2.1. <a href="#ChannelInfo">ChannelInfo</a>
+</li>
+<li>2.2. <a href="#ConvergenceObject">ConvergenceObject</a>
+</li>
+<li>2.3. <a href="#ConvergenceManager">ConvergenceManager</a>
+</li>
+<li>2.4. <a href="#Device">Device</a>
+</li>
+<li>2.5. <a href="#Service">Service</a>
+</li>
+<li>2.6. <a href="#AppCommunicationService">AppCommunicationService</a>
+</li>
+<li>2.7. <a href="#AppCommunicationClientService">AppCommunicationClientService</a>
+</li>
+<li>2.8. <a href="#AppCommunicationServerService">AppCommunicationServerService</a>
+</li>
+<li>2.9. <a href="#RemoteAppControlService">RemoteAppControlService</a>
+</li>
+<li>2.10. <a href="#PayloadString">PayloadString</a>
+</li>
+<li>2.11. <a href="#PayloadRawBytes">PayloadRawBytes</a>
+</li>
+<li>2.12. <a href="#ClientInfo">ClientInfo</a>
+</li>
+<li>2.13. <a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a>
+</li>
+<li>2.14. <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>
+</li>
+<li>2.15. <a href="#ConnectSuccessCallback">ConnectSuccessCallback</a>
+</li>
+<li>2.16. <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>
+</li>
+<li>2.17. <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a>
+</li>
+<li>2.18. <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a>
+</li>
+<li>2.19. <a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a>
+</li>
+</ul>
+</li>
+<li>3. <a href="#api-features">Related Feature</a>
+</li>
+<li>4. <a href="#full-webidl">Full WebIDL</a>
+</li>
+</ul>
+<hr>
+<h2 id="method-summary">Summary of Interfaces and Methods</h2>
+<table class="informaltable">
+<thead><tr>
+<th>Interface</th>
+<th>Method</th>
+</tr></thead>
+<tbody>
+<tr>
+<td><a href="#ChannelInfo">ChannelInfo</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#ConvergenceObject">ConvergenceObject</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#ConvergenceManager">ConvergenceManager</a></td>
+<td>
+<div>void <a href="#ConvergenceManager::startDiscovery">startDiscovery</a> (<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback, optional unsigned long? timeout)</div>
+<div>void <a href="#ConvergenceManager::stopDiscovery">stopDiscovery</a> ()</div>
+</td>
+</tr>
+<tr>
+<td><a href="#Device">Device</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#Service">Service</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationService">AppCommunicationService</a></td>
+<td>
+<div>void <a href="#AppCommunicationService::start">start</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::getClientList">getClientList</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::send">send</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::stop">stop</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::setListener">setListener</a> (<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback)</div>
+<div>void <a href="#AppCommunicationService::unsetListener">unsetListener</a> ()</div>
+</td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationClientService">AppCommunicationClientService</a></td>
+<td>
+<div>void <a href="#AppCommunicationClientService::connect">connect</a> (<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationClientService::disconnect">disconnect</a> (optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+</td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationServerService">AppCommunicationServerService</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#RemoteAppControlService">RemoteAppControlService</a></td>
+<td>
+<div>void <a href="#RemoteAppControlService::connect">connect</a> (<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#RemoteAppControlService::disconnect">disconnect</a> (optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#RemoteAppControlService::launch">launch</a> (<a href="application.html#ApplicationId">ApplicationId</a> appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#RemoteAppControlService::launchAppControl">launchAppControl</a> (<a href="application.html#ApplicationControl">ApplicationControl</a> appControl, optional <a href="application.html#ApplicationId">ApplicationId</a>? appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+</td>
+</tr>
+<tr>
+<td><a href="#PayloadString">PayloadString</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#PayloadRawBytes">PayloadRawBytes</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#ClientInfo">ClientInfo</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a></td>
+<td>
+<div>void <a href="#DiscoverySuccessCallback::onfound">onfound</a> (<a href="#Device">Device</a> device)</div>
+<div>void <a href="#DiscoverySuccessCallback::onfinished">onfinished</a> (<a href="#Device">Device</a>[] foundDevices)</div>
+</td>
+</tr>
+<tr>
+<td><a href="#RemoteAppControlCallback">RemoteAppControlCallback</a></td>
+<td><div>void <a href="#RemoteAppControlCallback::onsuccess">onsuccess</a> (optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data)</div></td>
+</tr>
+<tr>
+<td><a href="#ConnectSuccessCallback">ConnectSuccessCallback</a></td>
+<td><div>void <a href="#ConnectSuccessCallback::onsuccess">onsuccess</a> (<a href="#Service">Service</a> service)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a></td>
+<td><div>void <a href="#AppCommunicationSuccessCallback::onsuccess">onsuccess</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a></td>
+<td><div>void <a href="#AppCommunicationStartCallback::onsuccess">onsuccess</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a></td>
+<td><div>void <a href="#AppCommunicationClientListCallback::onsuccess">onsuccess</a> (<a href="#ClientInfo">ClientInfo</a>[] clients)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a></td>
+<td><div>void <a href="#AppCommunicationListenerCallback::onnotify">onnotify</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId)</div></td>
+</tr>
+</tbody>
+</table>
+<div class="typedefs" id="typedefs-section">
+<h2>1. Type Definitions</h2>
+<div class="typedef" id="DeviceId">
+<a class="backward-compatibility-anchor" name="::Convergence::DeviceId"></a><h3>1.1. DeviceId</h3>
+<div class="brief">
+ The type of the remote device identifier.
+          </div>
+<pre class="webidl prettyprint">    typedef DOMString DeviceId;</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+</div>
+<div class="enum" id="DeviceProfile">
+<a class="backward-compatibility-anchor" name="::Convergence::DeviceProfile"></a><h3>1.2. DeviceProfile</h3>
+<div class="brief">
+ Enumeration of the remote device profile.
+          </div>
+<pre class="webidl prettyprint">    enum DeviceProfile {"MOBILE", "WEARABLE", "TV"};</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+</div>
+<div class="typedef" id="Payload">
+<a class="backward-compatibility-anchor" name="::Convergence::Payload"></a><h3>1.3. Payload</h3>
+<div class="brief">
+ The type of payload item. An item is a key-value pair. The value may be either a string or an array of raw bytes.
+          </div>
+<pre class="webidl prettyprint">    typedef (<a href="#PayloadString">PayloadString</a> or <a href="#PayloadRawBytes">PayloadRawBytes</a>) Payload;</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+</div>
+<div class="enum" id="PayloadType">
+<a class="backward-compatibility-anchor" name="::Convergence::PayloadType"></a><h3>1.4. PayloadType</h3>
+<div class="brief">
+ Enumeration of payload types.
+          </div>
+<pre class="webidl prettyprint">    enum PayloadType{"STRING", "RAW_BYTES"};</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The following values are supported:
+          </p>
+          <ul>
+            <li>
+STRING - The payload key-value value is a string.            </li>
+            <li>
+RAW_BYTES - The payload key-value value is a byte array.            </li>
+          </ul>
+         </div>
+</div>
+<div class="enum" id="ConnectionState">
+<a class="backward-compatibility-anchor" name="::Convergence::ConnectionState"></a><h3>1.5. ConnectionState</h3>
+<div class="brief">
+ Enumeration of service connection states.
+          </div>
+<pre class="webidl prettyprint">    enum ConnectionState{"CONNECTED", "NOT_CONNECTED", "CONNECTING"};</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The following values are supported:
+          </p>
+          <ul>
+            <li>
+CONNECTED - Connected state.             </li>
+            <li>
+DISCONNECTED - Not connected state.             </li>
+            <li>
+CONNECTING - Connecting state.             </li>
+          </ul>
+         </div>
+</div>
+</div>
+<div class="interfaces" id="interfaces-section">
+<h2>2. Interfaces</h2>
+<div class="interface" id="ChannelInfo">
+<a class="backward-compatibility-anchor" name="::Convergence::ChannelInfo"></a><h3>2.1. ChannelInfo</h3>
+<div class="brief">
+ The channel info interface that specifies the server application which a client application wants to connect with.
+          </div>
+<pre class="webidl prettyprint">    [Constructor(DOMString uri, DOMString id)]
+    interface ChannelInfo {
+      attribute DOMString uri;
+      attribute DOMString id;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The channelinfo is composed of a URI and a channel ID which is used in <a href="convergence.html#AppCommunicationService">App Communication</a> services.
+The channelinfo URI is a URI for an application on the server side.
+The channelinfo ID value is defined by the developer.
+          </p>
+         </div>
+<p><span class="remark"> Remark: </span>
+ We assume that the server side app URI is known. For example, either client and server side apps are both developed by the same developer or the server app URI is available from other sources.
+          </p>
+<div class="constructors">
+<h4 id="ChannelInfo::constructor">Constructors</h4>
+<dl>
+<pre class="webidl prettyprint">ChannelInfo(DOMString uri, DOMString id);</pre>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Assume that the "targetApp0.main" application has been installed on remote device */
+var channel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+</pre>
+</div>
+</dl>
+</div>
+<div class="attributes">
+<h4>Attributes</h4>
+<ul>
+<li class="attribute" id="ChannelInfo::uri">
+<span class="attrName"><span class="type">DOMString </span><span class="name">uri</span></span><div class="brief">
+ The uri of the channel.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="ChannelInfo::id">
+<span class="attrName"><span class="type">DOMString </span><span class="name">id</span></span><div class="brief">
+ The identifier of the channel.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+</ul>
+</div>
+</div>
+<div class="interface" id="ConvergenceObject">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceObject"></a><h3>2.2. ConvergenceObject</h3>
+<div class="brief">
+ The <em>ConvergenceObject</em> interface defines what is
+instantiated by the <em>Tizen</em> object from the Tizen platform.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface ConvergenceObject {
+        readonly attribute <a href="#ConvergenceManager">ConvergenceManager</a> convergence;
+    };</pre>
+<pre class="webidl prettyprint">    <a href="tizen.html#Tizen">Tizen</a> implements <a href="#ConvergenceObject">ConvergenceObject</a>;</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The <em>tizen.convergence</em> object allows access to
+Tizen device-to-device convergence API.
+          </p>
+         </div>
+</div>
+<div class="interface" id="ConvergenceManager">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceManager"></a><h3>2.3. ConvergenceManager</h3>
+<div class="brief">
+ The <em>ConvergenceManager</em> interface provides access to the
+<em>convergence</em> object.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface ConvergenceManager {
+
+        void startDiscovery(<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback,
+            optional unsigned long? timeout) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stopDiscovery() raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The device-to-device convergence manager allows discovering available
+nearby devices, which support device-to-device services.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="ConvergenceManager::startDiscovery">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceManager::startDiscovery"></a><code><b><span class="methodName">startDiscovery</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Starts discovery of nearby devices.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void startDiscovery(<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback, optional unsigned long? timeout);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method initiates the device discovery procedure.
+Depending on the progress of this procedure the following methods
+are invoked:
+            </p>
+            <ul>
+              <li>
+<a href="convergence.html#DiscoverySuccessCallback::onfound">onfound()</a> - when a device is found.
+This method is invoked with the device
+information of
+<a href="convergence.html#Device">Device</a> type.
+If no device is found, this method will never be invoked.              </li>
+              <li>
+<a href="convergence.html#DiscoverySuccessCallback::onfinished">onfinished()</a> - when a discovery procedure is finished.
+This method is invoked
+with the list of discovered device information.              </li>
+            </ul>
+            <p>
+The discovery procedure can be canceled anytime, by calling
+<a href="convergence.html#ConvergenceManager::stopDiscovery">stopDiscovery()</a> in
+the <em>ConvergenceManager</em>.
+<br>Note the <a href="convergence.html#DiscoverySuccessCallback::onfinished">onfinished()</a> discovery
+callback will be invoked.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The callback to invoke each time the device is
+found. The callback will be invoked also when the discovery
+procedure has finished.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure of device
+discovery.
+                </li>
+          <li class="param">
+<span class="name">timeout</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ Duration of discovery procedure in seconds. If this
+value is omitted or <em>null</em> is passed, the default timeout
+is 60 seconds.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+discovery procedure has started already.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Handling device discovery results */
+var discoveryCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Do something with the discovered device */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* If desired device is found, stop discovery with following call */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Device discovery has finished');
+&nbsp;&nbsp;&nbsp;}
+};
+
+/* Running device discovery procedure */
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoveryCallback, function(err)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+&nbsp;&nbsp;&nbsp;}, 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ </pre>
+</div>
+</dd>
+<dt class="method" id="ConvergenceManager::stopDiscovery">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceManager::stopDiscovery"></a><code><b><span class="methodName">stopDiscovery</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Stops discovery of nearby devices.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void stopDiscovery();
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method stops an ongoing discovery procedure.
+            </p>
+           </div>
+<p><span class="remark"> Remark: </span>
+ Device discovery is a heavyweight procedure, so it may be
+useful to stop discovery when the required device is found.
+<br>Note this method triggers the <a href="convergence.html#DiscoverySuccessCallback::onfinished">onfinished()</a> discovery
+callback.
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at
+<a href="convergence.html#ConvergenceManager::startDiscovery">startDiscovery()</a> code example.
+            </p>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul><li class="list"><p>
+ with error type InvalidStateError, if the
+discovery procedure has not started yet.
+                </p></li></ul>
+</li></ul>
+        </div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="Device">
+<a class="backward-compatibility-anchor" name="::Convergence::Device"></a><h3>2.4. Device</h3>
+<div class="brief">
+ The <em>Device</em> interface provides access to the remote
+device's properties.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface Device {
+
+        readonly attribute <a href="#DeviceId">DeviceId</a> id;
+
+        readonly attribute DOMString name;
+
+        readonly attribute <a href="#DeviceProfile">DeviceProfile</a> type;
+
+        readonly attribute <a href="#Service">Service</a>[] services;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers access to remote device information, such as the unique
+identifier, name, profile type and list of provided services.
+          </p>
+          <p>
+<br>Note, device ID and device type are defined in the platform, and the developer cannot change it.
+          </p>
+         </div>
+<div class="attributes">
+<h4>Attributes</h4>
+<ul>
+<li class="attribute" id="Device::id">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">DeviceId </span><span class="name">id</span></span><div class="brief">
+ The unique device ID.
+<br>Note the device ID is a unique identifier string, generated with following rule.
+If the Remote Server is installed on the device (e.g. TV),
+then the device ID is assigned by application communication server service.
+Usually it has a format of service name and version. Otherwise (e.g. mobile or wearable),
+the device ID is device MAC address.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="Device::name">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">DOMString </span><span class="name">name</span></span><div class="brief">
+ The device name.
+<br>Note device name is one that is set in the Settings app (Settings&gt;About Devices&gt;Device Name).
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="Device::type">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">DeviceProfile </span><span class="name">type</span></span><div class="brief">
+ The device profile type.
+<br>Note Device type represents the <a href="https://www.tizen.org/about">profile of the device</a>,
+such as “TV”, “Mobile” or “Wearable”.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="Device::services">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">Service[]
+                      </span><span class="name">services</span></span><div class="brief">
+ The list of services, available on the device.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+</ul>
+</div>
+</div>
+<div class="interface" id="Service">
+<a class="backward-compatibility-anchor" name="::Convergence::Service"></a><h3>2.5. Service</h3>
+<div class="brief">
+ The <em>Service</em> interface is a base interface for all
+device-to-device services.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface Service {
+
+        readonly attribute <a href="#ConnectionState">ConnectionState</a> connectionState;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface defines common property for all device-to-device services
+          </p>
+         </div>
+<div class="attributes">
+<h4>Attributes</h4>
+<ul><li class="attribute" id="Service::connectionState">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">ConnectionState </span><span class="name">connectionState</span></span><div class="brief">
+ The service connection state.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li></ul>
+</div>
+</div>
+<div class="interface" id="AppCommunicationService">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService"></a><h3>2.6. AppCommunicationService</h3>
+<div class="brief">
+ The <em>AppCommunicationService</em> interface defines the base interface
+of both application communication
+<a href="convergence.html#AppCommunicationClientService">Client</a> and
+<a href="convergence.html#AppCommunicationServerService">Server</a> services
+and specifies common service features, such as start, stop, send, listener etc.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface AppCommunicationService : <a href="#Service">Service</a> {
+
+        void start(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void getClientList(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void send(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#Payload">Payload</a>[] payload,
+            <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stop(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void setListener(<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback)
+            raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void unsetListener();
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+App Communication Service allows transferring data between apps on local and remote devices.
+The App Communication Service relies on a Remote Server. The initialization and execution of a server app
+(the app on the side with the Remote Server, e.g. TV) and a client app (e.g. an app on a mobile or wearable device)
+are slightly different. Furthermore, the client app can remotely launch an app on the server side or connect to an
+already running server app, but the reverse way is impossible. More than one client can be connected to a server app.
+For example, multiple players on mobile devices can connect to a game application on a TV which takes a role of a server.
+Both client and server side apps can send payloads and listen to each other.
+          </p>
+          <p>
+<br>Note there are <a href="convergence.html#AppCommunicationClientService">client</a> and
+<a href="convergence.html#AppCommunicationServerService">server</a> implementations
+of this service for both local and remote devices. For better flexibility, the data transfer occurs in a user-defined
+<a href="convergence.html#ChannelInfo">ChannelInfo</a>.
+          </p>
+          <p>
+These interfaces offer the following service features:
+          </p>
+          <ul>
+            <li>
+Starting and stopping the service            </li>
+            <li>
+Sending payloads to the service            </li>
+            <li>
+Listening to remote service notifications            </li>
+            <li>
+Getting the list of clients that are connected to the service            </li>
+          </ul>
+         </div>
+
+      <div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationService::start">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::start"></a><code><b><span class="methodName">start</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Starts the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void start(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method starts the channel of the service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method for application communication client service, the service must be connected with the
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> method.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelinfo of the service with specified URI and ID.
+<br>Note ChannelInfo in the application communication service specifies a server app which a client wants to connect with.
+ChannelInfo URI is a URI of the server side app, while ChannelInfo ID is a developer-defined value.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is started already. <br>Note some services don't require
+a connection and disconnection procedures.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstarted(channelinfo, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channelinfo.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channelinfo.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+/* Create an instance of application communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel, onstarted, onerror);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstarted(channelinfo, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channelinfo.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channelinfo.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::getClientList">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::getClientList"></a><code><b><span class="methodName">getClientList</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Get the client lists connected to the channel
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void getClientList(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected and
+started with
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> and
+<a href="convergence.html#AppCommunicationService::start">start()</a> methods
+correspondingly.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelinfo of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onsuccess(clientinfolist)
+{
+&nbsp;&nbsp;&nbsp;console.log('get client list');
+&nbsp;&nbsp;&nbsp;for (i in clientinfolist)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfolist[i].isHost);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfolist[i].clientId);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfolist[i].connectionTime);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;service.getClientList(requestChannel, onsuccess, onerror);
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel, onstarted, onerror);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ get client list
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ isHost: false
+ client id: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ connection time: 1420163913807
+ isHost: false
+ client id: c13adb22-5423-22e4-5d8q-adf872d4q889
+ connection time: 1420163913125
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onsuccess(clientinfolist)
+{
+&nbsp;&nbsp;&nbsp;console.log('get client list');
+&nbsp;&nbsp;&nbsp;for (i in clientinfolist)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfolist[i].isHost);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfolist[i].clientId);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfolist[i].connectionTime);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;clientService.getClientList(requestChannel, onsuccess, onerror);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ get client list
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ isHost: false
+ client id: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ connection time: 1420163913807
+ isHost: false
+ client id: c13adb22-5423-22e4-5d8q-adf872d4q889
+ connection time: 1420163913125
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::send">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::send"></a><code><b><span class="methodName">send</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Sends a payload to the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void send(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at
+<a href="convergence.html#AppCommunicationService::start">start()</a> code example.
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected and
+started with
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> and
+<a href="convergence.html#AppCommunicationService::start">start()</a> methods
+correspondingly.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelinfo of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">payload</span>:
+ The payload containing request data.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function sendSuccessCallback(channelinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('requestPayload sent');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by Multi Screen server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;/* Send data to the remote service */
+&nbsp;&nbsp;&nbsp;service.send(channel, requestPayload, sendSuccessCallback, onerror);
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel, onstarted, onerror);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ requestPayload sent
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function sendSuccessCallback(channel)
+{
+&nbsp;&nbsp;&nbsp;console.log('requestPayload sent');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;/* Send data to the remote service */
+&nbsp;&nbsp;&nbsp;clientService.send(channel, requestPayload, sendSuccessCallback, onerror);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = device.service[i];
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ requestPayload sent
+ channel uri: targetApp0.main
+ channel id: chA
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::stop">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::stop"></a><code><b><span class="methodName">stop</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Stops the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void stop(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method stops the specified channel of the service.
+<br>Note When all clients have stopped using the service channel, the server side automatically terminates the application.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelInfo of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel1 = new tizen.ChannelInfo('targetApp0.main', 'chA');
+var requestChannel2 = new tizen.ChannelInfo('targetApp1.main', 'chB');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstopped(channel)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel stopped');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('clienti id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;if (channel id == 'chB')
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.stop(requestChannel2, onstopped);
+&nbsp;&nbsp;&nbsp;}
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel1, onstarted, onerror);
+service.start(requestChannel2, onstarted, onerror);
+</pre>
+</div>
+
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre>
+Channel started
+channel uri: targetApp0.main
+channel id: chA
+clientinfo
+isHost: true
+clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+connectionTime: 1420163913035
+Channel started
+channel uri: targetApp1.main
+channel id: chB
+clientinfo
+isHost: true
+clientId: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+connectionTime: 1420163913807
+Channel stopped
+channel uri: targetApp1.main
+channel id: chB
+</pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel1 = new tizen.ChannelInfo('targetApp0.main', 'chA');
+var requestChannel2 = new tizen.ChannelInfo('targetApp1.main', 'chB');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstopped(channel)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel stopped');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;if (channel id == 'chB')
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService.stop(requestChannel2, onstopped);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connectionTime: 1420163913035
+ requestPayload sent
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connectionTime: 1420163913035
+ Channel started
+ channel uri: targetApp1.main
+ channel id: chB
+ clientinfo
+ isHost: false
+ clientId: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ connectionTime: 1420163913807
+ Channel stopped
+ channel uri: targetApp1.main
+ channel id: chB
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::setListener">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::setListener"></a><code><b><span class="methodName">setListener</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Registers the service listener.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void setListener(<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">listenerCallback</span>:
+ The method to invoke when a service
+notification is received.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul><li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li></ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onnotify(channel, payload, senderclientid)
+{
+&nbsp;&nbsp;&nbsp;console.log('On service notification');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;/* clientid of the sender of the payload */
+&nbsp;&nbsp;&nbsp;console.log('client id of sender: ' + senderclientid);
+&nbsp;&nbsp;&nbsp;for (i in payload)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('payload: ' + payload[i].key + '-' + payload[i].value);
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;/* If using unsetListener, unregisters the listener and stops receiving notifications from the service */
+&nbsp;&nbsp;&nbsp;service.unsetListener();
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by Multi Screen server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+var service.start(requestChannel, onstarted, onerror);
+/* Register listener to receive notifications from remote service */
+service.setListener(onnotify);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ On service notification
+ channel uri: targetApp0.main
+ channel id: chA
+ client id of sender: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ payload: msg-hello
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onnotify(channel, payload, senderclientid)
+{
+&nbsp;&nbsp;&nbsp;console.log('On service notification');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;/* clientid of the sender of the payload */
+&nbsp;&nbsp;&nbsp;console.log('client id of sender: ' + senderclientid);
+&nbsp;&nbsp;&nbsp;for (i in payload)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('payload ' + payload[i].key + ': ' + payload[i].value);
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;/* If using unsetListener, unregisters the listener and stops receiving notifications from the service */
+&nbsp;&nbsp;&nbsp;clientService.unsetListener();
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Register listener to receive notifications from remote service */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.setListener(onnotify);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connectionTime: 1420163913035
+ On service notification
+ channel uri: targetApp0.main
+ channel id: chA
+ client id of sender: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ payload: msg-hello
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::unsetListener">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::unsetListener"></a><code><b><span class="methodName">unsetListener</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Unregisters the service listener.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void unsetListener();
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at
+<a href="convergence.html#AppCommunicationService::setListener">setListener()</a> code example.
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationClientService">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientService"></a><h3>2.7. AppCommunicationClientService</h3>
+<div class="brief">
+ The <em>AppCommunicationClientService</em> interface provides access to
+application communication client service features.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface AppCommunicationClientService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers following service features:
+          </p>
+          <ul>
+            <li>
+Connecting and disconnecting the remote service            </li>
+            <li>
+Reading immediate data of the remote service            </li>
+            <li>
+Listening to remote service update notifications            </li>
+            <li>
+Sending data to the remote service            </li>
+          </ul>
+         </div>
+
+      <div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationClientService::connect">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientService::connect"></a><code><b><span class="methodName">connect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Connects to the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Makes physical connection such as Wi-Fi or Bluetooth to the
+service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<p><span class="remark"> Remark: </span>
+ App developers do not need to specify the connectivity type
+explicitly. The framework automatically determines which connectivity
+to use in a selected service.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is connected already.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;else if (service instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the remote app control service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;service.disconnect();
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Connected to the service
+ Connected to the remote app control service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationClientService::disconnect">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientService::disconnect"></a><code><b><span class="methodName">disconnect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Disconnects the connected service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Disconnect physical connection with device-to-device service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at <a href="convergence.html#AppCommunicationClientService::connect">connect()</a> code example.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service was not connected yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationServerService">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationServerService"></a><h3>2.8. AppCommunicationServerService</h3>
+<div class="brief">
+ The <em>AppCommunicationServerService</em> interface provides access to
+application communication server service features.
+          </div>
+<pre class="webidl prettyprint">    [Constructor()]
+    interface AppCommunicationServerService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers following service features:
+          </p>
+          <ul>
+            <li>
+Instantiating the service            </li>
+            <li>
+Reading immediate data of the service            </li>
+            <li>
+Listening to service update notifications            </li>
+            <li>
+Sending data for the service            </li>
+          </ul>
+         </div>
+<p><span class="remark"> Remark: </span>
+ application server service is used without discovery phase.
+The developer should instantiate a standalone service object using
+the constructor.
+          </p>
+
+      <div class="constructors">
+<h4 id="AppCommunicationServerService::constructor">Constructors</h4>
+<dl>
+<pre class="webidl prettyprint">AppCommunicationServerService();</pre>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Create an instance of application communication server service object */
+var service = new tizen.AppCommunicationServerService();
+</pre>
+</div>
+</dl>
+</div>
+</div>
+<div class="interface" id="RemoteAppControlService">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService"></a><h3>2.9. RemoteAppControlService</h3>
+<div class="brief">
+ The <em>RemoteAppControlService</em> interface provides access to
+remote application control service features.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface RemoteAppControlService : <a href="#Service">Service</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launch(<a href="application.html#ApplicationId">ApplicationId</a> appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launchAppControl(<a href="application.html#ApplicationControl">ApplicationControl</a> appControl,
+            optional <a href="application.html#ApplicationId">ApplicationId</a>? appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers following device-to-device service features:
+          </p>
+          <ul>
+            <li>
+Connecting and disconnecting the service            </li>
+            <li>
+Sending app control data to the service            </li>
+            <li>
+Receiving app control results            </li>
+          </ul>
+         </div>
+
+      <div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="RemoteAppControlService::connect">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::connect"></a><code><b><span class="methodName">connect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Connects to the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Makes physical connection such as Wi-Fi or Bluetooth to remote
+device-to-device service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<p><span class="remark"> Remark: </span>
+ App developers do not need to specify the connectivity type
+explicitly. Framework automatically determines which connectivity
+to use in a selected service.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is connected already.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the remote app control service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;else if (service instanceof AppCommunicationClientService))
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;service.disconnect();
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Connected to the service
+ Connected to the remote app control service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="RemoteAppControlService::disconnect">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::disconnect"></a><code><b><span class="methodName">disconnect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Disconnects the connected service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Disconnect physical connection with device-to-device service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service was not connected yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function ondisconnected()
+{
+&nbsp;&nbsp;&nbsp;console.log('Disconnected to the service');
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState == "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].disconnect(ondisconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Disconnected to the service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="RemoteAppControlService::launch">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::launch"></a><code><b><span class="methodName">launch</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Sends the given application ID to launch an application on the remote device.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void launch(<a href="application.html#ApplicationId">ApplicationId</a> appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method sends an application ID to the remote service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected
+with
+<a href="convergence.html#RemoteAppControlService::connect">connect()</a> method
+correspondingly.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">appId</span>:
+ The target app id.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Assume that the "targetApp0.main" application has been installed on remote device */
+var requestAppId = 'targetApp0.main';
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function remoteAppControlCallback(data) 
+{
+&nbsp;&nbsp;&nbsp;console.log('On remote app control service reply');
+&nbsp;&nbsp;&nbsp;console.log('clientId: ' + clientId);
+&nbsp;&nbsp;&nbsp;for (var i = 0; i  data.length; i++)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log("key: " + data[i].key + "value: " + data[i].value[0]);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+
+&nbsp;&nbsp;&nbsp;/* Launching server app remotely */
+&nbsp;&nbsp;&nbsp;service.launch(requestAppId, remoteAppControlCallback, onerror);
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="RemoteAppControlService::launchAppControl">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::launchAppControl"></a><code><b><span class="methodName">launchAppControl</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Sends an app control to launch an application on the remote device.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void launchAppControl(<a href="application.html#ApplicationControl">ApplicationControl</a> appControl, optional <a href="application.html#ApplicationId">ApplicationId</a>? appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method sends an app control to the remote service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected with
+<a href="convergence.html#RemoteAppControlService::connect">connect()</a> method.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">appControl</span>:
+ The app control data.
+                </li>
+          <li class="param">
+<span class="name">appId</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The target app id.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+var requestAppControl = new tizen.ApplicationControl('http://tizen.org/appcontrol/operation/view',
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;null, 'image/jpeg', null,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[new tizen.ApplicationControlData('images', [testImgData])]);
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function remoteAppControlCallback(data)
+{
+&nbsp;&nbsp;&nbsp;console.log('On remote app control service reply');
+&nbsp;&nbsp;&nbsp;for (var i = 0; i  data.length; i++)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log("key: " + data[i].key + "value: " + data[i].value[0]);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+
+&nbsp;&nbsp;&nbsp;/* Send data to the remote service */
+&nbsp;&nbsp;&nbsp;service.launchAppControl(requestAppControl, null, remoteAppControlCallback, onerror);
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ </pre>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="dictionary" id="PayloadString">
+<a class="backward-compatibility-anchor" name="::Convergence::PayloadString"></a><h3>2.10. PayloadString</h3>
+<div class="brief">
+ The dictionary that specifies a payload string for the
+device-to-device service.
+          </div>
+<pre class="webidl prettyprint">    dictionary PayloadString {
+        DOMString key;
+
+        DOMString value;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+<em>PayloadString</em> is a key-value pair. Both the key and value are strings.
+          </p>
+         </div>
+<div class="attributes">
+<h4>Dictionary members</h4>
+<dl>
+<dt class="member" id="PayloadString::key"><span class="attrName">DOMString key</span></dt>
+<dd>
+<div class="brief">
+ The name of the payload string.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="PayloadString::value"><span class="attrName">DOMString value</span></dt>
+<dd>
+<div class="brief">
+ The value of the payload string.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="dictionary" id="PayloadRawBytes">
+<a class="backward-compatibility-anchor" name="::Convergence::PayloadRawBytes"></a><h3>2.11. PayloadRawBytes</h3>
+<div class="brief">
+ The dictionary that specifies a raw bytes payload for the
+device-to-device service.
+          </div>
+<pre class="webidl prettyprint">    dictionary PayloadRawBytes {
+        DOMString key;
+
+        byte[] value;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+<em>PayloadRawBytes</em> is a key-value pair. The key is a string and the value is a byte
+array which is to be delivered to a remote service.
+          </p>
+         </div>
+<div class="attributes">
+<h4>Dictionary members</h4>
+<dl>
+<dt class="member" id="PayloadRawBytes::key"><span class="attrName">DOMString key</span></dt>
+<dd>
+<div class="brief">
+ The name of the payload byte array.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="PayloadRawBytes::value"><span class="attrName">byte[] value</span></dt>
+<dd>
+<div class="brief">
+ The bytes of the payload byte array.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="dictionary" id="ClientInfo">
+<a class="backward-compatibility-anchor" name="::Convergence::ClientInfo"></a><h3>2.12. ClientInfo</h3>
+<div class="brief">
+ The dictionary that specifies client information.
+          </div>
+<pre class="webidl prettyprint">    dictionary ClientInfo {
+        boolean isHost;
+
+        DOMString clientId;
+
+        long connectionTime;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="attributes">
+<h4>Dictionary members</h4>
+<dl>
+<dt class="member" id="ClientInfo::isHost"><span class="attrName">boolean isHost</span></dt>
+<dd>
+<div class="brief">
+ The value indicating if the service is local (true) or
+remote (false).
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="ClientInfo::clientId"><span class="attrName">DOMString clientId</span></dt>
+<dd>
+<div class="brief">
+ The unique client id.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="ClientInfo::connectionTime"><span class="attrName">long connectionTime</span></dt>
+<dd>
+<div class="brief">
+ The connection time in milliseconds.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="DiscoverySuccessCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::DiscoverySuccessCallback"></a><h3>2.13. DiscoverySuccessCallback</h3>
+<div class="brief">
+ The <em>DiscoverySuccessCallback</em> interface defines the
+success method for <a href="convergence.html#ConvergenceManager::startDiscovery">startDiscovery()</a>.
+          </div>
+<pre class="webidl prettyprint">    [Callback, NoInterfaceObject] interface DiscoverySuccessCallback {
+
+        void onfound(<a href="#Device">Device</a> device);
+
+        void onfinished(<a href="#Device">Device</a>[] foundDevices);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+Specifies the type of function passed to <em>ConvergenceManager.startDiscovery()</em>.
+Called when device providing device-to-device service is discovered nearby.
+          </p>
+          <p>
+A usage example can be found in the
+<a href="convergence.html#ConvergenceManager::startDiscovery">startDiscovery()</a> code example.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="DiscoverySuccessCallback::onfound">
+<a class="backward-compatibility-anchor" name="::Convergence::DiscoverySuccessCallback::onfound"></a><code><b><span class="methodName">onfound</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when device is discovered during the discovery
+procedure.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onfound(<a href="#Device">Device</a> device);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">device</span>:
+ The discovered remote device.
+                </li>
+        </ul>
+</div>
+</dd>
+<dt class="method" id="DiscoverySuccessCallback::onfinished">
+<a class="backward-compatibility-anchor" name="::Convergence::DiscoverySuccessCallback::onfinished"></a><code><b><span class="methodName">onfinished</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the device discovery procedure has finished.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onfinished(<a href="#Device">Device</a>[] foundDevices);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">foundDevices</span>:
+ Array of devices found in this discovery session.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="RemoteAppControlCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlCallback"></a><h3>2.14. RemoteAppControlCallback</h3>
+<div class="brief">
+ The <em>RemoteAppControlCallback</em> interface defines the
+success method to be invoked when a service sends app control
+successfully.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface RemoteAppControlCallback {
+
+        void onsuccess(optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#RemoteAppControlService::launch">launch()</a> and
+<a href="convergence.html#RemoteAppControlService::launchAppControl">launchAppControl()</a> methods.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="RemoteAppControlCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ The RemoteAppControlCallback callback specifies success callbacks that are invoked as a reply
+from the requested application control within the application control requester.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">data</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ An array of ApplicationControlData objects
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="ConnectSuccessCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::ConnectSuccessCallback"></a><h3>2.15. ConnectSuccessCallback</h3>
+<div class="brief">
+ The <em>ConnectSuccessCallback</em> interface defines the success method
+to be invoked when a service is connected.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface ConnectSuccessCallback {
+
+        void onsuccess(<a href="#Service">Service</a> service);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> and
+<a href="convergence.html#RemoteAppControlService::connect">connect()</a> methods.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="ConnectSuccessCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::ConnectSuccessCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the service connection is established.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#Service">Service</a> service);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">service</span>:
+ The connected service on a remote device.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationSuccessCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationSuccessCallback"></a><h3>2.16. AppCommunicationSuccessCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationSuccessCallback</em> interface defines the success method
+to be invoked when a service operation, such as stop or send is successful.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationSuccessCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationService::stop">stop()</a> or
+<a href="convergence.html#AppCommunicationService::send">send()</a> methods.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationSuccessCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationSuccessCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the service operation is successful.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channel info of the service with specified URI and ID.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationStartCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationStartCallback"></a><h3>2.17. AppCommunicationStartCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationStartCallback</em> interface defines the success method
+to be invoked when a start service operation is successful.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationStartCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationService::start">start()</a> method.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationStartCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationStartCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the start service operation is successful.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channel info of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">clientInfo</span>:
+ The client information.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationClientListCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientListCallback"></a><h3>2.18. AppCommunicationClientListCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationClientListCallback</em> interface defines the
+method to be invoked when requested a list of clients, connected to
+the specified channel of the application communication service.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationClientListCallback {
+
+        void onsuccess(<a href="#ClientInfo">ClientInfo</a>[] clients);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationService::getClientList">getClientList()</a> method.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationClientListCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientListCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the list of connected clients is requested.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#ClientInfo">ClientInfo</a>[] clients);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">clients</span>:
+ The list of connected clients.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationListenerCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationListenerCallback"></a><h3>2.19. AppCommunicationListenerCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationListenerCallback</em> interface defines the
+method to be invoked when a service notification is received
+from the application communication service.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationListenerCallback {
+
+        void onnotify(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type can be assigned to the service using the
+<a href="convergence.html#AppCommunicationService::setListener">setListener()</a> method.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationListenerCallback::onnotify">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationListenerCallback::onnotify"></a><code><b><span class="methodName">onnotify</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the service channel notification is received.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onnotify(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channel info of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">payload</span>:
+ The payload containing notification data.
+                </li>
+          <li class="param">
+<span class="name">senderClientId</span>:
+ The client id of the sender.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+<h2 id="api-features">3. Related Feature</h2>
+<div id="def-api-features" class="def-api-features">
+        You can check if this API is supported with <em>tizen.systeminfo.getCapability()</em> and decide enable/disable codes that need this API.
+                    <div class="def-api-feature">
+<p><div class="description">
+            <p>
+To guarantee that the application runs on a device with Convergence feature,
+declare the following feature requirements in the config file:
+            </p>
+           </div></p>
+<li class="feature">http://tizen.org/feature/convergence.d2d</li>
+</div>
+<p></p>
+                    For more information, see <a href="../../org.tizen.gettingstarted/html/tizen_overview/application_filtering.htm">Application Filtering</a>.
+</div>
+<h2 id="full-webidl">4. Full WebIDL</h2>
+<pre class="webidl prettyprint">module Convergence {
+
+    typedef DOMString DeviceId;
+
+    enum DeviceProfile {"MOBILE", "WEARABLE", "TV"};
+
+    typedef (<a href="#PayloadString">PayloadString</a> or <a href="#PayloadRawBytes">PayloadRawBytes</a>) Payload;
+
+    enum PayloadType{"STRING", "RAW_BYTES"};
+
+    enum ConnectionState{"CONNECTED", "NOT_CONNECTED", "CONNECTING"};
+
+    [Constructor(DOMString uri, DOMString id)]
+    interface ChannelInfo {
+      attribute DOMString uri;
+      attribute DOMString id;
+    };
+
+    [NoInterfaceObject] interface ConvergenceObject {
+        readonly attribute <a href="#ConvergenceManager">ConvergenceManager</a> convergence;
+    };
+
+    <a href="tizen.html#Tizen">Tizen</a> implements <a href="#ConvergenceObject">ConvergenceObject</a>;
+
+    [NoInterfaceObject] interface ConvergenceManager {
+
+        void startDiscovery(<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback,
+            optional unsigned long? timeout) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stopDiscovery() raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };
+
+    [NoInterfaceObject] interface Device {
+
+        readonly attribute <a href="#DeviceId">DeviceId</a> id;
+
+        readonly attribute DOMString name;
+
+        readonly attribute <a href="#DeviceProfile">DeviceProfile</a> type;
+
+        readonly attribute <a href="#Service">Service</a>[] services;
+    };
+
+    [NoInterfaceObject] interface Service {
+
+        readonly attribute <a href="#ConnectionState">ConnectionState</a> connectionState;
+    };
+
+    [NoInterfaceObject] interface AppCommunicationService : <a href="#Service">Service</a> {
+
+        void start(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void getClientList(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void send(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#Payload">Payload</a>[] payload,
+            <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stop(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void setListener(<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback)
+            raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void unsetListener();
+    };
+
+    [NoInterfaceObject] interface AppCommunicationClientService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+    };
+
+
+    [Constructor()]
+    interface AppCommunicationServerService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+    };
+
+    [NoInterfaceObject] interface RemoteAppControlService : <a href="#Service">Service</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launch(<a href="application.html#ApplicationId">ApplicationId</a> appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launchAppControl(<a href="application.html#ApplicationControl">ApplicationControl</a> appControl,
+            optional <a href="application.html#ApplicationId">ApplicationId</a>? appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };
+
+    dictionary PayloadString {
+        DOMString key;
+
+        DOMString value;
+    };
+
+    dictionary PayloadRawBytes {
+        DOMString key;
+
+        byte[] value;
+    };
+
+    dictionary ClientInfo {
+        boolean isHost;
+
+        DOMString clientId;
+
+        long connectionTime;
+    };
+
+    [Callback, NoInterfaceObject] interface DiscoverySuccessCallback {
+
+        void onfound(<a href="#Device">Device</a> device);
+
+        void onfinished(<a href="#Device">Device</a>[] foundDevices);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface RemoteAppControlCallback {
+
+        void onsuccess(optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface ConnectSuccessCallback {
+
+        void onsuccess(<a href="#Service">Service</a> service);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationSuccessCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationStartCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationClientListCallback {
+
+        void onsuccess(<a href="#ClientInfo">ClientInfo</a>[] clients);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationListenerCallback {
+
+        void onnotify(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId);
+    };
+};</pre>
+</div>
+<div id="page-footer">
+<div class="copyright" align="center">
+         Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>. <br>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.
+            </div>
+<script type="text/javascript">
+
+              var _gaq = _gaq || [];
+              _gaq.push(['_setAccount', 'UA-25976949-1']);
+              _gaq.push(['_setDomainName', 'tizen.org']);
+              _gaq.push(['_trackPageview']);
+
+              (function() {
+                var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+                ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+                var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+              })();
+
+            </script>
+</div>
+</body>
+</html>
index 546693c..3f38b85 100755 (executable)
                 </tbody>
              </table>
 
-            <h4 id="Security">Security</h4>
+             <h4 id="Network">Network</h4>
+             <table width="90%">
+                <thead>
+                <tr>
+                <th style="width:20%">API</th><th>Description</th><th style="width:5%">Version</th></tr>
+                </thead>
+                <tbody>
+                <tr>
+                </thead><tbody>
+                <tr><td>
+                <a href="tizen/convergence.html" data-origin="tizen" data-domain="networking" data-category="core" data-status="D" data-version="">
+                        Convergence</a></td>
+                <td>This API provides interfaces and methods for using Tizen device-to-device convergence services.</td>
+                <td>3.0</td>
+                </tr>
+                </tbody>
+             </table>
+
+             <h4 id="Security">Security</h4>
              <table width="90%">
                 <thead>
                 <tr>
diff --git a/org.tizen.web.apireference/html/device_api/tv/tizen/convergence.html b/org.tizen.web.apireference/html/device_api/tv/tizen/convergence.html
new file mode 100644 (file)
index 0000000..096e116
--- /dev/null
@@ -0,0 +1,3700 @@
+<!DOCTYPE html PUBLIC "html">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="tizen.css" media="screen">
+<script type="text/javascript" src="snippet.js"></script><title>Convergence API</title>
+</head>
+<body id="page-content" onload="prettyPrint()">
+<div class="api" id="::Convergence">
+<div class="title"><h1>Convergence API</h1></div>
+<div class="brief">
+ The Convergence API defines interfaces and methods
+for using Tizen device-to-device convergence services.
+        </div>
+<div class="description">
+        <p>
+The following functionality is provided:
+        </p>
+        <ul>
+          <li>
+Discovering nearby devices which support device-to-device services          </li>
+          <li>
+Getting device and service information          </li>
+          <li>
+Connecting and disconnecting services          </li>
+          <li>
+Starting and stopping services          </li>
+          <li>
+Sending data to services          </li>
+          <li>
+Listening to notifications from the service          </li>
+        </ul>
+        <p>
+The collection of supported device-to-device services includes:
+        </p>
+        <ul>
+          <li>
+<em>Remote App Control Service</em> - Allows launching an application on a remote device.          </li>
+          <li>
+<em>App Communication Service</em> - Allows transferring data between applications on local and remote devices.
+<br>Note that there are 'client' and 'server' implementations of this service which allows easy set-up and
+convenient handling of the data exchange process on both local and remote devices.
+For better flexibility, the data transfer occurs in named user-defined communication channels.          </li>
+        </ul>
+        <p>
+For more information on the Device-to-device Convergence features,
+see the <a href="https://developer.tizen.org/development/guides/web-application/tizen-features/network/convergence">Convergence API Guide</a>.
+        </p>
+        <p>
+Tizen 3.0 only supports Wi-Fi for Convergence services. More connectivity, such as BT/BLE and Wi-Fi Direct, is to be supported in further versions.
+        </p>
+       </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+        </p>
+<h2>Table of Contents</h2>
+<ul class="toc">
+<li>1. <a href="#typedefs-section">Type Definitions</a><ul class="toc">
+<li>
+                    1.1. <a href="#DeviceId">DeviceId</a>
+</li>
+<li>
+                    1.2. <a href="#DeviceProfile">DeviceProfile</a>
+</li>
+<li>
+                    1.3. <a href="#Payload">Payload</a>
+</li>
+<li>
+                    1.4. <a href="#PayloadType">PayloadType</a>
+</li>
+<li>
+                    1.5. <a href="#ConnectionState">ConnectionState</a>
+</li>
+</ul>
+</li>
+<li>2. <a href="#interfaces-section">Interfaces</a><ul class="toc">
+<li>2.1. <a href="#ChannelInfo">ChannelInfo</a>
+</li>
+<li>2.2. <a href="#ConvergenceObject">ConvergenceObject</a>
+</li>
+<li>2.3. <a href="#ConvergenceManager">ConvergenceManager</a>
+</li>
+<li>2.4. <a href="#Device">Device</a>
+</li>
+<li>2.5. <a href="#Service">Service</a>
+</li>
+<li>2.6. <a href="#AppCommunicationService">AppCommunicationService</a>
+</li>
+<li>2.7. <a href="#AppCommunicationClientService">AppCommunicationClientService</a>
+</li>
+<li>2.8. <a href="#AppCommunicationServerService">AppCommunicationServerService</a>
+</li>
+<li>2.9. <a href="#RemoteAppControlService">RemoteAppControlService</a>
+</li>
+<li>2.10. <a href="#PayloadString">PayloadString</a>
+</li>
+<li>2.11. <a href="#PayloadRawBytes">PayloadRawBytes</a>
+</li>
+<li>2.12. <a href="#ClientInfo">ClientInfo</a>
+</li>
+<li>2.13. <a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a>
+</li>
+<li>2.14. <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>
+</li>
+<li>2.15. <a href="#ConnectSuccessCallback">ConnectSuccessCallback</a>
+</li>
+<li>2.16. <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>
+</li>
+<li>2.17. <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a>
+</li>
+<li>2.18. <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a>
+</li>
+<li>2.19. <a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a>
+</li>
+</ul>
+</li>
+<li>3. <a href="#api-features">Related Feature</a>
+</li>
+<li>4. <a href="#full-webidl">Full WebIDL</a>
+</li>
+</ul>
+<hr>
+<h2 id="method-summary">Summary of Interfaces and Methods</h2>
+<table class="informaltable">
+<thead><tr>
+<th>Interface</th>
+<th>Method</th>
+</tr></thead>
+<tbody>
+<tr>
+<td><a href="#ChannelInfo">ChannelInfo</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#ConvergenceObject">ConvergenceObject</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#ConvergenceManager">ConvergenceManager</a></td>
+<td>
+<div>void <a href="#ConvergenceManager::startDiscovery">startDiscovery</a> (<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback, optional unsigned long? timeout)</div>
+<div>void <a href="#ConvergenceManager::stopDiscovery">stopDiscovery</a> ()</div>
+</td>
+</tr>
+<tr>
+<td><a href="#Device">Device</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#Service">Service</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationService">AppCommunicationService</a></td>
+<td>
+<div>void <a href="#AppCommunicationService::start">start</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::getClientList">getClientList</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::send">send</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::stop">stop</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::setListener">setListener</a> (<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback)</div>
+<div>void <a href="#AppCommunicationService::unsetListener">unsetListener</a> ()</div>
+</td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationClientService">AppCommunicationClientService</a></td>
+<td>
+<div>void <a href="#AppCommunicationClientService::connect">connect</a> (<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationClientService::disconnect">disconnect</a> (optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+</td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationServerService">AppCommunicationServerService</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#RemoteAppControlService">RemoteAppControlService</a></td>
+<td>
+<div>void <a href="#RemoteAppControlService::connect">connect</a> (<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#RemoteAppControlService::disconnect">disconnect</a> (optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#RemoteAppControlService::launch">launch</a> (<a href="application.html#ApplicationId">ApplicationId</a> appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#RemoteAppControlService::launchAppControl">launchAppControl</a> (<a href="application.html#ApplicationControl">ApplicationControl</a> appControl, optional <a href="application.html#ApplicationId">ApplicationId</a>? appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+</td>
+</tr>
+<tr>
+<td><a href="#PayloadString">PayloadString</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#PayloadRawBytes">PayloadRawBytes</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#ClientInfo">ClientInfo</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a></td>
+<td>
+<div>void <a href="#DiscoverySuccessCallback::onfound">onfound</a> (<a href="#Device">Device</a> device)</div>
+<div>void <a href="#DiscoverySuccessCallback::onfinished">onfinished</a> (<a href="#Device">Device</a>[] foundDevices)</div>
+</td>
+</tr>
+<tr>
+<td><a href="#RemoteAppControlCallback">RemoteAppControlCallback</a></td>
+<td><div>void <a href="#RemoteAppControlCallback::onsuccess">onsuccess</a> (optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data)</div></td>
+</tr>
+<tr>
+<td><a href="#ConnectSuccessCallback">ConnectSuccessCallback</a></td>
+<td><div>void <a href="#ConnectSuccessCallback::onsuccess">onsuccess</a> (<a href="#Service">Service</a> service)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a></td>
+<td><div>void <a href="#AppCommunicationSuccessCallback::onsuccess">onsuccess</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a></td>
+<td><div>void <a href="#AppCommunicationStartCallback::onsuccess">onsuccess</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a></td>
+<td><div>void <a href="#AppCommunicationClientListCallback::onsuccess">onsuccess</a> (<a href="#ClientInfo">ClientInfo</a>[] clients)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a></td>
+<td><div>void <a href="#AppCommunicationListenerCallback::onnotify">onnotify</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId)</div></td>
+</tr>
+</tbody>
+</table>
+<div class="typedefs" id="typedefs-section">
+<h2>1. Type Definitions</h2>
+<div class="typedef" id="DeviceId">
+<a class="backward-compatibility-anchor" name="::Convergence::DeviceId"></a><h3>1.1. DeviceId</h3>
+<div class="brief">
+ The type of the remote device identifier.
+          </div>
+<pre class="webidl prettyprint">    typedef DOMString DeviceId;</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+</div>
+<div class="enum" id="DeviceProfile">
+<a class="backward-compatibility-anchor" name="::Convergence::DeviceProfile"></a><h3>1.2. DeviceProfile</h3>
+<div class="brief">
+ Enumeration of the remote device profile.
+          </div>
+<pre class="webidl prettyprint">    enum DeviceProfile {"MOBILE", "WEARABLE", "TV"};</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+</div>
+<div class="typedef" id="Payload">
+<a class="backward-compatibility-anchor" name="::Convergence::Payload"></a><h3>1.3. Payload</h3>
+<div class="brief">
+ The type of payload item. An item is a key-value pair. The value may be either a string or an array of raw bytes.
+          </div>
+<pre class="webidl prettyprint">    typedef (<a href="#PayloadString">PayloadString</a> or <a href="#PayloadRawBytes">PayloadRawBytes</a>) Payload;</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+</div>
+<div class="enum" id="PayloadType">
+<a class="backward-compatibility-anchor" name="::Convergence::PayloadType"></a><h3>1.4. PayloadType</h3>
+<div class="brief">
+ Enumeration of payload types.
+          </div>
+<pre class="webidl prettyprint">    enum PayloadType{"STRING", "RAW_BYTES"};</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The following values are supported:
+          </p>
+          <ul>
+            <li>
+STRING - The payload key-value value is a string.            </li>
+            <li>
+RAW_BYTES - The payload key-value value is a byte array.            </li>
+          </ul>
+         </div>
+</div>
+<div class="enum" id="ConnectionState">
+<a class="backward-compatibility-anchor" name="::Convergence::ConnectionState"></a><h3>1.5. ConnectionState</h3>
+<div class="brief">
+ Enumeration of service connection states.
+          </div>
+<pre class="webidl prettyprint">    enum ConnectionState{"CONNECTED", "NOT_CONNECTED", "CONNECTING"};</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The following values are supported:
+          </p>
+          <ul>
+            <li>
+CONNECTED - Connected state.             </li>
+            <li>
+DISCONNECTED - Not connected state.             </li>
+            <li>
+CONNECTING - Connecting state.             </li>
+          </ul>
+         </div>
+</div>
+</div>
+<div class="interfaces" id="interfaces-section">
+<h2>2. Interfaces</h2>
+<div class="interface" id="ChannelInfo">
+<a class="backward-compatibility-anchor" name="::Convergence::ChannelInfo"></a><h3>2.1. ChannelInfo</h3>
+<div class="brief">
+ The channel info interface that specifies the server application which a client application wants to connect with.
+          </div>
+<pre class="webidl prettyprint">    [Constructor(DOMString uri, DOMString id)]
+    interface ChannelInfo {
+      attribute DOMString uri;
+      attribute DOMString id;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The channelinfo is composed of a URI and a channel ID which is used in <a href="convergence.html#AppCommunicationService">App Communication</a> services.
+The channelinfo URI is a URI for an application on the server side.
+The channelinfo ID value is defined by the developer.
+          </p>
+         </div>
+<p><span class="remark"> Remark: </span>
+ We assume that the server side app URI is known. For example, either client and server side apps are both developed by the same developer or the server app URI is available from other sources.
+          </p>
+<div class="constructors">
+<h4 id="ChannelInfo::constructor">Constructors</h4>
+<dl>
+<pre class="webidl prettyprint">ChannelInfo(DOMString uri, DOMString id);</pre>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Assume that the "targetApp0.main" application has been installed on remote device */
+var channel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+</pre>
+</div>
+</dl>
+</div>
+<div class="attributes">
+<h4>Attributes</h4>
+<ul>
+<li class="attribute" id="ChannelInfo::uri">
+<span class="attrName"><span class="type">DOMString </span><span class="name">uri</span></span><div class="brief">
+ The uri of the channel.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="ChannelInfo::id">
+<span class="attrName"><span class="type">DOMString </span><span class="name">id</span></span><div class="brief">
+ The identifier of the channel.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+</ul>
+</div>
+</div>
+<div class="interface" id="ConvergenceObject">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceObject"></a><h3>2.2. ConvergenceObject</h3>
+<div class="brief">
+ The <em>ConvergenceObject</em> interface defines what is
+instantiated by the <em>Tizen</em> object from the Tizen platform.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface ConvergenceObject {
+        readonly attribute <a href="#ConvergenceManager">ConvergenceManager</a> convergence;
+    };</pre>
+<pre class="webidl prettyprint">    <a href="tizen.html#Tizen">Tizen</a> implements <a href="#ConvergenceObject">ConvergenceObject</a>;</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The <em>tizen.convergence</em> object allows access to
+Tizen device-to-device convergence API.
+          </p>
+         </div>
+</div>
+<div class="interface" id="ConvergenceManager">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceManager"></a><h3>2.3. ConvergenceManager</h3>
+<div class="brief">
+ The <em>ConvergenceManager</em> interface provides access to the
+<em>convergence</em> object.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface ConvergenceManager {
+
+        void startDiscovery(<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback,
+            optional unsigned long? timeout) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stopDiscovery() raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The device-to-device convergence manager allows discovering available
+nearby devices, which support device-to-device services.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="ConvergenceManager::startDiscovery">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceManager::startDiscovery"></a><code><b><span class="methodName">startDiscovery</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Starts discovery of nearby devices.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void startDiscovery(<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback, optional unsigned long? timeout);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method initiates the device discovery procedure.
+Depending on the progress of this procedure the following methods
+are invoked:
+            </p>
+            <ul>
+              <li>
+<a href="convergence.html#DiscoverySuccessCallback::onfound">onfound()</a> - when a device is found.
+This method is invoked with the device
+information of
+<a href="convergence.html#Device">Device</a> type.
+If no device is found, this method will never be invoked.              </li>
+              <li>
+<a href="convergence.html#DiscoverySuccessCallback::onfinished">onfinished()</a> - when a discovery procedure is finished.
+This method is invoked
+with the list of discovered device information.              </li>
+            </ul>
+            <p>
+The discovery procedure can be canceled anytime, by calling
+<a href="convergence.html#ConvergenceManager::stopDiscovery">stopDiscovery()</a> in
+the <em>ConvergenceManager</em>.
+<br>Note the <a href="convergence.html#DiscoverySuccessCallback::onfinished">onfinished()</a> discovery
+callback will be invoked.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The callback to invoke each time the device is
+found. The callback will be invoked also when the discovery
+procedure has finished.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure of device
+discovery.
+                </li>
+          <li class="param">
+<span class="name">timeout</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ Duration of discovery procedure in seconds. If this
+value is omitted or <em>null</em> is passed, the default timeout
+is 60 seconds.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+discovery procedure has started already.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Handling device discovery results */
+var discoveryCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Do something with the discovered device */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* If desired device is found, stop discovery with following call */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Device discovery has finished');
+&nbsp;&nbsp;&nbsp;}
+};
+
+/* Running device discovery procedure */
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoveryCallback, function(err)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+&nbsp;&nbsp;&nbsp;}, 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ </pre>
+</div>
+</dd>
+<dt class="method" id="ConvergenceManager::stopDiscovery">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceManager::stopDiscovery"></a><code><b><span class="methodName">stopDiscovery</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Stops discovery of nearby devices.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void stopDiscovery();
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method stops an ongoing discovery procedure.
+            </p>
+           </div>
+<p><span class="remark"> Remark: </span>
+ Device discovery is a heavyweight procedure, so it may be
+useful to stop discovery when the required device is found.
+<br>Note this method triggers the <a href="convergence.html#DiscoverySuccessCallback::onfinished">onfinished()</a> discovery
+callback.
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at
+<a href="convergence.html#ConvergenceManager::startDiscovery">startDiscovery()</a> code example.
+            </p>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul><li class="list"><p>
+ with error type InvalidStateError, if the
+discovery procedure has not started yet.
+                </p></li></ul>
+</li></ul>
+        </div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="Device">
+<a class="backward-compatibility-anchor" name="::Convergence::Device"></a><h3>2.4. Device</h3>
+<div class="brief">
+ The <em>Device</em> interface provides access to the remote
+device's properties.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface Device {
+
+        readonly attribute <a href="#DeviceId">DeviceId</a> id;
+
+        readonly attribute DOMString name;
+
+        readonly attribute <a href="#DeviceProfile">DeviceProfile</a> type;
+
+        readonly attribute <a href="#Service">Service</a>[] services;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers access to remote device information, such as the unique
+identifier, name, profile type and list of provided services.
+          </p>
+          <p>
+<br>Note, device ID and device type are defined in the platform, and the developer cannot change it.
+          </p>
+         </div>
+<div class="attributes">
+<h4>Attributes</h4>
+<ul>
+<li class="attribute" id="Device::id">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">DeviceId </span><span class="name">id</span></span><div class="brief">
+ The unique device ID.
+<br>Note the device ID is a unique identifier string, generated with following rule.
+If the Remote Server is installed on the device (e.g. TV),
+then the device ID is assigned by application communication server service.
+Usually it has a format of service name and version. Otherwise (e.g. mobile or wearable),
+the device ID is device MAC address.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="Device::name">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">DOMString </span><span class="name">name</span></span><div class="brief">
+ The device name.
+<br>Note device name is one that is set in the Settings app (Settings&gt;About Devices&gt;Device Name).
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="Device::type">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">DeviceProfile </span><span class="name">type</span></span><div class="brief">
+ The device profile type.
+<br>Note Device type represents the <a href="https://www.tizen.org/about">profile of the device</a>,
+such as “TV”, “Mobile” or “Wearable”.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="Device::services">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">Service[]
+                      </span><span class="name">services</span></span><div class="brief">
+ The list of services, available on the device.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+</ul>
+</div>
+</div>
+<div class="interface" id="Service">
+<a class="backward-compatibility-anchor" name="::Convergence::Service"></a><h3>2.5. Service</h3>
+<div class="brief">
+ The <em>Service</em> interface is a base interface for all
+device-to-device services.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface Service {
+
+        readonly attribute <a href="#ConnectionState">ConnectionState</a> connectionState;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface defines common property for all device-to-device services
+          </p>
+         </div>
+<div class="attributes">
+<h4>Attributes</h4>
+<ul><li class="attribute" id="Service::connectionState">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">ConnectionState </span><span class="name">connectionState</span></span><div class="brief">
+ The service connection state.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li></ul>
+</div>
+</div>
+<div class="interface" id="AppCommunicationService">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService"></a><h3>2.6. AppCommunicationService</h3>
+<div class="brief">
+ The <em>AppCommunicationService</em> interface defines the base interface
+of both application communication
+<a href="convergence.html#AppCommunicationClientService">Client</a> and
+<a href="convergence.html#AppCommunicationServerService">Server</a> services
+and specifies common service features, such as start, stop, send, listener etc.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface AppCommunicationService : <a href="#Service">Service</a> {
+
+        void start(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void getClientList(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void send(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#Payload">Payload</a>[] payload,
+            <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stop(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void setListener(<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback)
+            raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void unsetListener();
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+App Communication Service allows transferring data between apps on local and remote devices.
+The App Communication Service relies on a Remote Server. The initialization and execution of a server app
+(the app on the side with the Remote Server, e.g. TV) and a client app (e.g. an app on a mobile or wearable device)
+are slightly different. Furthermore, the client app can remotely launch an app on the server side or connect to an
+already running server app, but the reverse way is impossible. More than one client can be connected to a server app.
+For example, multiple players on mobile devices can connect to a game application on a TV which takes a role of a server.
+Both client and server side apps can send payloads and listen to each other.
+          </p>
+          <p>
+<br>Note there are <a href="convergence.html#AppCommunicationClientService">client</a> and
+<a href="convergence.html#AppCommunicationServerService">server</a> implementations
+of this service for both local and remote devices. For better flexibility, the data transfer occurs in a user-defined
+<a href="convergence.html#ChannelInfo">ChannelInfo</a>.
+          </p>
+          <p>
+These interfaces offer the following service features:
+          </p>
+          <ul>
+            <li>
+Starting and stopping the service            </li>
+            <li>
+Sending payloads to the service            </li>
+            <li>
+Listening to remote service notifications            </li>
+            <li>
+Getting the list of clients that are connected to the service            </li>
+          </ul>
+         </div>
+
+      <div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationService::start">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::start"></a><code><b><span class="methodName">start</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Starts the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void start(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method starts the channel of the service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method for application communication client service, the service must be connected with the
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> method.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelinfo of the service with specified URI and ID.
+<br>Note ChannelInfo in the application communication service specifies a server app which a client wants to connect with.
+ChannelInfo URI is a URI of the server side app, while ChannelInfo ID is a developer-defined value.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is started already. <br>Note some services don't require
+a connection and disconnection procedures.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstarted(channelinfo, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channelinfo.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channelinfo.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+/* Create an instance of application communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel, onstarted, onerror);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstarted(channelinfo, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channelinfo.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channelinfo.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::getClientList">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::getClientList"></a><code><b><span class="methodName">getClientList</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Get the client lists connected to the channel
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void getClientList(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected and
+started with
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> and
+<a href="convergence.html#AppCommunicationService::start">start()</a> methods
+correspondingly.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelinfo of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onsuccess(clientinfolist)
+{
+&nbsp;&nbsp;&nbsp;console.log('get client list');
+&nbsp;&nbsp;&nbsp;for (i in clientinfolist)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfolist[i].isHost);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfolist[i].clientId);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfolist[i].connectionTime);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;service.getClientList(requestChannel, onsuccess, onerror);
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel, onstarted, onerror);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ get client list
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ isHost: false
+ client id: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ connection time: 1420163913807
+ isHost: false
+ client id: c13adb22-5423-22e4-5d8q-adf872d4q889
+ connection time: 1420163913125
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onsuccess(clientinfolist)
+{
+&nbsp;&nbsp;&nbsp;console.log('get client list');
+&nbsp;&nbsp;&nbsp;for (i in clientinfolist)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfolist[i].isHost);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfolist[i].clientId);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfolist[i].connectionTime);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;clientService.getClientList(requestChannel, onsuccess, onerror);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ get client list
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ isHost: false
+ client id: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ connection time: 1420163913807
+ isHost: false
+ client id: c13adb22-5423-22e4-5d8q-adf872d4q889
+ connection time: 1420163913125
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::send">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::send"></a><code><b><span class="methodName">send</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Sends a payload to the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void send(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at
+<a href="convergence.html#AppCommunicationService::start">start()</a> code example.
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected and
+started with
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> and
+<a href="convergence.html#AppCommunicationService::start">start()</a> methods
+correspondingly.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelinfo of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">payload</span>:
+ The payload containing request data.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function sendSuccessCallback(channelinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('requestPayload sent');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by Multi Screen server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;/* Send data to the remote service */
+&nbsp;&nbsp;&nbsp;service.send(channel, requestPayload, sendSuccessCallback, onerror);
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel, onstarted, onerror);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ requestPayload sent
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function sendSuccessCallback(channel)
+{
+&nbsp;&nbsp;&nbsp;console.log('requestPayload sent');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;/* Send data to the remote service */
+&nbsp;&nbsp;&nbsp;clientService.send(channel, requestPayload, sendSuccessCallback, onerror);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = device.service[i];
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ requestPayload sent
+ channel uri: targetApp0.main
+ channel id: chA
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::stop">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::stop"></a><code><b><span class="methodName">stop</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Stops the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void stop(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method stops the specified channel of the service.
+<br>Note When all clients have stopped using the service channel, the server side automatically terminates the application.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelInfo of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel1 = new tizen.ChannelInfo('targetApp0.main', 'chA');
+var requestChannel2 = new tizen.ChannelInfo('targetApp1.main', 'chB');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstopped(channel)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel stopped');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('clienti id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;if (channel id == 'chB')
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.stop(requestChannel2, onstopped);
+&nbsp;&nbsp;&nbsp;}
+}
+</pre>
+</div>
+
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre>
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel1, onstarted, onerror);
+service.start(requestChannel2, onstarted, onerror);
+Channel started
+channel uri: targetApp0.main
+channel id: chA
+clientinfo
+isHost: true
+clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+connectionTime: 1420163913035
+Channel started
+channel uri: targetApp1.main
+channel id: chB
+clientinfo
+isHost: true
+clientId: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+connectionTime: 1420163913807
+Channel stopped
+channel uri: targetApp1.main
+channel id: chB
+</pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel1 = new tizen.ChannelInfo('targetApp0.main', 'chA');
+var requestChannel2 = new tizen.ChannelInfo('targetApp1.main', 'chB');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstopped(channel)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel stopped');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;if (channel id == 'chB')
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService.stop(requestChannel2, onstopped);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connectionTime: 1420163913035
+ requestPayload sent
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connectionTime: 1420163913035
+ Channel started
+ channel uri: targetApp1.main
+ channel id: chB
+ clientinfo
+ isHost: false
+ clientId: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ connectionTime: 1420163913807
+ Channel stopped
+ channel uri: targetApp1.main
+ channel id: chB
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::setListener">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::setListener"></a><code><b><span class="methodName">setListener</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Registers the service listener.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void setListener(<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">listenerCallback</span>:
+ The method to invoke when a service
+notification is received.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul><li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li></ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onnotify(channel, payload, senderclientid)
+{
+&nbsp;&nbsp;&nbsp;console.log('On service notification');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;/* clientid of the sender of the payload */
+&nbsp;&nbsp;&nbsp;console.log('client id of sender: ' + senderclientid);
+&nbsp;&nbsp;&nbsp;for (i in payload)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('payload: ' + payload[i].key + '-' + payload[i].value);
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;/* If using unsetListener, unregisters the listener and stops receiving notifications from the service */
+&nbsp;&nbsp;&nbsp;service.unsetListener();
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by Multi Screen server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+var service.start(requestChannel, onstarted, onerror);
+/* Register listener to receive notifications from remote service */
+service.setListener(onnotify);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ On service notification
+ channel uri: targetApp0.main
+ channel id: chA
+ client id of sender: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ payload: msg-hello
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onnotify(channel, payload, senderclientid)
+{
+&nbsp;&nbsp;&nbsp;console.log('On service notification');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;/* clientid of the sender of the payload */
+&nbsp;&nbsp;&nbsp;console.log('client id of sender: ' + senderclientid);
+&nbsp;&nbsp;&nbsp;for (i in payload)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('payload ' + payload[i].key + ': ' + payload[i].value);
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;/* If using unsetListener, unregisters the listener and stops receiving notifications from the service */
+&nbsp;&nbsp;&nbsp;clientService.unsetListener();
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Register listener to receive notifications from remote service */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.setListener(onnotify);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connectionTime: 1420163913035
+ On service notification
+ channel uri: targetApp0.main
+ channel id: chA
+ client id of sender: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ payload: msg-hello
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::unsetListener">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::unsetListener"></a><code><b><span class="methodName">unsetListener</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Unregisters the service listener.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void unsetListener();
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at
+<a href="convergence.html#AppCommunicationService::setListener">setListener()</a> code example.
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationClientService">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientService"></a><h3>2.7. AppCommunicationClientService</h3>
+<div class="brief">
+ The <em>AppCommunicationClientService</em> interface provides access to
+application communication client service features.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface AppCommunicationClientService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers following service features:
+          </p>
+          <ul>
+            <li>
+Connecting and disconnecting the remote service            </li>
+            <li>
+Reading immediate data of the remote service            </li>
+            <li>
+Listening to remote service update notifications            </li>
+            <li>
+Sending data to the remote service            </li>
+          </ul>
+         </div>
+
+      <div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationClientService::connect">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientService::connect"></a><code><b><span class="methodName">connect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Connects to the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Makes physical connection such as Wi-Fi or Bluetooth to the
+service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<p><span class="remark"> Remark: </span>
+ App developers do not need to specify the connectivity type
+explicitly. The framework automatically determines which connectivity
+to use in a selected service.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is connected already.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;else if (service instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the remote app control service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;service.disconnect();
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Connected to the service
+ Connected to the remote app control service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationClientService::disconnect">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientService::disconnect"></a><code><b><span class="methodName">disconnect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Disconnects the connected service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Disconnect physical connection with device-to-device service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at <a href="convergence.html#AppCommunicationClientService::connect">connect()</a> code example.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service was not connected yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationServerService">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationServerService"></a><h3>2.8. AppCommunicationServerService</h3>
+<div class="brief">
+ The <em>AppCommunicationServerService</em> interface provides access to
+application communication server service features.
+          </div>
+<pre class="webidl prettyprint">    [Constructor()]
+    interface AppCommunicationServerService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers following service features:
+          </p>
+          <ul>
+            <li>
+Instantiating the service            </li>
+            <li>
+Reading immediate data of the service            </li>
+            <li>
+Listening to service update notifications            </li>
+            <li>
+Sending data for the service            </li>
+          </ul>
+         </div>
+<p><span class="remark"> Remark: </span>
+ application server service is used without discovery phase.
+The developer should instantiate a standalone service object using
+the constructor.
+          </p>
+
+      <div class="constructors">
+<h4 id="AppCommunicationServerService::constructor">Constructors</h4>
+<dl>
+<pre class="webidl prettyprint">AppCommunicationServerService();</pre>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Create an instance of application communication server service object */
+var service = new tizen.AppCommunicationServerService();
+</pre>
+</div>
+</dl>
+</div>
+</div>
+<div class="interface" id="RemoteAppControlService">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService"></a><h3>2.9. RemoteAppControlService</h3>
+<div class="brief">
+ The <em>RemoteAppControlService</em> interface provides access to
+remote application control service features.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface RemoteAppControlService : <a href="#Service">Service</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launch(<a href="application.html#ApplicationId">ApplicationId</a> appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launchAppControl(<a href="application.html#ApplicationControl">ApplicationControl</a> appControl,
+            optional <a href="application.html#ApplicationId">ApplicationId</a>? appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers following device-to-device service features:
+          </p>
+          <ul>
+            <li>
+Connecting and disconnecting the service            </li>
+            <li>
+Sending app control data to the service            </li>
+            <li>
+Receiving app control results            </li>
+          </ul>
+         </div>
+
+      <div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="RemoteAppControlService::connect">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::connect"></a><code><b><span class="methodName">connect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Connects to the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Makes physical connection such as Wi-Fi or Bluetooth to remote
+device-to-device service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<p><span class="remark"> Remark: </span>
+ App developers do not need to specify the connectivity type
+explicitly. Framework automatically determines which connectivity
+to use in a selected service.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is connected already.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the remote app control service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;else if (service instanceof AppCommunicationClientService))
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;service.disconnect();
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Connected to the service
+ Connected to the remote app control service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="RemoteAppControlService::disconnect">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::disconnect"></a><code><b><span class="methodName">disconnect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Disconnects the connected service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Disconnect physical connection with device-to-device service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service was not connected yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function ondisconnected()
+{
+&nbsp;&nbsp;&nbsp;console.log('Disconnected to the service');
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState == "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].disconnect(ondisconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Disconnected to the service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="RemoteAppControlService::launch">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::launch"></a><code><b><span class="methodName">launch</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Sends the given application ID to launch an application on the remote device.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void launch(<a href="application.html#ApplicationId">ApplicationId</a> appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method sends an application ID to the remote service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected
+with
+<a href="convergence.html#RemoteAppControlService::connect">connect()</a> method
+correspondingly.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">appId</span>:
+ The target app id.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Assume that the "targetApp0.main" application has been installed on remote device */
+var requestAppId = 'targetApp0.main';
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function remoteAppControlCallback(data) 
+{
+&nbsp;&nbsp;&nbsp;console.log('On remote app control service reply');
+&nbsp;&nbsp;&nbsp;console.log('clientId: ' + clientId);
+&nbsp;&nbsp;&nbsp;for (var i = 0; i  data.length; i++)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log("key: " + data[i].key + "value: " + data[i].value[0]);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+
+&nbsp;&nbsp;&nbsp;/* Launching server app remotely */
+&nbsp;&nbsp;&nbsp;service.launch(requestAppId, remoteAppControlCallback, onerror);
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="RemoteAppControlService::launchAppControl">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::launchAppControl"></a><code><b><span class="methodName">launchAppControl</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Sends an app control to launch an application on the remote device.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void launchAppControl(<a href="application.html#ApplicationControl">ApplicationControl</a> appControl, optional <a href="application.html#ApplicationId">ApplicationId</a>? appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method sends an app control to the remote service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected with
+<a href="convergence.html#RemoteAppControlService::connect">connect()</a> method.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">appControl</span>:
+ The app control data.
+                </li>
+          <li class="param">
+<span class="name">appId</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The target app id.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+var requestAppControl = new tizen.ApplicationControl('http://tizen.org/appcontrol/operation/view',
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;null, 'image/jpeg', null,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[new tizen.ApplicationControlData('images', [testImgData])]);
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function remoteAppControlCallback(data)
+{
+&nbsp;&nbsp;&nbsp;console.log('On remote app control service reply');
+&nbsp;&nbsp;&nbsp;for (var i = 0; i  data.length; i++)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log("key: " + data[i].key + "value: " + data[i].value[0]);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+
+&nbsp;&nbsp;&nbsp;/* Send data to the remote service */
+&nbsp;&nbsp;&nbsp;service.launchAppControl(requestAppControl, null, remoteAppControlCallback, onerror);
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ </pre>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="dictionary" id="PayloadString">
+<a class="backward-compatibility-anchor" name="::Convergence::PayloadString"></a><h3>2.10. PayloadString</h3>
+<div class="brief">
+ The dictionary that specifies a payload string for the
+device-to-device service.
+          </div>
+<pre class="webidl prettyprint">    dictionary PayloadString {
+        DOMString key;
+
+        DOMString value;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+<em>PayloadString</em> is a key-value pair. Both the key and value are strings.
+          </p>
+         </div>
+<div class="attributes">
+<h4>Dictionary members</h4>
+<dl>
+<dt class="member" id="PayloadString::key"><span class="attrName">DOMString key</span></dt>
+<dd>
+<div class="brief">
+ The name of the payload string.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="PayloadString::value"><span class="attrName">DOMString value</span></dt>
+<dd>
+<div class="brief">
+ The value of the payload string.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="dictionary" id="PayloadRawBytes">
+<a class="backward-compatibility-anchor" name="::Convergence::PayloadRawBytes"></a><h3>2.11. PayloadRawBytes</h3>
+<div class="brief">
+ The dictionary that specifies a raw bytes payload for the
+device-to-device service.
+          </div>
+<pre class="webidl prettyprint">    dictionary PayloadRawBytes {
+        DOMString key;
+
+        byte[] value;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+<em>PayloadRawBytes</em> is a key-value pair. The key is a string and the value is a byte
+array which is to be delivered to a remote service.
+          </p>
+         </div>
+<div class="attributes">
+<h4>Dictionary members</h4>
+<dl>
+<dt class="member" id="PayloadRawBytes::key"><span class="attrName">DOMString key</span></dt>
+<dd>
+<div class="brief">
+ The name of the payload byte array.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="PayloadRawBytes::value"><span class="attrName">byte[] value</span></dt>
+<dd>
+<div class="brief">
+ The bytes of the payload byte array.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="dictionary" id="ClientInfo">
+<a class="backward-compatibility-anchor" name="::Convergence::ClientInfo"></a><h3>2.12. ClientInfo</h3>
+<div class="brief">
+ The dictionary that specifies client information.
+          </div>
+<pre class="webidl prettyprint">    dictionary ClientInfo {
+        boolean isHost;
+
+        DOMString clientId;
+
+        long connectionTime;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="attributes">
+<h4>Dictionary members</h4>
+<dl>
+<dt class="member" id="ClientInfo::isHost"><span class="attrName">boolean isHost</span></dt>
+<dd>
+<div class="brief">
+ The value indicating if the service is local (true) or
+remote (false).
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="ClientInfo::clientId"><span class="attrName">DOMString clientId</span></dt>
+<dd>
+<div class="brief">
+ The unique client id.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="ClientInfo::connectionTime"><span class="attrName">long connectionTime</span></dt>
+<dd>
+<div class="brief">
+ The connection time in milliseconds.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="DiscoverySuccessCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::DiscoverySuccessCallback"></a><h3>2.13. DiscoverySuccessCallback</h3>
+<div class="brief">
+ The <em>DiscoverySuccessCallback</em> interface defines the
+success method for <a href="convergence.html#ConvergenceManager::startDiscovery">startDiscovery()</a>.
+          </div>
+<pre class="webidl prettyprint">    [Callback, NoInterfaceObject] interface DiscoverySuccessCallback {
+
+        void onfound(<a href="#Device">Device</a> device);
+
+        void onfinished(<a href="#Device">Device</a>[] foundDevices);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+Specifies the type of function passed to <em>ConvergenceManager.startDiscovery()</em>.
+Called when device providing device-to-device service is discovered nearby.
+          </p>
+          <p>
+A usage example can be found in the
+<a href="convergence.html#ConvergenceManager::startDiscovery">startDiscovery()</a> code example.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="DiscoverySuccessCallback::onfound">
+<a class="backward-compatibility-anchor" name="::Convergence::DiscoverySuccessCallback::onfound"></a><code><b><span class="methodName">onfound</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when device is discovered during the discovery
+procedure.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onfound(<a href="#Device">Device</a> device);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">device</span>:
+ The discovered remote device.
+                </li>
+        </ul>
+</div>
+</dd>
+<dt class="method" id="DiscoverySuccessCallback::onfinished">
+<a class="backward-compatibility-anchor" name="::Convergence::DiscoverySuccessCallback::onfinished"></a><code><b><span class="methodName">onfinished</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the device discovery procedure has finished.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onfinished(<a href="#Device">Device</a>[] foundDevices);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">foundDevices</span>:
+ Array of devices found in this discovery session.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="RemoteAppControlCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlCallback"></a><h3>2.14. RemoteAppControlCallback</h3>
+<div class="brief">
+ The <em>RemoteAppControlCallback</em> interface defines the
+success method to be invoked when a service sends app control
+successfully.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface RemoteAppControlCallback {
+
+        void onsuccess(optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#RemoteAppControlService::launch">launch()</a> and
+<a href="convergence.html#RemoteAppControlService::launchAppControl">launchAppControl()</a> methods.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="RemoteAppControlCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ The RemoteAppControlCallback callback specifies success callbacks that are invoked as a reply
+from the requested application control within the application control requester.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">data</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ An array of ApplicationControlData objects
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="ConnectSuccessCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::ConnectSuccessCallback"></a><h3>2.15. ConnectSuccessCallback</h3>
+<div class="brief">
+ The <em>ConnectSuccessCallback</em> interface defines the success method
+to be invoked when a service is connected.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface ConnectSuccessCallback {
+
+        void onsuccess(<a href="#Service">Service</a> service);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> and
+<a href="convergence.html#RemoteAppControlService::connect">connect()</a> methods.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="ConnectSuccessCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::ConnectSuccessCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the service connection is established.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#Service">Service</a> service);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">service</span>:
+ The connected service on a remote device.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationSuccessCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationSuccessCallback"></a><h3>2.16. AppCommunicationSuccessCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationSuccessCallback</em> interface defines the success method
+to be invoked when a service operation, such as stop or send is successful.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationSuccessCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationService::stop">stop()</a> or
+<a href="convergence.html#AppCommunicationService::send">send()</a> methods.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationSuccessCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationSuccessCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the service operation is successful.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channel info of the service with specified URI and ID.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationStartCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationStartCallback"></a><h3>2.17. AppCommunicationStartCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationStartCallback</em> interface defines the success method
+to be invoked when a start service operation is successful.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationStartCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationService::start">start()</a> method.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationStartCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationStartCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the start service operation is successful.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channel info of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">clientInfo</span>:
+ The client information.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationClientListCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientListCallback"></a><h3>2.18. AppCommunicationClientListCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationClientListCallback</em> interface defines the
+method to be invoked when requested a list of clients, connected to
+the specified channel of the application communication service.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationClientListCallback {
+
+        void onsuccess(<a href="#ClientInfo">ClientInfo</a>[] clients);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationService::getClientList">getClientList()</a> method.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationClientListCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientListCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the list of connected clients is requested.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#ClientInfo">ClientInfo</a>[] clients);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">clients</span>:
+ The list of connected clients.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationListenerCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationListenerCallback"></a><h3>2.19. AppCommunicationListenerCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationListenerCallback</em> interface defines the
+method to be invoked when a service notification is received
+from the application communication service.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationListenerCallback {
+
+        void onnotify(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type can be assigned to the service using the
+<a href="convergence.html#AppCommunicationService::setListener">setListener()</a> method.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationListenerCallback::onnotify">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationListenerCallback::onnotify"></a><code><b><span class="methodName">onnotify</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the service channel notification is received.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onnotify(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channel info of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">payload</span>:
+ The payload containing notification data.
+                </li>
+          <li class="param">
+<span class="name">senderClientId</span>:
+ The client id of the sender.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+<h2 id="api-features">3. Related Feature</h2>
+<div id="def-api-features" class="def-api-features">
+        You can check if this API is supported with <em>tizen.systeminfo.getCapability()</em> and decide enable/disable codes that need this API.
+                    <div class="def-api-feature">
+<p><div class="description">
+            <p>
+To guarantee that the application runs on a device with Convergence feature,
+declare the following feature requirements in the config file:
+            </p>
+           </div></p>
+<li class="feature">http://tizen.org/feature/convergence.d2d</li>
+</div>
+<p></p>
+                    For more information, see <a href="../../org.tizen.gettingstarted/html/tizen_overview/application_filtering.htm">Application Filtering</a>.
+</div>
+<h2 id="full-webidl">4. Full WebIDL</h2>
+<pre class="webidl prettyprint">module Convergence {
+
+    typedef DOMString DeviceId;
+
+    enum DeviceProfile {"MOBILE", "WEARABLE", "TV"};
+
+    typedef (<a href="#PayloadString">PayloadString</a> or <a href="#PayloadRawBytes">PayloadRawBytes</a>) Payload;
+
+    enum PayloadType{"STRING", "RAW_BYTES"};
+
+    enum ConnectionState{"CONNECTED", "NOT_CONNECTED", "CONNECTING"};
+
+    [Constructor(DOMString uri, DOMString id)]
+    interface ChannelInfo {
+      attribute DOMString uri;
+      attribute DOMString id;
+    };
+
+    [NoInterfaceObject] interface ConvergenceObject {
+        readonly attribute <a href="#ConvergenceManager">ConvergenceManager</a> convergence;
+    };
+
+    <a href="tizen.html#Tizen">Tizen</a> implements <a href="#ConvergenceObject">ConvergenceObject</a>;
+
+    [NoInterfaceObject] interface ConvergenceManager {
+
+        void startDiscovery(<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback,
+            optional unsigned long? timeout) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stopDiscovery() raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };
+
+    [NoInterfaceObject] interface Device {
+
+        readonly attribute <a href="#DeviceId">DeviceId</a> id;
+
+        readonly attribute DOMString name;
+
+        readonly attribute <a href="#DeviceProfile">DeviceProfile</a> type;
+
+        readonly attribute <a href="#Service">Service</a>[] services;
+    };
+
+    [NoInterfaceObject] interface Service {
+
+        readonly attribute <a href="#ConnectionState">ConnectionState</a> connectionState;
+    };
+
+    [NoInterfaceObject] interface AppCommunicationService : <a href="#Service">Service</a> {
+
+        void start(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void getClientList(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void send(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#Payload">Payload</a>[] payload,
+            <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stop(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void setListener(<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback)
+            raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void unsetListener();
+    };
+
+    [NoInterfaceObject] interface AppCommunicationClientService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+    };
+
+
+    [Constructor()]
+    interface AppCommunicationServerService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+    };
+
+    [NoInterfaceObject] interface RemoteAppControlService : <a href="#Service">Service</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launch(<a href="application.html#ApplicationId">ApplicationId</a> appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launchAppControl(<a href="application.html#ApplicationControl">ApplicationControl</a> appControl,
+            optional <a href="application.html#ApplicationId">ApplicationId</a>? appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };
+
+    dictionary PayloadString {
+        DOMString key;
+
+        DOMString value;
+    };
+
+    dictionary PayloadRawBytes {
+        DOMString key;
+
+        byte[] value;
+    };
+
+    dictionary ClientInfo {
+        boolean isHost;
+
+        DOMString clientId;
+
+        long connectionTime;
+    };
+
+    [Callback, NoInterfaceObject] interface DiscoverySuccessCallback {
+
+        void onfound(<a href="#Device">Device</a> device);
+
+        void onfinished(<a href="#Device">Device</a>[] foundDevices);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface RemoteAppControlCallback {
+
+        void onsuccess(optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface ConnectSuccessCallback {
+
+        void onsuccess(<a href="#Service">Service</a> service);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationSuccessCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationStartCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationClientListCallback {
+
+        void onsuccess(<a href="#ClientInfo">ClientInfo</a>[] clients);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationListenerCallback {
+
+        void onnotify(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId);
+    };
+};</pre>
+</div>
+<div id="page-footer">
+<div class="copyright" align="center">
+         Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>. <br>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.
+            </div>
+<script type="text/javascript">
+
+              var _gaq = _gaq || [];
+              _gaq.push(['_setAccount', 'UA-25976949-1']);
+              _gaq.push(['_setDomainName', 'tizen.org']);
+              _gaq.push(['_trackPageview']);
+
+              (function() {
+                var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+                ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+                var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+              })();
+
+            </script>
+</div>
+</body>
+</html>
index 8413381..d3d3c26 100644 (file)
 
                 <td>Optional</td>
                 <td>No</td>
+
+                </tr><tr><td>
+                <a href="tizen/convergence.html" data-origin="tizen" data-domain="networking" data-category="core" data-status="D" data-version="">
+                        Convergence</a></td>
+                <td>This API provides interfaces and methods for using Tizen device-to-device convergence services.</td>
+                <td>3.0</td>
+                <td>Optional</td>
+                <td>No</td>
+
                 </tr><tr><td><a href="tizen/nfc.html" data-origin="tizen" data-domain="networking" data-category="core" data-status="D" data-version="">
                         NFC</a></td>
                 <td>This API allows access to NFC device(s).</td>
diff --git a/org.tizen.web.apireference/html/device_api/wearable/tizen/convergence.html b/org.tizen.web.apireference/html/device_api/wearable/tizen/convergence.html
new file mode 100644 (file)
index 0000000..810c477
--- /dev/null
@@ -0,0 +1,3701 @@
+<!DOCTYPE html PUBLIC "html">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+<link rel="stylesheet" type="text/css" href="tizen.css" media="screen">
+<script type="text/javascript" src="snippet.js"></script><title>Convergence API</title>
+</head>
+<body id="page-content" onload="prettyPrint()">
+<div class="api" id="::Convergence">
+<div class="supported-platforms"><img class="wearable-mandatory emulator" title="Mandatory, Supported by Tizen Wearable emulator" src="wearable_s_w.png"></div>
+<div class="title"><h1>Convergence API</h1></div>
+<div class="brief">
+ The Convergence API defines interfaces and methods
+for using Tizen device-to-device convergence services.
+        </div>
+<div class="description">
+        <p>
+The following functionality is provided:
+        </p>
+        <ul>
+          <li>
+Discovering nearby devices which support device-to-device services          </li>
+          <li>
+Getting device and service information          </li>
+          <li>
+Connecting and disconnecting services          </li>
+          <li>
+Starting and stopping services          </li>
+          <li>
+Sending data to services          </li>
+          <li>
+Listening to notifications from the service          </li>
+        </ul>
+        <p>
+The collection of supported device-to-device services includes:
+        </p>
+        <ul>
+          <li>
+<em>Remote App Control Service</em> - Allows launching an application on a remote device.          </li>
+          <li>
+<em>App Communication Service</em> - Allows transferring data between applications on local and remote devices.
+<br>Note that there are 'client' and 'server' implementations of this service which allows easy set-up and
+convenient handling of the data exchange process on both local and remote devices.
+For better flexibility, the data transfer occurs in named user-defined communication channels.          </li>
+        </ul>
+        <p>
+For more information on the Device-to-device Convergence features,
+see the <a href="https://developer.tizen.org/development/guides/web-application/tizen-features/network/convergence">Convergence API Guide</a>.
+        </p>
+        <p>
+Tizen 3.0 only supports Wi-Fi for Convergence services. More connectivity, such as BT/BLE and Wi-Fi Direct, is to be supported in further versions.
+        </p>
+       </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+        </p>
+<h2>Table of Contents</h2>
+<ul class="toc">
+<li>1. <a href="#typedefs-section">Type Definitions</a><ul class="toc">
+<li>
+                    1.1. <a href="#DeviceId">DeviceId</a>
+</li>
+<li>
+                    1.2. <a href="#DeviceProfile">DeviceProfile</a>
+</li>
+<li>
+                    1.3. <a href="#Payload">Payload</a>
+</li>
+<li>
+                    1.4. <a href="#PayloadType">PayloadType</a>
+</li>
+<li>
+                    1.5. <a href="#ConnectionState">ConnectionState</a>
+</li>
+</ul>
+</li>
+<li>2. <a href="#interfaces-section">Interfaces</a><ul class="toc">
+<li>2.1. <a href="#ChannelInfo">ChannelInfo</a>
+</li>
+<li>2.2. <a href="#ConvergenceObject">ConvergenceObject</a>
+</li>
+<li>2.3. <a href="#ConvergenceManager">ConvergenceManager</a>
+</li>
+<li>2.4. <a href="#Device">Device</a>
+</li>
+<li>2.5. <a href="#Service">Service</a>
+</li>
+<li>2.6. <a href="#AppCommunicationService">AppCommunicationService</a>
+</li>
+<li>2.7. <a href="#AppCommunicationClientService">AppCommunicationClientService</a>
+</li>
+<li>2.8. <a href="#AppCommunicationServerService">AppCommunicationServerService</a>
+</li>
+<li>2.9. <a href="#RemoteAppControlService">RemoteAppControlService</a>
+</li>
+<li>2.10. <a href="#PayloadString">PayloadString</a>
+</li>
+<li>2.11. <a href="#PayloadRawBytes">PayloadRawBytes</a>
+</li>
+<li>2.12. <a href="#ClientInfo">ClientInfo</a>
+</li>
+<li>2.13. <a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a>
+</li>
+<li>2.14. <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>
+</li>
+<li>2.15. <a href="#ConnectSuccessCallback">ConnectSuccessCallback</a>
+</li>
+<li>2.16. <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>
+</li>
+<li>2.17. <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a>
+</li>
+<li>2.18. <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a>
+</li>
+<li>2.19. <a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a>
+</li>
+</ul>
+</li>
+<li>3. <a href="#api-features">Related Feature</a>
+</li>
+<li>4. <a href="#full-webidl">Full WebIDL</a>
+</li>
+</ul>
+<hr>
+<h2 id="method-summary">Summary of Interfaces and Methods</h2>
+<table class="informaltable">
+<thead><tr>
+<th>Interface</th>
+<th>Method</th>
+</tr></thead>
+<tbody>
+<tr>
+<td><a href="#ChannelInfo">ChannelInfo</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#ConvergenceObject">ConvergenceObject</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#ConvergenceManager">ConvergenceManager</a></td>
+<td>
+<div>void <a href="#ConvergenceManager::startDiscovery">startDiscovery</a> (<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback, optional unsigned long? timeout)</div>
+<div>void <a href="#ConvergenceManager::stopDiscovery">stopDiscovery</a> ()</div>
+</td>
+</tr>
+<tr>
+<td><a href="#Device">Device</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#Service">Service</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationService">AppCommunicationService</a></td>
+<td>
+<div>void <a href="#AppCommunicationService::start">start</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::getClientList">getClientList</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::send">send</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::stop">stop</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationService::setListener">setListener</a> (<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback)</div>
+<div>void <a href="#AppCommunicationService::unsetListener">unsetListener</a> ()</div>
+</td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationClientService">AppCommunicationClientService</a></td>
+<td>
+<div>void <a href="#AppCommunicationClientService::connect">connect</a> (<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#AppCommunicationClientService::disconnect">disconnect</a> (optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+</td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationServerService">AppCommunicationServerService</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#RemoteAppControlService">RemoteAppControlService</a></td>
+<td>
+<div>void <a href="#RemoteAppControlService::connect">connect</a> (<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#RemoteAppControlService::disconnect">disconnect</a> (optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#RemoteAppControlService::launch">launch</a> (<a href="application.html#ApplicationId">ApplicationId</a> appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+<div>void <a href="#RemoteAppControlService::launchAppControl">launchAppControl</a> (<a href="application.html#ApplicationControl">ApplicationControl</a> appControl, optional <a href="application.html#ApplicationId">ApplicationId</a>? appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback)</div>
+</td>
+</tr>
+<tr>
+<td><a href="#PayloadString">PayloadString</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#PayloadRawBytes">PayloadRawBytes</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#ClientInfo">ClientInfo</a></td>
+<td></td>
+</tr>
+<tr>
+<td><a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a></td>
+<td>
+<div>void <a href="#DiscoverySuccessCallback::onfound">onfound</a> (<a href="#Device">Device</a> device)</div>
+<div>void <a href="#DiscoverySuccessCallback::onfinished">onfinished</a> (<a href="#Device">Device</a>[] foundDevices)</div>
+</td>
+</tr>
+<tr>
+<td><a href="#RemoteAppControlCallback">RemoteAppControlCallback</a></td>
+<td><div>void <a href="#RemoteAppControlCallback::onsuccess">onsuccess</a> (optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data)</div></td>
+</tr>
+<tr>
+<td><a href="#ConnectSuccessCallback">ConnectSuccessCallback</a></td>
+<td><div>void <a href="#ConnectSuccessCallback::onsuccess">onsuccess</a> (<a href="#Service">Service</a> service)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a></td>
+<td><div>void <a href="#AppCommunicationSuccessCallback::onsuccess">onsuccess</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a></td>
+<td><div>void <a href="#AppCommunicationStartCallback::onsuccess">onsuccess</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a></td>
+<td><div>void <a href="#AppCommunicationClientListCallback::onsuccess">onsuccess</a> (<a href="#ClientInfo">ClientInfo</a>[] clients)</div></td>
+</tr>
+<tr>
+<td><a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a></td>
+<td><div>void <a href="#AppCommunicationListenerCallback::onnotify">onnotify</a> (<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId)</div></td>
+</tr>
+</tbody>
+</table>
+<div class="typedefs" id="typedefs-section">
+<h2>1. Type Definitions</h2>
+<div class="typedef" id="DeviceId">
+<a class="backward-compatibility-anchor" name="::Convergence::DeviceId"></a><h3>1.1. DeviceId</h3>
+<div class="brief">
+ The type of the remote device identifier.
+          </div>
+<pre class="webidl prettyprint">    typedef DOMString DeviceId;</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+</div>
+<div class="enum" id="DeviceProfile">
+<a class="backward-compatibility-anchor" name="::Convergence::DeviceProfile"></a><h3>1.2. DeviceProfile</h3>
+<div class="brief">
+ Enumeration of the remote device profile.
+          </div>
+<pre class="webidl prettyprint">    enum DeviceProfile {"MOBILE", "WEARABLE", "TV"};</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+</div>
+<div class="typedef" id="Payload">
+<a class="backward-compatibility-anchor" name="::Convergence::Payload"></a><h3>1.3. Payload</h3>
+<div class="brief">
+ The type of payload item. An item is a key-value pair. The value may be either a string or an array of raw bytes.
+          </div>
+<pre class="webidl prettyprint">    typedef (<a href="#PayloadString">PayloadString</a> or <a href="#PayloadRawBytes">PayloadRawBytes</a>) Payload;</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+</div>
+<div class="enum" id="PayloadType">
+<a class="backward-compatibility-anchor" name="::Convergence::PayloadType"></a><h3>1.4. PayloadType</h3>
+<div class="brief">
+ Enumeration of payload types.
+          </div>
+<pre class="webidl prettyprint">    enum PayloadType{"STRING", "RAW_BYTES"};</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The following values are supported:
+          </p>
+          <ul>
+            <li>
+STRING - The payload key-value value is a string.            </li>
+            <li>
+RAW_BYTES - The payload key-value value is a byte array.            </li>
+          </ul>
+         </div>
+</div>
+<div class="enum" id="ConnectionState">
+<a class="backward-compatibility-anchor" name="::Convergence::ConnectionState"></a><h3>1.5. ConnectionState</h3>
+<div class="brief">
+ Enumeration of service connection states.
+          </div>
+<pre class="webidl prettyprint">    enum ConnectionState{"CONNECTED", "NOT_CONNECTED", "CONNECTING"};</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The following values are supported:
+          </p>
+          <ul>
+            <li>
+CONNECTED - Connected state.             </li>
+            <li>
+DISCONNECTED - Not connected state.             </li>
+            <li>
+CONNECTING - Connecting state.             </li>
+          </ul>
+         </div>
+</div>
+</div>
+<div class="interfaces" id="interfaces-section">
+<h2>2. Interfaces</h2>
+<div class="interface" id="ChannelInfo">
+<a class="backward-compatibility-anchor" name="::Convergence::ChannelInfo"></a><h3>2.1. ChannelInfo</h3>
+<div class="brief">
+ The channel info interface that specifies the server application which a client application wants to connect with.
+          </div>
+<pre class="webidl prettyprint">    [Constructor(DOMString uri, DOMString id)]
+    interface ChannelInfo {
+      attribute DOMString uri;
+      attribute DOMString id;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The channelinfo is composed of a URI and a channel ID which is used in <a href="convergence.html#AppCommunicationService">App Communication</a> services.
+The channelinfo URI is a URI for an application on the server side.
+The channelinfo ID value is defined by the developer.
+          </p>
+         </div>
+<p><span class="remark"> Remark: </span>
+ We assume that the server side app URI is known. For example, either client and server side apps are both developed by the same developer or the server app URI is available from other sources.
+          </p>
+<div class="constructors">
+<h4 id="ChannelInfo::constructor">Constructors</h4>
+<dl>
+<pre class="webidl prettyprint">ChannelInfo(DOMString uri, DOMString id);</pre>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Assume that the "targetApp0.main" application has been installed on remote device */
+var channel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+</pre>
+</div>
+</dl>
+</div>
+<div class="attributes">
+<h4>Attributes</h4>
+<ul>
+<li class="attribute" id="ChannelInfo::uri">
+<span class="attrName"><span class="type">DOMString </span><span class="name">uri</span></span><div class="brief">
+ The uri of the channel.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="ChannelInfo::id">
+<span class="attrName"><span class="type">DOMString </span><span class="name">id</span></span><div class="brief">
+ The identifier of the channel.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+</ul>
+</div>
+</div>
+<div class="interface" id="ConvergenceObject">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceObject"></a><h3>2.2. ConvergenceObject</h3>
+<div class="brief">
+ The <em>ConvergenceObject</em> interface defines what is
+instantiated by the <em>Tizen</em> object from the Tizen platform.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface ConvergenceObject {
+        readonly attribute <a href="#ConvergenceManager">ConvergenceManager</a> convergence;
+    };</pre>
+<pre class="webidl prettyprint">    <a href="tizen.html#Tizen">Tizen</a> implements <a href="#ConvergenceObject">ConvergenceObject</a>;</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The <em>tizen.convergence</em> object allows access to
+Tizen device-to-device convergence API.
+          </p>
+         </div>
+</div>
+<div class="interface" id="ConvergenceManager">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceManager"></a><h3>2.3. ConvergenceManager</h3>
+<div class="brief">
+ The <em>ConvergenceManager</em> interface provides access to the
+<em>convergence</em> object.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface ConvergenceManager {
+
+        void startDiscovery(<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback,
+            optional unsigned long? timeout) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stopDiscovery() raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The device-to-device convergence manager allows discovering available
+nearby devices, which support device-to-device services.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="ConvergenceManager::startDiscovery">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceManager::startDiscovery"></a><code><b><span class="methodName">startDiscovery</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Starts discovery of nearby devices.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void startDiscovery(<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback, optional unsigned long? timeout);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method initiates the device discovery procedure.
+Depending on the progress of this procedure the following methods
+are invoked:
+            </p>
+            <ul>
+              <li>
+<a href="convergence.html#DiscoverySuccessCallback::onfound">onfound()</a> - when a device is found.
+This method is invoked with the device
+information of
+<a href="convergence.html#Device">Device</a> type.
+If no device is found, this method will never be invoked.              </li>
+              <li>
+<a href="convergence.html#DiscoverySuccessCallback::onfinished">onfinished()</a> - when a discovery procedure is finished.
+This method is invoked
+with the list of discovered device information.              </li>
+            </ul>
+            <p>
+The discovery procedure can be canceled anytime, by calling
+<a href="convergence.html#ConvergenceManager::stopDiscovery">stopDiscovery()</a> in
+the <em>ConvergenceManager</em>.
+<br>Note the <a href="convergence.html#DiscoverySuccessCallback::onfinished">onfinished()</a> discovery
+callback will be invoked.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The callback to invoke each time the device is
+found. The callback will be invoked also when the discovery
+procedure has finished.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure of device
+discovery.
+                </li>
+          <li class="param">
+<span class="name">timeout</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ Duration of discovery procedure in seconds. If this
+value is omitted or <em>null</em> is passed, the default timeout
+is 60 seconds.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+discovery procedure has started already.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Handling device discovery results */
+var discoveryCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Do something with the discovered device */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* If desired device is found, stop discovery with following call */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Device discovery has finished');
+&nbsp;&nbsp;&nbsp;}
+};
+
+/* Running device discovery procedure */
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoveryCallback, function(err)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+&nbsp;&nbsp;&nbsp;}, 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ </pre>
+</div>
+</dd>
+<dt class="method" id="ConvergenceManager::stopDiscovery">
+<a class="backward-compatibility-anchor" name="::Convergence::ConvergenceManager::stopDiscovery"></a><code><b><span class="methodName">stopDiscovery</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Stops discovery of nearby devices.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void stopDiscovery();
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method stops an ongoing discovery procedure.
+            </p>
+           </div>
+<p><span class="remark"> Remark: </span>
+ Device discovery is a heavyweight procedure, so it may be
+useful to stop discovery when the required device is found.
+<br>Note this method triggers the <a href="convergence.html#DiscoverySuccessCallback::onfinished">onfinished()</a> discovery
+callback.
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at
+<a href="convergence.html#ConvergenceManager::startDiscovery">startDiscovery()</a> code example.
+            </p>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul><li class="list"><p>
+ with error type InvalidStateError, if the
+discovery procedure has not started yet.
+                </p></li></ul>
+</li></ul>
+        </div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="Device">
+<a class="backward-compatibility-anchor" name="::Convergence::Device"></a><h3>2.4. Device</h3>
+<div class="brief">
+ The <em>Device</em> interface provides access to the remote
+device's properties.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface Device {
+
+        readonly attribute <a href="#DeviceId">DeviceId</a> id;
+
+        readonly attribute DOMString name;
+
+        readonly attribute <a href="#DeviceProfile">DeviceProfile</a> type;
+
+        readonly attribute <a href="#Service">Service</a>[] services;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers access to remote device information, such as the unique
+identifier, name, profile type and list of provided services.
+          </p>
+          <p>
+<br>Note, device ID and device type are defined in the platform, and the developer cannot change it.
+          </p>
+         </div>
+<div class="attributes">
+<h4>Attributes</h4>
+<ul>
+<li class="attribute" id="Device::id">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">DeviceId </span><span class="name">id</span></span><div class="brief">
+ The unique device ID.
+<br>Note the device ID is a unique identifier string, generated with following rule.
+If the Remote Server is installed on the device (e.g. TV),
+then the device ID is assigned by application communication server service.
+Usually it has a format of service name and version. Otherwise (e.g. mobile or wearable),
+the device ID is device MAC address.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="Device::name">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">DOMString </span><span class="name">name</span></span><div class="brief">
+ The device name.
+<br>Note device name is one that is set in the Settings app (Settings&gt;About Devices&gt;Device Name).
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="Device::type">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">DeviceProfile </span><span class="name">type</span></span><div class="brief">
+ The device profile type.
+<br>Note Device type represents the <a href="https://www.tizen.org/about">profile of the device</a>,
+such as “TV”, “Mobile” or “Wearable”.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+<li class="attribute" id="Device::services">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">Service[]
+                      </span><span class="name">services</span></span><div class="brief">
+ The list of services, available on the device.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li>
+</ul>
+</div>
+</div>
+<div class="interface" id="Service">
+<a class="backward-compatibility-anchor" name="::Convergence::Service"></a><h3>2.5. Service</h3>
+<div class="brief">
+ The <em>Service</em> interface is a base interface for all
+device-to-device services.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface Service {
+
+        readonly attribute <a href="#ConnectionState">ConnectionState</a> connectionState;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface defines common property for all device-to-device services
+          </p>
+         </div>
+<div class="attributes">
+<h4>Attributes</h4>
+<ul><li class="attribute" id="Service::connectionState">
+<span class="attrName"><span class="readonly">                readonly
+</span><span class="type">ConnectionState </span><span class="name">connectionState</span></span><div class="brief">
+ The service connection state.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</li></ul>
+</div>
+</div>
+<div class="interface" id="AppCommunicationService">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService"></a><h3>2.6. AppCommunicationService</h3>
+<div class="brief">
+ The <em>AppCommunicationService</em> interface defines the base interface
+of both application communication
+<a href="convergence.html#AppCommunicationClientService">Client</a> and
+<a href="convergence.html#AppCommunicationServerService">Server</a> services
+and specifies common service features, such as start, stop, send, listener etc.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface AppCommunicationService : <a href="#Service">Service</a> {
+
+        void start(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void getClientList(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void send(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#Payload">Payload</a>[] payload,
+            <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stop(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void setListener(<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback)
+            raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void unsetListener();
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+App Communication Service allows transferring data between apps on local and remote devices.
+The App Communication Service relies on a Remote Server. The initialization and execution of a server app
+(the app on the side with the Remote Server, e.g. TV) and a client app (e.g. an app on a mobile or wearable device)
+are slightly different. Furthermore, the client app can remotely launch an app on the server side or connect to an
+already running server app, but the reverse way is impossible. More than one client can be connected to a server app.
+For example, multiple players on mobile devices can connect to a game application on a TV which takes a role of a server.
+Both client and server side apps can send payloads and listen to each other.
+          </p>
+          <p>
+<br>Note there are <a href="convergence.html#AppCommunicationClientService">client</a> and
+<a href="convergence.html#AppCommunicationServerService">server</a> implementations
+of this service for both local and remote devices. For better flexibility, the data transfer occurs in a user-defined
+<a href="convergence.html#ChannelInfo">ChannelInfo</a>.
+          </p>
+          <p>
+These interfaces offer the following service features:
+          </p>
+          <ul>
+            <li>
+Starting and stopping the service            </li>
+            <li>
+Sending payloads to the service            </li>
+            <li>
+Listening to remote service notifications            </li>
+            <li>
+Getting the list of clients that are connected to the service            </li>
+          </ul>
+         </div>
+
+      <div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationService::start">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::start"></a><code><b><span class="methodName">start</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Starts the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void start(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method starts the channel of the service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method for application communication client service, the service must be connected with the
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> method.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelinfo of the service with specified URI and ID.
+<br>Note ChannelInfo in the application communication service specifies a server app which a client wants to connect with.
+ChannelInfo URI is a URI of the server side app, while ChannelInfo ID is a developer-defined value.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is started already. <br>Note some services don't require
+a connection and disconnection procedures.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstarted(channelinfo, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channelinfo.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channelinfo.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+/* Create an instance of application communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel, onstarted, onerror);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstarted(channelinfo, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channelinfo.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channelinfo.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::getClientList">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::getClientList"></a><code><b><span class="methodName">getClientList</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Get the client lists connected to the channel
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void getClientList(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected and
+started with
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> and
+<a href="convergence.html#AppCommunicationService::start">start()</a> methods
+correspondingly.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelinfo of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onsuccess(clientinfolist)
+{
+&nbsp;&nbsp;&nbsp;console.log('get client list');
+&nbsp;&nbsp;&nbsp;for (i in clientinfolist)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfolist[i].isHost);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfolist[i].clientId);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfolist[i].connectionTime);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;service.getClientList(requestChannel, onsuccess, onerror);
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel, onstarted, onerror);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ get client list
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ isHost: false
+ client id: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ connection time: 1420163913807
+ isHost: false
+ client id: c13adb22-5423-22e4-5d8q-adf872d4q889
+ connection time: 1420163913125
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onsuccess(clientinfolist)
+{
+&nbsp;&nbsp;&nbsp;console.log('get client list');
+&nbsp;&nbsp;&nbsp;for (i in clientinfolist)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfolist[i].isHost);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfolist[i].clientId);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfolist[i].connectionTime);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;clientService.getClientList(requestChannel, onsuccess, onerror);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ get client list
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ isHost: false
+ client id: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ connection time: 1420163913807
+ isHost: false
+ client id: c13adb22-5423-22e4-5d8q-adf872d4q889
+ connection time: 1420163913125
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::send">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::send"></a><code><b><span class="methodName">send</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Sends a payload to the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void send(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at
+<a href="convergence.html#AppCommunicationService::start">start()</a> code example.
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected and
+started with
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> and
+<a href="convergence.html#AppCommunicationService::start">start()</a> methods
+correspondingly.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelinfo of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">payload</span>:
+ The payload containing request data.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function sendSuccessCallback(channelinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('requestPayload sent');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by Multi Screen server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;/* Send data to the remote service */
+&nbsp;&nbsp;&nbsp;service.send(channel, requestPayload, sendSuccessCallback, onerror);
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel, onstarted, onerror);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ requestPayload sent
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.Channel('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function sendSuccessCallback(channel)
+{
+&nbsp;&nbsp;&nbsp;console.log('requestPayload sent');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;/* Send data to the remote service */
+&nbsp;&nbsp;&nbsp;clientService.send(channel, requestPayload, sendSuccessCallback, onerror);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = device.service[i];
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ requestPayload sent
+ channel uri: targetApp0.main
+ channel id: chA
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::stop">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::stop"></a><code><b><span class="methodName">stop</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Stops the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void stop(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method stops the specified channel of the service.
+<br>Note When all clients have stopped using the service channel, the server side automatically terminates the application.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channelInfo of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel1 = new tizen.ChannelInfo('targetApp0.main', 'chA');
+var requestChannel2 = new tizen.ChannelInfo('targetApp1.main', 'chB');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstopped(channel)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel stopped');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('clienti id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;if (channel id == 'chB')
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.stop(requestChannel2, onstopped);
+&nbsp;&nbsp;&nbsp;}
+}
+</pre>
+</div>
+
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre>
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+service.start(requestChannel1, onstarted, onerror);
+service.start(requestChannel2, onstarted, onerror);
+Channel started
+channel uri: targetApp0.main
+channel id: chA
+clientinfo
+isHost: true
+clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+connectionTime: 1420163913035
+Channel started
+channel uri: targetApp1.main
+channel id: chB
+clientinfo
+isHost: true
+clientId: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+connectionTime: 1420163913807
+Channel stopped
+channel uri: targetApp1.main
+channel id: chB
+</pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel1 = new tizen.ChannelInfo('targetApp0.main', 'chA');
+var requestChannel2 = new tizen.ChannelInfo('targetApp1.main', 'chB');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onstopped(channel)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel stopped');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+&nbsp;&nbsp;&nbsp;if (channel id == 'chB')
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService.stop(requestChannel2, onstopped);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;clientService = service;
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connectionTime: 1420163913035
+ requestPayload sent
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connectionTime: 1420163913035
+ Channel started
+ channel uri: targetApp1.main
+ channel id: chB
+ clientinfo
+ isHost: false
+ clientId: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ connectionTime: 1420163913807
+ Channel stopped
+ channel uri: targetApp1.main
+ channel id: chB
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::setListener">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::setListener"></a><code><b><span class="methodName">setListener</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Registers the service listener.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void setListener(<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">listenerCallback</span>:
+ The method to invoke when a service
+notification is received.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul><li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li></ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication server service */
+
+var requestChannel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onnotify(channel, payload, senderclientid)
+{
+&nbsp;&nbsp;&nbsp;console.log('On service notification');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;/* clientid of the sender of the payload */
+&nbsp;&nbsp;&nbsp;console.log('client id of sender: ' + senderclientid);
+&nbsp;&nbsp;&nbsp;for (i in payload)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('payload: ' + payload[i].key + '-' + payload[i].value);
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;/* If using unsetListener, unregisters the listener and stops receiving notifications from the service */
+&nbsp;&nbsp;&nbsp;service.unsetListener();
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by Multi Screen server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+/* Create an instance of app communication server service object */
+var service = new tizen.AppCommunicationServerService();
+var service.start(requestChannel, onstarted, onerror);
+/* Register listener to receive notifications from remote service */
+service.setListener(onnotify);
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: true
+ client id: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connection time: 1420163913035
+ On service notification
+ channel uri: targetApp0.main
+ channel id: chA
+ client id of sender: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ payload: msg-hello
+ </pre>
+</div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* App communication client service */
+
+var clientService;
+var requestChannel = new tizen.ChannelInfo('targetApp0.main', 'chA');
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onnotify(channel, payload, senderclientid)
+{
+&nbsp;&nbsp;&nbsp;console.log('On service notification');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;/* clientid of the sender of the payload */
+&nbsp;&nbsp;&nbsp;console.log('client id of sender: ' + senderclientid);
+&nbsp;&nbsp;&nbsp;for (i in payload)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('payload ' + payload[i].key + ': ' + payload[i].value);
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;/* If using unsetListener, unregisters the listener and stops receiving notifications from the service */
+&nbsp;&nbsp;&nbsp;clientService.unsetListener();
+}
+
+function onstarted(channel, clientinfo)
+{
+&nbsp;&nbsp;&nbsp;console.log('Channel started');
+&nbsp;&nbsp;&nbsp;console.log('channel uri: ' + channel.uri);
+&nbsp;&nbsp;&nbsp;console.log('channel id: ' + channel.id);
+&nbsp;&nbsp;&nbsp;console.log('clientinfo');
+&nbsp;&nbsp;&nbsp;console.log('isHost: ' + clientinfo.isHost);
+&nbsp;&nbsp;&nbsp;/* Remote DeviceId generated by remote server */
+&nbsp;&nbsp;&nbsp;console.log('client id: ' + clientinfo.clientId);
+&nbsp;&nbsp;&nbsp;console.log('connection time: ' + clientinfo.connectionTime);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.start(requestChannel, onstarted, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/* Register listener to receive notifications from remote service */
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;service.setListener(onnotify);
+&nbsp;&nbsp;&nbsp;}
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 1
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Channel started
+ channel uri: targetApp0.main
+ channel id: chA
+ clientinfo
+ isHost: false
+ clientId: 2c9f9510-48c2-11e6-b620-abffc41c391f
+ connectionTime: 1420163913035
+ On service notification
+ channel uri: targetApp0.main
+ channel id: chA
+ client id of sender: d6ca19f0-9222-11e4-b829-67c2b8c2d9bc
+ payload: msg-hello
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationService::unsetListener">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationService::unsetListener"></a><code><b><span class="methodName">unsetListener</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Unregisters the service listener.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void unsetListener();
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at
+<a href="convergence.html#AppCommunicationService::setListener">setListener()</a> code example.
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationClientService">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientService"></a><h3>2.7. AppCommunicationClientService</h3>
+<div class="brief">
+ The <em>AppCommunicationClientService</em> interface provides access to
+application communication client service features.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface AppCommunicationClientService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers following service features:
+          </p>
+          <ul>
+            <li>
+Connecting and disconnecting the remote service            </li>
+            <li>
+Reading immediate data of the remote service            </li>
+            <li>
+Listening to remote service update notifications            </li>
+            <li>
+Sending data to the remote service            </li>
+          </ul>
+         </div>
+
+      <div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationClientService::connect">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientService::connect"></a><code><b><span class="methodName">connect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Connects to the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Makes physical connection such as Wi-Fi or Bluetooth to the
+service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<p><span class="remark"> Remark: </span>
+ App developers do not need to specify the connectivity type
+explicitly. The framework automatically determines which connectivity
+to use in a selected service.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is connected already.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;else if (service instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the remote app control service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;service.disconnect();
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Connected to the service
+ Connected to the remote app control service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="AppCommunicationClientService::disconnect">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientService::disconnect"></a><code><b><span class="methodName">disconnect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Disconnects the connected service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Disconnect physical connection with device-to-device service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<p><span class="remark"> Remark: </span>
+ Example of using can be found at <a href="convergence.html#AppCommunicationClientService::connect">connect()</a> code example.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service was not connected yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationServerService">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationServerService"></a><h3>2.8. AppCommunicationServerService</h3>
+<div class="brief">
+ The <em>AppCommunicationServerService</em> interface provides access to
+application communication server service features.
+          </div>
+<pre class="webidl prettyprint">    [Constructor()]
+    interface AppCommunicationServerService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers following service features:
+          </p>
+          <ul>
+            <li>
+Instantiating the service            </li>
+            <li>
+Reading immediate data of the service            </li>
+            <li>
+Listening to service update notifications            </li>
+            <li>
+Sending data for the service            </li>
+          </ul>
+         </div>
+<p><span class="remark"> Remark: </span>
+ application server service is used without discovery phase.
+The developer should instantiate a standalone service object using
+the constructor.
+          </p>
+
+      <div class="constructors">
+<h4 id="AppCommunicationServerService::constructor">Constructors</h4>
+<dl>
+<pre class="webidl prettyprint">AppCommunicationServerService();</pre>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Create an instance of application communication server service object */
+var service = new tizen.AppCommunicationServerService();
+</pre>
+</div>
+</dl>
+</div>
+</div>
+<div class="interface" id="RemoteAppControlService">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService"></a><h3>2.9. RemoteAppControlService</h3>
+<div class="brief">
+ The <em>RemoteAppControlService</em> interface provides access to
+remote application control service features.
+          </div>
+<pre class="webidl prettyprint">    [NoInterfaceObject] interface RemoteAppControlService : <a href="#Service">Service</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launch(<a href="application.html#ApplicationId">ApplicationId</a> appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launchAppControl(<a href="application.html#ApplicationControl">ApplicationControl</a> appControl,
+            optional <a href="application.html#ApplicationId">ApplicationId</a>? appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+This interface offers following device-to-device service features:
+          </p>
+          <ul>
+            <li>
+Connecting and disconnecting the service            </li>
+            <li>
+Sending app control data to the service            </li>
+            <li>
+Receiving app control results            </li>
+          </ul>
+         </div>
+
+      <div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="RemoteAppControlService::connect">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::connect"></a><code><b><span class="methodName">connect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Connects to the service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Makes physical connection such as Wi-Fi or Bluetooth to remote
+device-to-device service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<p><span class="remark"> Remark: </span>
+ App developers do not need to specify the connectivity type
+explicitly. Framework automatically determines which connectivity
+to use in a selected service.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is connected already.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+&nbsp;&nbsp;&nbsp;if (service instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the remote app control service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;else if (service instanceof AppCommunicationClientService))
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Connected to the app communication client service');
+&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;service.disconnect();
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else if (device.services[i] instanceof AppCommunicationClientService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ Connected to the app communication client service
+ Connected to the service
+ Connected to the remote app control service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="RemoteAppControlService::disconnect">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::disconnect"></a><code><b><span class="methodName">disconnect</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Disconnects the connected service.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+Disconnect physical connection with device-to-device service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service was not connected yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function ondisconnected()
+{
+&nbsp;&nbsp;&nbsp;console.log('Disconnected to the service');
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState == "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].disconnect(ondisconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log('Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Disconnected to the service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="RemoteAppControlService::launch">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::launch"></a><code><b><span class="methodName">launch</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Sends the given application ID to launch an application on the remote device.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void launch(<a href="application.html#ApplicationId">ApplicationId</a> appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method sends an application ID to the remote service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+              <li>
+ InvalidValuesError: If any of the input parameters contain an
+invalid value              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected
+with
+<a href="convergence.html#RemoteAppControlService::connect">connect()</a> method
+correspondingly.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">appId</span>:
+ The target app id.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+/* Assume that the "targetApp0.main" application has been installed on remote device */
+var requestAppId = 'targetApp0.main';
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function remoteAppControlCallback(data) 
+{
+&nbsp;&nbsp;&nbsp;console.log('On remote app control service reply');
+&nbsp;&nbsp;&nbsp;console.log('clientId: ' + clientId);
+&nbsp;&nbsp;&nbsp;for (var i = 0; i  data.length; i++)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log("key: " + data[i].key + "value: " + data[i].value[0]);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+
+&nbsp;&nbsp;&nbsp;/* Launching server app remotely */
+&nbsp;&nbsp;&nbsp;service.launch(requestAppId, remoteAppControlCallback, onerror);
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ </pre>
+</div>
+</dd>
+<dt class="method" id="RemoteAppControlService::launchAppControl">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlService::launchAppControl"></a><code><b><span class="methodName">launchAppControl</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Sends an app control to launch an application on the remote device.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void launchAppControl(<a href="application.html#ApplicationControl">ApplicationControl</a> appControl, optional <a href="application.html#ApplicationId">ApplicationId</a>? appId, optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback, optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="description">
+            <p>
+This method sends an app control to the remote service.
+            </p>
+           </div>
+<div class="description">
+            <p>
+The ErrorCallback is launched with these error types:
+            </p>
+            <ul>
+              <li>
+ AbortError: If any system error occurred              </li>
+            </ul>
+           </div>
+<p><span class="privilegelevel">
+            Privilege level: </span>
+ public
+            </p>
+<p><span class="privilege">
+            Privilege: </span>
+ http://tizen.org/privilege/internet <br>http://tizen.org/privilege/bluetooth <br>http://tizen.org/privilege/d2d.datasharing
+            </p>
+<p><span class="remark"> Remark: </span>
+ Before using this method, the service must be connected with
+<a href="convergence.html#RemoteAppControlService::connect">connect()</a> method.
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">appControl</span>:
+ The app control data.
+                </li>
+          <li class="param">
+<span class="name">appId</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The target app id.
+                </li>
+          <li class="param">
+<span class="name">successCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on success.
+                </li>
+          <li class="param">
+<span class="name">errorCallback</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ The method to invoke on failure.
+                </li>
+        </ul>
+</div>
+<div class="exceptionlist">
+<p><span class="except">Exceptions:</span></p>
+          <ul class="exception"><li>WebAPIException<ul>
+<li class="list"><p>
+ with error type TypeMismatchError, if any
+input parameter is not compatible with the expected type for that
+parameter.
+                </p></li>
+<li class="list"><p>
+ with error type SecurityError, if the
+application does not have the privilege to call this method.
+                </p></li>
+<li class="list"><p>
+ with error type InvalidStateError, if the
+service is not started yet.
+                </p></li>
+</ul>
+</li></ul>
+        </div>
+<div class="example">
+<span class="example"><p>Code example:</p></span><pre name="code" class="examplecode prettyprint">
+var requestAppControl = new tizen.ApplicationControl('http://tizen.org/appcontrol/operation/view',
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;null, 'image/jpeg', null,
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[new tizen.ApplicationControlData('images', [testImgData])]);
+
+function onerror(err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+
+function remoteAppControlCallback(data)
+{
+&nbsp;&nbsp;&nbsp;console.log('On remote app control service reply');
+&nbsp;&nbsp;&nbsp;for (var i = 0; i  data.length; i++)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log("key: " + data[i].key + "value: " + data[i].value[0]);
+&nbsp;&nbsp;&nbsp;}
+}
+
+function onconnected(service)
+{
+&nbsp;&nbsp;&nbsp;console.log('Connected to the service');
+
+&nbsp;&nbsp;&nbsp;/* Send data to the remote service */
+&nbsp;&nbsp;&nbsp;service.launchAppControl(requestAppControl, null, remoteAppControlCallback, onerror);
+}
+
+var discoverySuccessCallback =
+{
+&nbsp;&nbsp;&nbsp;onfound: function(device)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Found a device');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - id: " + device.id);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - name: " + device.name);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - type: " + device.type);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - service amount: " + device.services.length);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for (i in device.services)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i] instanceof RemoteAppControlService)
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (device.services[i].connectionState != "CONNECTED")
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;device.services[i].connect(onconnected, onerror);
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tizen.convergence.stopDiscovery();
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
+&nbsp;&nbsp;&nbsp;},
+
+&nbsp;&nbsp;&nbsp;onfinished: function(foundDevices)
+&nbsp;&nbsp;&nbsp;{
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(' Device discovery has finished');
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;console.log(" - devices found: " + foundDevices.length);
+&nbsp;&nbsp;&nbsp;}
+};
+
+try
+{
+&nbsp;&nbsp;&nbsp;console.log('&gt;&gt; STARTING DEVICE DISCOVERY');
+&nbsp;&nbsp;&nbsp;tizen.convergence.startDiscovery(discoverySuccessCallback, onerror, 60 * 60);
+}
+catch (err)
+{
+&nbsp;&nbsp;&nbsp;console.log(err.name + ': ' + err.message);
+}
+</pre>
+</div>
+<div class="output">
+<span class="title"><p>Output example:</p></span><pre> &gt;&gt; STARTING DEVICE DISCOVERY
+ &lt;&lt; Found a device
+  - id: de2bea-ddvia
+  - name: deviceA
+  - type: TV
+  - service amount: 2
+ &lt;&lt; Device discovery has finished
+ Connected to the service
+ </pre>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="dictionary" id="PayloadString">
+<a class="backward-compatibility-anchor" name="::Convergence::PayloadString"></a><h3>2.10. PayloadString</h3>
+<div class="brief">
+ The dictionary that specifies a payload string for the
+device-to-device service.
+          </div>
+<pre class="webidl prettyprint">    dictionary PayloadString {
+        DOMString key;
+
+        DOMString value;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+<em>PayloadString</em> is a key-value pair. Both the key and value are strings.
+          </p>
+         </div>
+<div class="attributes">
+<h4>Dictionary members</h4>
+<dl>
+<dt class="member" id="PayloadString::key"><span class="attrName">DOMString key</span></dt>
+<dd>
+<div class="brief">
+ The name of the payload string.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="PayloadString::value"><span class="attrName">DOMString value</span></dt>
+<dd>
+<div class="brief">
+ The value of the payload string.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="dictionary" id="PayloadRawBytes">
+<a class="backward-compatibility-anchor" name="::Convergence::PayloadRawBytes"></a><h3>2.11. PayloadRawBytes</h3>
+<div class="brief">
+ The dictionary that specifies a raw bytes payload for the
+device-to-device service.
+          </div>
+<pre class="webidl prettyprint">    dictionary PayloadRawBytes {
+        DOMString key;
+
+        byte[] value;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+<em>PayloadRawBytes</em> is a key-value pair. The key is a string and the value is a byte
+array which is to be delivered to a remote service.
+          </p>
+         </div>
+<div class="attributes">
+<h4>Dictionary members</h4>
+<dl>
+<dt class="member" id="PayloadRawBytes::key"><span class="attrName">DOMString key</span></dt>
+<dd>
+<div class="brief">
+ The name of the payload byte array.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="PayloadRawBytes::value"><span class="attrName">byte[] value</span></dt>
+<dd>
+<div class="brief">
+ The bytes of the payload byte array.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="dictionary" id="ClientInfo">
+<a class="backward-compatibility-anchor" name="::Convergence::ClientInfo"></a><h3>2.12. ClientInfo</h3>
+<div class="brief">
+ The dictionary that specifies client information.
+          </div>
+<pre class="webidl prettyprint">    dictionary ClientInfo {
+        boolean isHost;
+
+        DOMString clientId;
+
+        long connectionTime;
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="attributes">
+<h4>Dictionary members</h4>
+<dl>
+<dt class="member" id="ClientInfo::isHost"><span class="attrName">boolean isHost</span></dt>
+<dd>
+<div class="brief">
+ The value indicating if the service is local (true) or
+remote (false).
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="ClientInfo::clientId"><span class="attrName">DOMString clientId</span></dt>
+<dd>
+<div class="brief">
+ The unique client id.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+<dt class="member" id="ClientInfo::connectionTime"><span class="attrName">long connectionTime</span></dt>
+<dd>
+<div class="brief">
+ The connection time in milliseconds.
+            </div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="DiscoverySuccessCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::DiscoverySuccessCallback"></a><h3>2.13. DiscoverySuccessCallback</h3>
+<div class="brief">
+ The <em>DiscoverySuccessCallback</em> interface defines the
+success method for <a href="convergence.html#ConvergenceManager::startDiscovery">startDiscovery()</a>.
+          </div>
+<pre class="webidl prettyprint">    [Callback, NoInterfaceObject] interface DiscoverySuccessCallback {
+
+        void onfound(<a href="#Device">Device</a> device);
+
+        void onfinished(<a href="#Device">Device</a>[] foundDevices);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+Specifies the type of function passed to <em>ConvergenceManager.startDiscovery()</em>.
+Called when device providing device-to-device service is discovered nearby.
+          </p>
+          <p>
+A usage example can be found in the
+<a href="convergence.html#ConvergenceManager::startDiscovery">startDiscovery()</a> code example.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="DiscoverySuccessCallback::onfound">
+<a class="backward-compatibility-anchor" name="::Convergence::DiscoverySuccessCallback::onfound"></a><code><b><span class="methodName">onfound</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when device is discovered during the discovery
+procedure.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onfound(<a href="#Device">Device</a> device);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">device</span>:
+ The discovered remote device.
+                </li>
+        </ul>
+</div>
+</dd>
+<dt class="method" id="DiscoverySuccessCallback::onfinished">
+<a class="backward-compatibility-anchor" name="::Convergence::DiscoverySuccessCallback::onfinished"></a><code><b><span class="methodName">onfinished</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the device discovery procedure has finished.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onfinished(<a href="#Device">Device</a>[] foundDevices);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">foundDevices</span>:
+ Array of devices found in this discovery session.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="RemoteAppControlCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlCallback"></a><h3>2.14. RemoteAppControlCallback</h3>
+<div class="brief">
+ The <em>RemoteAppControlCallback</em> interface defines the
+success method to be invoked when a service sends app control
+successfully.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface RemoteAppControlCallback {
+
+        void onsuccess(optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#RemoteAppControlService::launch">launch()</a> and
+<a href="convergence.html#RemoteAppControlService::launchAppControl">launchAppControl()</a> methods.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="RemoteAppControlCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::RemoteAppControlCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ The RemoteAppControlCallback callback specifies success callbacks that are invoked as a reply
+from the requested application control within the application control requester.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">data</span><span class="optional"> [optional]</span><span class="optional"> [nullable]</span>:
+ An array of ApplicationControlData objects
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="ConnectSuccessCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::ConnectSuccessCallback"></a><h3>2.15. ConnectSuccessCallback</h3>
+<div class="brief">
+ The <em>ConnectSuccessCallback</em> interface defines the success method
+to be invoked when a service is connected.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface ConnectSuccessCallback {
+
+        void onsuccess(<a href="#Service">Service</a> service);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationClientService::connect">connect()</a> and
+<a href="convergence.html#RemoteAppControlService::connect">connect()</a> methods.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="ConnectSuccessCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::ConnectSuccessCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the service connection is established.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#Service">Service</a> service);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">service</span>:
+ The connected service on a remote device.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationSuccessCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationSuccessCallback"></a><h3>2.16. AppCommunicationSuccessCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationSuccessCallback</em> interface defines the success method
+to be invoked when a service operation, such as stop or send is successful.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationSuccessCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationService::stop">stop()</a> or
+<a href="convergence.html#AppCommunicationService::send">send()</a> methods.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationSuccessCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationSuccessCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the service operation is successful.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channel info of the service with specified URI and ID.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationStartCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationStartCallback"></a><h3>2.17. AppCommunicationStartCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationStartCallback</em> interface defines the success method
+to be invoked when a start service operation is successful.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationStartCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationService::start">start()</a> method.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationStartCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationStartCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the start service operation is successful.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channel info of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">clientInfo</span>:
+ The client information.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationClientListCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientListCallback"></a><h3>2.18. AppCommunicationClientListCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationClientListCallback</em> interface defines the
+method to be invoked when requested a list of clients, connected to
+the specified channel of the application communication service.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationClientListCallback {
+
+        void onsuccess(<a href="#ClientInfo">ClientInfo</a>[] clients);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type is invoked in
+<a href="convergence.html#AppCommunicationService::getClientList">getClientList()</a> method.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationClientListCallback::onsuccess">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationClientListCallback::onsuccess"></a><code><b><span class="methodName">onsuccess</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the list of connected clients is requested.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onsuccess(<a href="#ClientInfo">ClientInfo</a>[] clients);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">clients</span>:
+ The list of connected clients.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+<div class="interface" id="AppCommunicationListenerCallback">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationListenerCallback"></a><h3>2.19. AppCommunicationListenerCallback</h3>
+<div class="brief">
+ The <em>AppCommunicationListenerCallback</em> interface defines the
+method to be invoked when a service notification is received
+from the application communication service.
+          </div>
+<pre class="webidl prettyprint">    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationListenerCallback {
+
+        void onnotify(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId);
+    };</pre>
+<p><span class="version">
+            Since: </span>
+ 3.0
+          </p>
+<div class="description">
+          <p>
+The callback of this type can be assigned to the service using the
+<a href="convergence.html#AppCommunicationService::setListener">setListener()</a> method.
+          </p>
+         </div>
+<div class="methods">
+<h4>Methods</h4>
+<dl>
+<dt class="method" id="AppCommunicationListenerCallback::onnotify">
+<a class="backward-compatibility-anchor" name="::Convergence::AppCommunicationListenerCallback::onnotify"></a><code><b><span class="methodName">onnotify</span></b></code>
+</dt>
+<dd>
+<div class="brief">
+ Called when the service channel notification is received.
+            </div>
+<div class="synopsis"><pre class="signature prettyprint">void onnotify(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId);
+             </pre></div>
+<p><span class="version">
+            Since: </span>
+ 3.0
+            </p>
+<div class="parameters">
+<p><span class="param">Parameters:</span></p>
+<ul>
+          <li class="param">
+<span class="name">channelInfo</span>:
+ The channel info of the service with specified URI and ID.
+                </li>
+          <li class="param">
+<span class="name">payload</span>:
+ The payload containing notification data.
+                </li>
+          <li class="param">
+<span class="name">senderClientId</span>:
+ The client id of the sender.
+                </li>
+        </ul>
+</div>
+</dd>
+</dl>
+</div>
+</div>
+</div>
+<h2 id="api-features">3. Related Feature</h2>
+<div id="def-api-features" class="def-api-features">
+        You can check if this API is supported with <em>tizen.systeminfo.getCapability()</em> and decide enable/disable codes that need this API.
+                    <div class="def-api-feature">
+<p><div class="description">
+            <p>
+To guarantee that the application runs on a device with Convergence feature,
+declare the following feature requirements in the config file:
+            </p>
+           </div></p>
+<li class="feature">http://tizen.org/feature/convergence.d2d</li>
+</div>
+<p></p>
+                    For more information, see <a href="../../org.tizen.gettingstarted/html/tizen_overview/application_filtering.htm">Application Filtering</a>.
+</div>
+<h2 id="full-webidl">4. Full WebIDL</h2>
+<pre class="webidl prettyprint">module Convergence {
+
+    typedef DOMString DeviceId;
+
+    enum DeviceProfile {"MOBILE", "WEARABLE", "TV"};
+
+    typedef (<a href="#PayloadString">PayloadString</a> or <a href="#PayloadRawBytes">PayloadRawBytes</a>) Payload;
+
+    enum PayloadType{"STRING", "RAW_BYTES"};
+
+    enum ConnectionState{"CONNECTED", "NOT_CONNECTED", "CONNECTING"};
+
+    [Constructor(DOMString uri, DOMString id)]
+    interface ChannelInfo {
+      attribute DOMString uri;
+      attribute DOMString id;
+    };
+
+    [NoInterfaceObject] interface ConvergenceObject {
+        readonly attribute <a href="#ConvergenceManager">ConvergenceManager</a> convergence;
+    };
+
+    <a href="tizen.html#Tizen">Tizen</a> implements <a href="#ConvergenceObject">ConvergenceObject</a>;
+
+    [NoInterfaceObject] interface ConvergenceManager {
+
+        void startDiscovery(<a href="#DiscoverySuccessCallback">DiscoverySuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback,
+            optional unsigned long? timeout) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stopDiscovery() raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };
+
+    [NoInterfaceObject] interface Device {
+
+        readonly attribute <a href="#DeviceId">DeviceId</a> id;
+
+        readonly attribute DOMString name;
+
+        readonly attribute <a href="#DeviceProfile">DeviceProfile</a> type;
+
+        readonly attribute <a href="#Service">Service</a>[] services;
+    };
+
+    [NoInterfaceObject] interface Service {
+
+        readonly attribute <a href="#ConnectionState">ConnectionState</a> connectionState;
+    };
+
+    [NoInterfaceObject] interface AppCommunicationService : <a href="#Service">Service</a> {
+
+        void start(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationStartCallback">AppCommunicationStartCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void getClientList(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#AppCommunicationClientListCallback">AppCommunicationClientListCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void send(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            <a href="#Payload">Payload</a>[] payload,
+            <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void stop(<a href="#ChannelInfo">ChannelInfo</a> channelInfo,
+            optional <a href="#AppCommunicationSuccessCallback">AppCommunicationSuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void setListener(<a href="#AppCommunicationListenerCallback">AppCommunicationListenerCallback</a> listenerCallback)
+            raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void unsetListener();
+    };
+
+    [NoInterfaceObject] interface AppCommunicationClientService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+    };
+
+
+    [Constructor()]
+    interface AppCommunicationServerService : <a href="#AppCommunicationService">AppCommunicationService</a> {
+    };
+
+    [NoInterfaceObject] interface RemoteAppControlService : <a href="#Service">Service</a> {
+
+        void connect(<a href="#ConnectSuccessCallback">ConnectSuccessCallback</a> successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void disconnect(optional <a href="tizen.html#SuccessCallback">SuccessCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launch(<a href="application.html#ApplicationId">ApplicationId</a> appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+
+        void launchAppControl(<a href="application.html#ApplicationControl">ApplicationControl</a> appControl,
+            optional <a href="application.html#ApplicationId">ApplicationId</a>? appId,
+            optional <a href="#RemoteAppControlCallback">RemoteAppControlCallback</a>? successCallback,
+            optional <a href="tizen.html#ErrorCallback">ErrorCallback</a>? errorCallback) raises(<a href="tizen.html#WebAPIException">WebAPIException</a>);
+    };
+
+    dictionary PayloadString {
+        DOMString key;
+
+        DOMString value;
+    };
+
+    dictionary PayloadRawBytes {
+        DOMString key;
+
+        byte[] value;
+    };
+
+    dictionary ClientInfo {
+        boolean isHost;
+
+        DOMString clientId;
+
+        long connectionTime;
+    };
+
+    [Callback, NoInterfaceObject] interface DiscoverySuccessCallback {
+
+        void onfound(<a href="#Device">Device</a> device);
+
+        void onfinished(<a href="#Device">Device</a>[] foundDevices);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface RemoteAppControlCallback {
+
+        void onsuccess(optional <a href="application.html#ApplicationControlData">ApplicationControlData</a>[]? data);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface ConnectSuccessCallback {
+
+        void onsuccess(<a href="#Service">Service</a> service);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationSuccessCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationStartCallback {
+
+        void onsuccess(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#ClientInfo">ClientInfo</a> clientInfo);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationClientListCallback {
+
+        void onsuccess(<a href="#ClientInfo">ClientInfo</a>[] clients);
+    };
+
+    [Callback=FunctionOnly, NoInterfaceObject] interface AppCommunicationListenerCallback {
+
+        void onnotify(<a href="#ChannelInfo">ChannelInfo</a> channelInfo, <a href="#Payload">Payload</a>[] payload, DOMString senderClientId);
+    };
+};</pre>
+</div>
+<div id="page-footer">
+<div class="copyright" align="center">
+         Except as noted, this content - excluding the Code Examples - is licensed under <a href="http://creativecommons.org/licenses/by/3.0/legalcode" target="_blank">Creative Commons Attribution 3.0</a> and all of the Code Examples contained herein are licensed under <a href="https://www.tizen.org/bsd-3-clause-license" target="_blank">BSD-3-Clause</a>. <br>For details, see the <a href="https://www.tizen.org/content-license" target="_blank">Content License</a>.
+            </div>
+<script type="text/javascript">
+
+              var _gaq = _gaq || [];
+              _gaq.push(['_setAccount', 'UA-25976949-1']);
+              _gaq.push(['_setDomainName', 'tizen.org']);
+              _gaq.push(['_trackPageview']);
+
+              (function() {
+                var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+                ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+                var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+              })();
+
+            </script>
+</div>
+</body>
+</html>
index 211a517..d99f46c 100644 (file)
@@ -56,6 +56,7 @@
                                                <li><a href="device_api/mobile/index.html#Network">Network</a>
                                                        <ul>
                                                                <li><a href="device_api/mobile/tizen/bluetooth.html">Bluetooth</a></li>
+                                                               <li><a href="device_api/mobile/tizen/convergence.html">Convergence</a></li>
                                                                <li><a href="device_api/mobile/tizen/networkbearerselection.html">Network Bearer Selection</a></li>
                                                                <li><a href="device_api/mobile/tizen/nfc.html">NFC</a></li>
                                                                <li><a href="device_api/mobile/tizen/se.html">Secure Element</a></li>
                                                <li><a href="device_api/wearable/index.html#Network">Network</a>
                                                        <ul>
                                                                <li><a href="device_api/wearable/tizen/bluetooth.html">Bluetooth</a></li>
+                                                               <li><a href="device_api/wearable/tizen/convergence.html">Convergence</a></li>
                                                                <li><a href="device_api/wearable/tizen/nfc.html">NFC</a></li>
                                                                <li><a href="device_api/wearable/tizen/se.html">Secure Element</a></li>
                                                        </ul>
                                                                <li><a href="device_api/tv/tizen/exif.html">Exif</a></li>
                                                        </ul>
                                                </li>
+                                               <li><a href="device_api/tv/index.html#Network">Network</a>
+                                                       <ul>
+                                                               <li><a href="device_api/tv/tizen/convergence.html">Convergence</a>
+                                                       </ul>
+                                               </li>
                                                <li><a href="device_api/tv/index.html#Security">Security</a>
                                                        <ul>
                                                                <li><a href="device_api/tv/tizen/keymanager.html">Key Manager</a>