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