1/*
2 * Copyright 2015, The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *     http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17/**
18 * Binder IPC interface for interacting with Bluetooth GATT server-role
19 * features.
20 */
21interface IBluetoothGattServer {
22  /**
23   * Registers a client application with this interface. This creates a unique
24   * GATT server instance for the application that will contain the GATT
25   * services belonging to the calling application. A special interface ID will
26   * be returned in a callback to the application that can be used to perform
27   * GATT server operations. Returns false in case of an error.
28   */
29  boolean registerServer(in IBluetoothGattServerCallback callback);
30
31  /**
32   * Unregisters a previously registered server with interface ID |server_if|.
33   */
34  void unregisterServer(in int server_if);
35
36  /**
37   * Unregisters all previously registered servers.
38   */
39  void unregisterAll();
40
41  /**
42   * Adds new GATT service. This will execute synchronously, and result in
43   * IBluetoothGattServerCallback.onServiceAdded.
44   *
45   * Returns true on success, false otherwise.
46   */
47  boolean AddService(int server_id, in BluetoothGattService service);
48
49  /**
50   * Sends a response to a currently pending read or write request. The request
51   * will be propagated to the application via IBluetoothGattServerCallback with
52   * a unique |request_id| which must be passed to this method along with the
53   * |device_address| of the device that the request originated from.
54   *
55   * The |status| field should contain the result of the operation. In the case
56   * of success, the application should pass in "0". Otherwise this should
57   * contain an ATT protocol error code.
58   */
59  boolean sendResponse(in int server_if, in String device_address,
60                       in int request_id, in int status,
61                       in int offset, in byte[] value);
62
63  /**
64   * Sends a handle-value notification or indication to the device with the
65   * given address for the characteristic with the given handle. |confirm|
66   * should be set to true, if a handle-value indication should be sent, which
67   * will remain pending until the remote device sends a handle-value
68   * confirmation. Returns false if a call to this method is pending. Otherwise
69   * reports the result asynchronously in
70   * IBluetoothGattServerCallback.onNotificationSent.
71   */
72  boolean sendNotification(in int server_if, in String device_address,
73                           in int handle,
74                           in boolean confirm, in byte[] value);
75}
76