/*
* Copyright (C) 2015, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* Binder IPC interface for interacting with Bluetooth GATT server-role
* features.
*/
interface IBluetoothGattServer {
/**
* Registers a client application with this interface. This creates a unique
* GATT server instance for the application that will contain the GATT
* services belonging to the calling application. A special interface ID will
* be returned in a callback to the application that can be used to perform
* GATT server operations. Returns false in case of an error.
*/
boolean registerServer(in IBluetoothGattServerCallback callback);
/**
* Unregisters a previously registered server with interface ID |server_if|.
*/
void unregisterServer(in int server_if);
/**
* Unregisters all previously registered servers.
*/
void unregisterAll();
/**
* Begins a new GATT service declaration. This will execute synchronously and
* create a new service range. This can be followed by calls to populate the
* service range with attributes. The started service won't be published and
* made discoverable to remote devices until a successful call to
* endServiceDeclaration.
*
* The created service will be assigned a unique identifier that can be used
* by the caller to distinguish between different services. This will be
* returned in |out_id| in case of success. Returns false in case of failure,
* e.g. a service declaration is already in progress.
*/
boolean beginServiceDeclaration(in int server_if, in boolean is_primary,
in ParcelUuid uuid,
out GattIdentifier out_id);
/**
* Adds a characteristic entry to a previously started service declaration.
* Returns false in case of failure, e.g. if no service declaration was
* started. Returns the uniquely assigned characteristic identifier in
* |out_id| in the case of success.
*/
boolean addCharacteristic(in int server_if, in ParcelUuid uuid,
in int properties, in int permissions,
out GattIdentifier out_id);
/**
* Adds a characteristic descriptor entry to a previously started service
* declaration. Returns false in case of failure, e.g. if no service
* declaration was started or if the declaration does not contain a
* characteristic that can own this descriptor. Returns the uniquely assigned
* descriptor identifier in |out_id| in the case of success.
*/
boolean addDescriptor(in int server_if, in ParcelUuid uuid,
in int permissions,
out GattIdentifier out_id);
/**
* Ends a previously started service declaration and asynchronously publishes
* the service in the underlying attribute database. Returns false in case of
* an asynchronous failure, e.g. if no service declaration was started or
* there is a pending call to endServiceDeclaration. Otherwise returns true
* and reports the result of the operation asynchronously in
* IBluetoothGattServerCallback.onServiceAdded.
*/
boolean endServiceDeclaration(in int server_if);
/**
* Sends a response to a currently pending read or write request. The request
* will be propagated to the application via IBluetoothGattServerCallback with
* a unique |request_id| which must be passed to this method along with the
* |device_address| of the device that the request originated from.
*
* The |status| field should contain the result of the operation. In the case
* of success, the application should pass in "0". Otherwise this should
* contain an ATT protocol error code.
*/
boolean sendResponse(in int server_if, in String device_address,
in int request_id, in int status,
in int offset, in byte[] value);
/**
* Sends a handle-value notification or indication to the device with the
* given address for the characteristic with the given identifier. |confirm|
* should be set to true, if a handle-value indication should be sent, which
* will remain pending until the remote device sends a handle-value
* confirmation. Returns false if a call to this method is pending. Otherwise
* reports the result asynchronously in
* IBluetoothGattServerCallback.onNotificationSent.
*/
boolean sendNotification(in int server_if, in String device_address,
in GattIdentifier characteristic_id,
in boolean confirm, in byte[] value);
}