Merge "GATT: Expose opportunistic client API to Java"
This commit is contained in:
@@ -1769,6 +1769,38 @@ public final class BluetoothDevice implements Parcelable {
|
||||
public BluetoothGatt connectGatt(Context context, boolean autoConnect,
|
||||
BluetoothGattCallback callback, int transport, int phy,
|
||||
Handler handler) {
|
||||
return connectGatt(context, autoConnect, callback, transport, false, phy, handler);
|
||||
}
|
||||
|
||||
/**
|
||||
* Connect to GATT Server hosted by this device. Caller acts as GATT client.
|
||||
* The callback is used to deliver results to Caller, such as connection status as well
|
||||
* as any further GATT client operations.
|
||||
* The method returns a BluetoothGatt instance. You can use BluetoothGatt to conduct
|
||||
* GATT client operations.
|
||||
* @param callback GATT callback handler that will receive asynchronous callbacks.
|
||||
* @param autoConnect Whether to directly connect to the remote device (false)
|
||||
* or to automatically connect as soon as the remote
|
||||
* device becomes available (true).
|
||||
* @param transport preferred transport for GATT connections to remote dual-mode devices
|
||||
* {@link BluetoothDevice#TRANSPORT_AUTO} or
|
||||
* {@link BluetoothDevice#TRANSPORT_BREDR} or {@link BluetoothDevice#TRANSPORT_LE}
|
||||
* @param opportunistic Whether this GATT client is opportunistic. An opportunistic GATT client
|
||||
* does not hold a GATT connection. It automatically disconnects when no
|
||||
* other GATT connections are active for the remote device.
|
||||
* @param phy preferred PHY for connections to remote LE device. Bitwise OR of any of
|
||||
* {@link BluetoothDevice#PHY_LE_1M_MASK}, {@link BluetoothDevice#PHY_LE_2M_MASK},
|
||||
* an d{@link BluetoothDevice#PHY_LE_CODED_MASK}. This option does not take effect
|
||||
* if {@code autoConnect} is set to true.
|
||||
* @param handler The handler to use for the callback. If {@code null}, callbacks will happen
|
||||
* on an un-specified background thread.
|
||||
* @return A BluetoothGatt instance. You can use BluetoothGatt to conduct GATT client
|
||||
* operations.
|
||||
* @hide
|
||||
*/
|
||||
public BluetoothGatt connectGatt(Context context, boolean autoConnect,
|
||||
BluetoothGattCallback callback, int transport,
|
||||
boolean opportunistic, int phy, Handler handler) {
|
||||
if (callback == null)
|
||||
throw new NullPointerException("callback is null");
|
||||
|
||||
@@ -1782,7 +1814,7 @@ public final class BluetoothDevice implements Parcelable {
|
||||
// BLE is not supported
|
||||
return null;
|
||||
}
|
||||
BluetoothGatt gatt = new BluetoothGatt(iGatt, this, transport, phy);
|
||||
BluetoothGatt gatt = new BluetoothGatt(iGatt, this, transport, opportunistic, phy);
|
||||
gatt.connect(autoConnect, callback, handler);
|
||||
return gatt;
|
||||
} catch (RemoteException e) {Log.e(TAG, "", e);}
|
||||
|
||||
@@ -53,6 +53,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
private Boolean mDeviceBusy = false;
|
||||
private int mTransport;
|
||||
private int mPhy;
|
||||
private boolean mOpportunistic;
|
||||
|
||||
private static final int AUTH_RETRY_STATE_IDLE = 0;
|
||||
private static final int AUTH_RETRY_STATE_NO_MITM = 1;
|
||||
@@ -172,7 +173,7 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
}
|
||||
try {
|
||||
mService.clientConnect(mClientIf, mDevice.getAddress(),
|
||||
!mAutoConnect, mTransport, mPhy); // autoConnect is inverse of "isDirect"
|
||||
!mAutoConnect, mTransport, mOpportunistic, mPhy); // autoConnect is inverse of "isDirect"
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG,"",e);
|
||||
}
|
||||
@@ -628,11 +629,12 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
};
|
||||
|
||||
/*package*/ BluetoothGatt(IBluetoothGatt iGatt, BluetoothDevice device,
|
||||
int transport, int phy) {
|
||||
int transport, boolean opportunistic, int phy) {
|
||||
mService = iGatt;
|
||||
mDevice = device;
|
||||
mTransport = transport;
|
||||
mPhy = phy;
|
||||
mOpportunistic = opportunistic;
|
||||
mServices = new ArrayList<BluetoothGattService>();
|
||||
|
||||
mConnState = CONN_STATE_IDLE;
|
||||
@@ -839,8 +841,8 @@ public final class BluetoothGatt implements BluetoothProfile {
|
||||
*/
|
||||
public boolean connect() {
|
||||
try {
|
||||
mService.clientConnect(mClientIf, mDevice.getAddress(),
|
||||
false, mTransport, mPhy); // autoConnect is inverse of "isDirect"
|
||||
mService.clientConnect(mClientIf, mDevice.getAddress(), false, mTransport,
|
||||
mOpportunistic, mPhy); // autoConnect is inverse of "isDirect"
|
||||
return true;
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG,"",e);
|
||||
|
||||
@@ -70,7 +70,7 @@ interface IBluetoothGatt {
|
||||
void registerClient(in ParcelUuid appId, in IBluetoothGattCallback callback);
|
||||
|
||||
void unregisterClient(in int clientIf);
|
||||
void clientConnect(in int clientIf, in String address, in boolean isDirect, in int transport, in int phy);
|
||||
void clientConnect(in int clientIf, in String address, in boolean isDirect, in int transport, in boolean opportunistic, in int phy);
|
||||
void clientDisconnect(in int clientIf, in String address);
|
||||
void clientSetPreferredPhy(in int clientIf, in String address, in int txPhy, in int rxPhy, in int phyOptions);
|
||||
void clientReadPhy(in int clientIf, in String address);
|
||||
|
||||
Reference in New Issue
Block a user