1 /*
2  * Copyright 2013 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 package android.bluetooth;
18 
19 import android.app.PendingIntent;
20 import android.bluetooth.BluetoothDevice;
21 import android.bluetooth.BluetoothGattService;
22 import android.bluetooth.le.AdvertiseSettings;
23 import android.bluetooth.le.AdvertiseData;
24 import android.bluetooth.le.AdvertisingSetParameters;
25 import android.bluetooth.le.PeriodicAdvertisingParameters;
26 import android.bluetooth.le.ScanFilter;
27 import android.bluetooth.le.ScanResult;
28 import android.bluetooth.le.ScanSettings;
29 import android.bluetooth.le.ResultStorageDescriptor;
30 import android.content.AttributionSource;
31 import android.os.ParcelUuid;
32 import android.os.WorkSource;
33 
34 import android.bluetooth.IBluetoothGattCallback;
35 import android.bluetooth.IBluetoothGattServerCallback;
36 import android.bluetooth.le.IAdvertisingSetCallback;
37 import android.bluetooth.le.IPeriodicAdvertisingCallback;
38 import android.bluetooth.le.IScannerCallback;
39 
40 /**
41  * API for interacting with BLE / GATT
42  * @hide
43  */
44 interface IBluetoothGatt {
45     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
getDevicesMatchingConnectionStates(in int[] states, in AttributionSource attributionSource)46     List<BluetoothDevice> getDevicesMatchingConnectionStates(in int[] states, in AttributionSource attributionSource);
47 
48     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
registerScanner(in IScannerCallback callback, in WorkSource workSource, in AttributionSource attributionSource)49     void registerScanner(in IScannerCallback callback, in WorkSource workSource, in AttributionSource attributionSource);
50     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
unregisterScanner(in int scannerId, in AttributionSource attributionSource)51     void unregisterScanner(in int scannerId, in AttributionSource attributionSource);
52     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
startScan(in int scannerId, in ScanSettings settings, in List<ScanFilter> filters, in List scanStorages, in AttributionSource attributionSource)53     void startScan(in int scannerId, in ScanSettings settings, in List<ScanFilter> filters,
54                    in List scanStorages, in AttributionSource attributionSource);
55     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
startScanForIntent(in PendingIntent intent, in ScanSettings settings, in List<ScanFilter> filters, in AttributionSource attributionSource)56     void startScanForIntent(in PendingIntent intent, in ScanSettings settings, in List<ScanFilter> filters,
57                             in AttributionSource attributionSource);
58     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
stopScanForIntent(in PendingIntent intent, in AttributionSource attributionSource)59     void stopScanForIntent(in PendingIntent intent, in AttributionSource attributionSource);
60     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
stopScan(in int scannerId, in AttributionSource attributionSource)61     void stopScan(in int scannerId, in AttributionSource attributionSource);
62     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
flushPendingBatchResults(in int scannerId, in AttributionSource attributionSource)63     void flushPendingBatchResults(in int scannerId, in AttributionSource attributionSource);
64 
65     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
startAdvertisingSet(in AdvertisingSetParameters parameters, in AdvertiseData advertiseData, in AdvertiseData scanResponse, in PeriodicAdvertisingParameters periodicParameters, in AdvertiseData periodicData, in int duration, in int maxExtAdvEvents, in IAdvertisingSetCallback callback, in AttributionSource attributionSource)66     void startAdvertisingSet(in AdvertisingSetParameters parameters, in AdvertiseData advertiseData,
67                                 in AdvertiseData scanResponse, in PeriodicAdvertisingParameters periodicParameters,
68                                 in AdvertiseData periodicData, in int duration, in int maxExtAdvEvents,
69                                 in IAdvertisingSetCallback callback, in AttributionSource attributionSource);
70     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
stopAdvertisingSet(in IAdvertisingSetCallback callback, in AttributionSource attributionSource)71     void stopAdvertisingSet(in IAdvertisingSetCallback callback, in AttributionSource attributionSource);
72 
73     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(allOf={android.Manifest.permission.BLUETOOTH_ADVERTISE,android.Manifest.permission.BLUETOOTH_PRIVILEGED})")
getOwnAddress(in int advertiserId, in AttributionSource attributionSource)74     void getOwnAddress(in int advertiserId, in AttributionSource attributionSource);
75     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
enableAdvertisingSet(in int advertiserId, in boolean enable, in int duration, in int maxExtAdvEvents, in AttributionSource attributionSource)76     void enableAdvertisingSet(in int advertiserId, in boolean enable, in int duration, in int maxExtAdvEvents, in AttributionSource attributionSource);
77     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
setAdvertisingData(in int advertiserId, in AdvertiseData data, in AttributionSource attributionSource)78     void setAdvertisingData(in int advertiserId, in AdvertiseData data, in AttributionSource attributionSource);
79     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
setScanResponseData(in int advertiserId, in AdvertiseData data, in AttributionSource attributionSource)80     void setScanResponseData(in int advertiserId, in AdvertiseData data, in AttributionSource attributionSource);
81     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
setAdvertisingParameters(in int advertiserId, in AdvertisingSetParameters parameters, in AttributionSource attributionSource)82     void setAdvertisingParameters(in int advertiserId, in AdvertisingSetParameters parameters, in AttributionSource attributionSource);
83     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
setPeriodicAdvertisingParameters(in int advertiserId, in PeriodicAdvertisingParameters parameters, in AttributionSource attributionSource)84     void setPeriodicAdvertisingParameters(in int advertiserId, in PeriodicAdvertisingParameters parameters, in AttributionSource attributionSource);
85     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
setPeriodicAdvertisingData(in int advertiserId, in AdvertiseData data, in AttributionSource attributionSource)86     void setPeriodicAdvertisingData(in int advertiserId, in AdvertiseData data, in AttributionSource attributionSource);
87     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_ADVERTISE)")
setPeriodicAdvertisingEnable(in int advertiserId, in boolean enable, in AttributionSource attributionSource)88     void setPeriodicAdvertisingEnable(in int advertiserId, in boolean enable, in AttributionSource attributionSource);
89 
90     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
registerSync(in ScanResult scanResult, in int skip, in int timeout, in IPeriodicAdvertisingCallback callback, in AttributionSource attributionSource)91     void registerSync(in ScanResult scanResult, in int skip, in int timeout, in IPeriodicAdvertisingCallback callback, in AttributionSource attributionSource);
92     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_SCAN)")
unregisterSync(in IPeriodicAdvertisingCallback callback, in AttributionSource attributionSource)93     void unregisterSync(in IPeriodicAdvertisingCallback callback, in AttributionSource attributionSource);
94 
95     @UnsupportedAppUsage
96     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
registerClient(in ParcelUuid appId, in IBluetoothGattCallback callback, boolean eatt_support, in AttributionSource attributionSource)97     void registerClient(in ParcelUuid appId, in IBluetoothGattCallback callback, boolean eatt_support, in AttributionSource attributionSource);
98 
99     @UnsupportedAppUsage
100     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
unregisterClient(in int clientIf, in AttributionSource attributionSource)101     void unregisterClient(in int clientIf, in AttributionSource attributionSource);
102     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
clientConnect(in int clientIf, in String address, in boolean isDirect, in int transport, in boolean opportunistic, in int phy, in AttributionSource attributionSource)103     void clientConnect(in int clientIf, in String address, in boolean isDirect, in int transport, in boolean opportunistic, in int phy, in AttributionSource attributionSource);
104     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
clientDisconnect(in int clientIf, in String address, in AttributionSource attributionSource)105     void clientDisconnect(in int clientIf, in String address, in AttributionSource attributionSource);
106     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
clientSetPreferredPhy(in int clientIf, in String address, in int txPhy, in int rxPhy, in int phyOptions, in AttributionSource attributionSource)107     void clientSetPreferredPhy(in int clientIf, in String address, in int txPhy, in int rxPhy, in int phyOptions, in AttributionSource attributionSource);
108     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
clientReadPhy(in int clientIf, in String addres, in AttributionSource attributionSources)109     void clientReadPhy(in int clientIf, in String addres, in AttributionSource attributionSources);
110     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
refreshDevice(in int clientIf, in String address, in AttributionSource attributionSource)111     void refreshDevice(in int clientIf, in String address, in AttributionSource attributionSource);
112     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
discoverServices(in int clientIf, in String address, in AttributionSource attributionSource)113     void discoverServices(in int clientIf, in String address, in AttributionSource attributionSource);
114     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
discoverServiceByUuid(in int clientIf, in String address, in ParcelUuid uuid, in AttributionSource attributionSource)115     void discoverServiceByUuid(in int clientIf, in String address, in ParcelUuid uuid, in AttributionSource attributionSource);
116     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
readCharacteristic(in int clientIf, in String address, in int handle, in int authReq, in AttributionSource attributionSource)117     void readCharacteristic(in int clientIf, in String address, in int handle, in int authReq, in AttributionSource attributionSource);
118     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
readUsingCharacteristicUuid(in int clientIf, in String address, in ParcelUuid uuid, in int startHandle, in int endHandle, in int authReq, in AttributionSource attributionSource)119     void readUsingCharacteristicUuid(in int clientIf, in String address, in ParcelUuid uuid,
120                            in int startHandle, in int endHandle, in int authReq, in AttributionSource attributionSource);
121     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
writeCharacteristic(in int clientIf, in String address, in int handle, in int writeType, in int authReq, in byte[] value, in AttributionSource attributionSource)122     void writeCharacteristic(in int clientIf, in String address, in int handle,
123                             in int writeType, in int authReq, in byte[] value, in AttributionSource attributionSource);
124     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
readDescriptor(in int clientIf, in String address, in int handle, in int authReq, in AttributionSource attributionSource)125     void readDescriptor(in int clientIf, in String address, in int handle, in int authReq, in AttributionSource attributionSource);
126     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
writeDescriptor(in int clientIf, in String address, in int handle, in int authReq, in byte[] value, in AttributionSource attributionSource)127     void writeDescriptor(in int clientIf, in String address, in int handle,
128                             in int authReq, in byte[] value, in AttributionSource attributionSource);
129     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
registerForNotification(in int clientIf, in String address, in int handle, in boolean enable, in AttributionSource attributionSource)130     void registerForNotification(in int clientIf, in String address, in int handle, in boolean enable, in AttributionSource attributionSource);
131     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
beginReliableWrite(in int clientIf, in String address, in AttributionSource attributionSource)132     void beginReliableWrite(in int clientIf, in String address, in AttributionSource attributionSource);
133     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
endReliableWrite(in int clientIf, in String address, in boolean execute, in AttributionSource attributionSource)134     void endReliableWrite(in int clientIf, in String address, in boolean execute, in AttributionSource attributionSource);
135     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
readRemoteRssi(in int clientIf, in String address, in AttributionSource attributionSource)136     void readRemoteRssi(in int clientIf, in String address, in AttributionSource attributionSource);
137     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
configureMTU(in int clientIf, in String address, in int mtu, in AttributionSource attributionSource)138     void configureMTU(in int clientIf, in String address, in int mtu, in AttributionSource attributionSource);
139     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
connectionParameterUpdate(in int clientIf, in String address, in int connectionPriority, in AttributionSource attributionSource)140     void connectionParameterUpdate(in int clientIf, in String address, in int connectionPriority, in AttributionSource attributionSource);
141     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
leConnectionUpdate(int clientIf, String address, int minInterval, int maxInterval, int peripheralLatency, int supervisionTimeout, int minConnectionEventLen, int maxConnectionEventLen, in AttributionSource attributionSource)142     void leConnectionUpdate(int clientIf, String address, int minInterval,
143                             int maxInterval, int peripheralLatency, int supervisionTimeout,
144                             int minConnectionEventLen, int maxConnectionEventLen, in AttributionSource attributionSource);
145 
146     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
registerServer(in ParcelUuid appId, in IBluetoothGattServerCallback callback, boolean eatt_support, in AttributionSource attributionSource)147     void registerServer(in ParcelUuid appId, in IBluetoothGattServerCallback callback, boolean eatt_support, in AttributionSource attributionSource);
148     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
unregisterServer(in int serverIf, in AttributionSource attributionSource)149     void unregisterServer(in int serverIf, in AttributionSource attributionSource);
150     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
serverConnect(in int serverIf, in String address, in boolean isDirect, in int transport, in AttributionSource attributionSource)151     void serverConnect(in int serverIf, in String address, in boolean isDirect, in int transport, in AttributionSource attributionSource);
152     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
serverDisconnect(in int serverIf, in String address, in AttributionSource attributionSource)153     void serverDisconnect(in int serverIf, in String address, in AttributionSource attributionSource);
154     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
serverSetPreferredPhy(in int clientIf, in String address, in int txPhy, in int rxPhy, in int phyOptions, in AttributionSource attributionSource)155     void serverSetPreferredPhy(in int clientIf, in String address, in int txPhy, in int rxPhy, in int phyOptions, in AttributionSource attributionSource);
156     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
serverReadPhy(in int clientIf, in String address, in AttributionSource attributionSource)157     void serverReadPhy(in int clientIf, in String address, in AttributionSource attributionSource);
158     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
addService(in int serverIf, in BluetoothGattService service, in AttributionSource attributionSource)159     void addService(in int serverIf, in BluetoothGattService service, in AttributionSource attributionSource);
160     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
removeService(in int serverIf, in int handle, in AttributionSource attributionSource)161     void removeService(in int serverIf, in int handle, in AttributionSource attributionSource);
162     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
clearServices(in int serverIf, in AttributionSource attributionSource)163     void clearServices(in int serverIf, in AttributionSource attributionSource);
164     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
sendResponse(in int serverIf, in String address, in int requestId, in int status, in int offset, in byte[] value, in AttributionSource attributionSource)165     void sendResponse(in int serverIf, in String address, in int requestId,
166                             in int status, in int offset, in byte[] value, in AttributionSource attributionSource);
167     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
sendNotification(in int serverIf, in String address, in int handle, in boolean confirm, in byte[] value, in AttributionSource attributionSource)168     void sendNotification(in int serverIf, in String address, in int handle,
169                             in boolean confirm, in byte[] value, in AttributionSource attributionSource);
170     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
disconnectAll(in AttributionSource attributionSource)171     void disconnectAll(in AttributionSource attributionSource);
172     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
unregAll(in AttributionSource attributionSource)173     void unregAll(in AttributionSource attributionSource);
174     @JavaPassthrough(annotation="@android.annotation.RequiresPermission(android.Manifest.permission.BLUETOOTH_CONNECT)")
numHwTrackFiltersAvailable(in AttributionSource attributionSource)175     int numHwTrackFiltersAvailable(in AttributionSource attributionSource);
176 }
177