Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9582b46a authored by Jakub Pawlowski's avatar Jakub Pawlowski
Browse files

Bluetooth 5 PHY simplification

Having PHY_LE_* constants defined in four different places, with one
value being different than others is misleading. Leave just PHY_LE_*
definitions in BluetoothDevice, and add PHY_LE*_MASK for the mask used
in PHY update API.

This patch also removes need to translate PHY value between PHY update
request and event, as mask is used for request, and the value is
returned in event.

Bug: 30622771
Test: manual
Change-Id: I897effa1204a024465d55501c83c542566c4d37c
parent 6acf2c8b
Loading
Loading
Loading
Loading
+19 −9
Original line number Diff line number Diff line
@@ -593,24 +593,34 @@ public final class BluetoothDevice implements Parcelable {
    public static final int TRANSPORT_LE = 2;

    /**
     * 1M initiating PHY.
     * Bluetooth LE 1M PHY.
     */
    public static final int PHY_LE_1M = 1;

    /**
     * 2M initiating PHY.
     * Bluetooth LE 2M PHY.
     */
    public static final int PHY_LE_2M = 2;

    /**
     * LE Coded initiating PHY.
     * Bluetooth LE Coded PHY.
     */
    public static final int PHY_LE_CODED = 4;
    public static final int PHY_LE_CODED = 3;

    /**
     * Any LE PHY.
     * Bluetooth LE 1M PHY mask.
     */
    public static final int PHY_LE_ANY = PHY_LE_1M | PHY_LE_2M | PHY_LE_CODED;
    public static final int PHY_LE_1M_MASK = 1;

    /**
     * Bluetooth LE 2M PHY mask.
     */
    public static final int PHY_LE_2M_MASK = 2;

    /**
     * Bluetooth LE Coded PHY mask.
     */
    public static final int PHY_LE_CODED_MASK = 4;

    /**
     * No preferred coding when transmitting on the LE Coded PHY.
@@ -1651,7 +1661,7 @@ public final class BluetoothDevice implements Parcelable {
     */
    public BluetoothGatt connectGatt(Context context, boolean autoConnect,
                                     BluetoothGattCallback callback, int transport) {
        return (connectGatt(context, autoConnect,callback, TRANSPORT_AUTO, PHY_LE_1M));
        return (connectGatt(context, autoConnect,callback, TRANSPORT_AUTO, PHY_LE_1M_MASK));
    }

    /**
@@ -1668,8 +1678,8 @@ public final class BluetoothDevice implements Parcelable {
     *             {@link BluetoothDevice#TRANSPORT_AUTO} or
     *             {@link BluetoothDevice#TRANSPORT_BREDR} or {@link BluetoothDevice#TRANSPORT_LE}
     * @param phy preferred PHY for connections to remote LE device. Bitwise OR of any of
     *             {@link BluetoothDevice#PHY_LE_1M}, {@link BluetoothDevice#PHY_LE_2M},
     *             and {@link BluetoothDevice#PHY_LE_CODED}. This option does not take effect if
     *             {@link BluetoothDevice#PHY_LE_1M_MASK}, {@link BluetoothDevice#PHY_LE_2M_MASK},
     *             and {@link BluetoothDevice#PHY_LE_CODED_MASK}. This option does not take effect if
     *             {@code autoConnect} is set to true.
     * @throws IllegalArgumentException if callback is null
     */
+4 −4
Original line number Diff line number Diff line
@@ -785,11 +785,11 @@ public final class BluetoothGatt implements BluetoothProfile {
     * if no PHY change happens. It is also triggered when remote device updates the PHY.
     *
     * @param txPhy preferred transmitter PHY. Bitwise OR of any of
     *             {@link BluetoothDevice#PHY_LE_1M}, {@link BluetoothDevice#PHY_LE_2M}, and
     *             {@link BluetoothDevice#PHY_LE_CODED}.
     *             {@link BluetoothDevice#PHY_LE_1M_MASK}, {@link BluetoothDevice#PHY_LE_2M_MASK},
     *             and {@link BluetoothDevice#PHY_LE_CODED_MASK}.
     * @param rxPhy preferred receiver PHY. Bitwise OR of any of
     *             {@link BluetoothDevice#PHY_LE_1M}, {@link BluetoothDevice#PHY_LE_2M}, and
     *             {@link BluetoothDevice#PHY_LE_CODED}.
     *             {@link BluetoothDevice#PHY_LE_1M_MASK}, {@link BluetoothDevice#PHY_LE_2M_MASK},
     *             and {@link BluetoothDevice#PHY_LE_CODED_MASK}.
     * @param phyOptions preferred coding to use when transmitting on the LE Coded PHY. Can be one
     *             of {@link BluetoothDevice#PHY_OPTION_NO_PREFERRED},
     *             {@link BluetoothDevice#PHY_OPTION_S2} or {@link BluetoothDevice#PHY_OPTION_S8}
+4 −4
Original line number Diff line number Diff line
@@ -558,11 +558,11 @@ public final class BluetoothGattServer implements BluetoothProfile {
     *
     * @param device The remote device to send this response to
     * @param txPhy preferred transmitter PHY. Bitwise OR of any of
     *             {@link BluetoothDevice#PHY_LE_1M}, {@link BluetoothDevice#PHY_LE_2M}, and
     *             {@link BluetoothDevice#PHY_LE_CODED}.
     *             {@link BluetoothDevice#PHY_LE_1M_MASK}, {@link BluetoothDevice#PHY_LE_2M_MASK},
     *             and {@link BluetoothDevice#PHY_LE_CODED_MASK}.
     * @param rxPhy preferred receiver PHY. Bitwise OR of any of
     *             {@link BluetoothDevice#PHY_LE_1M}, {@link BluetoothDevice#PHY_LE_2M}, and
     *             {@link BluetoothDevice#PHY_LE_CODED}.
     *             {@link BluetoothDevice#PHY_LE_1M_MASK}, {@link BluetoothDevice#PHY_LE_2M_MASK},
     *             and {@link BluetoothDevice#PHY_LE_CODED_MASK}.
     * @param phyOptions preferred coding to use when transmitting on the LE Coded PHY. Can be one
     *             of {@link BluetoothDevice#PHY_OPTION_NO_PREFERRED},
     *             {@link BluetoothDevice#PHY_OPTION_S2} or {@link BluetoothDevice#PHY_OPTION_S8}
+13 −25
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.bluetooth.le;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.os.Parcel;
import android.os.Parcelable;

@@ -29,21 +30,6 @@ import android.os.Parcelable;
 */
public final class AdvertisingSetParameters implements Parcelable {

    /**
     * 1M advertiser PHY.
     */
    public static final int PHY_LE_1M = 1;

    /**
     * 2M advertiser PHY.
     */
    public static final int PHY_LE_2M = 2;

    /**
     * LE Coded advertiser PHY.
     */
    public static final int PHY_LE_CODED = 3;

    /**
    * Advertise on low frequency, around every 1000ms. This is the default and
    * preferred advertising mode as it consumes the least power.
@@ -246,8 +232,8 @@ public final class AdvertisingSetParameters implements Parcelable {
        private boolean isLegacy = false;
        private boolean isAnonymous = false;
        private boolean includeTxPower = false;
        private int primaryPhy = PHY_LE_1M;
        private int secondaryPhy = PHY_LE_1M;
        private int primaryPhy = BluetoothDevice.PHY_LE_1M;
        private int secondaryPhy = BluetoothDevice.PHY_LE_1M;
        private int interval = INTERVAL_LOW;
        private int txPowerLevel = TX_POWER_MEDIUM;

@@ -321,12 +307,13 @@ public final class AdvertisingSetParameters implements Parcelable {
         * Use {@link BluetoothAdapter#isLeCodedPhySupported} to determine if LE Coded PHY is
         * supported on this device.
         * @param primaryPhy Primary advertising physical channel, can only be
         *            {@link AdvertisingSetParameters#PHY_LE_1M} or
         *            {@link AdvertisingSetParameters#PHY_LE_CODED}.
         *            {@link BluetoothDevice#PHY_LE_1M} or
         *            {@link BluetoothDevice#PHY_LE_CODED}.
         * @throws IllegalArgumentException If the primaryPhy is invalid.
         */
        public Builder setPrimaryPhy(int primaryPhy) {
            if (primaryPhy != PHY_LE_1M && primaryPhy != PHY_LE_CODED) {
            if (primaryPhy != BluetoothDevice.PHY_LE_1M &&
                primaryPhy != BluetoothDevice.PHY_LE_CODED) {
               throw new IllegalArgumentException("bad primaryPhy " + primaryPhy);
            }
            this.primaryPhy = primaryPhy;
@@ -343,14 +330,15 @@ public final class AdvertisingSetParameters implements Parcelable {
         * supported on this device.
         *
         * @param secondaryPhy Secondary advertising physical channel, can only be
         *            one of {@link AdvertisingSetParameters#PHY_LE_1M},
         *            {@link AdvertisingSetParameters#PHY_LE_2M} or
         *            {@link AdvertisingSetParameters#PHY_LE_CODED}.
         *            one of {@link BluetoothDevice#PHY_LE_1M},
         *            {@link BluetoothDevice#PHY_LE_2M} or
         *            {@link BluetoothDevice#PHY_LE_CODED}.
         * @throws IllegalArgumentException If the secondaryPhy is invalid.
         */
        public Builder setSecondaryPhy(int secondaryPhy) {
            if (secondaryPhy != PHY_LE_1M && secondaryPhy !=PHY_LE_2M &&
                secondaryPhy != PHY_LE_CODED) {
            if (secondaryPhy != BluetoothDevice.PHY_LE_1M &&
                secondaryPhy != BluetoothDevice.PHY_LE_2M &&
                secondaryPhy != BluetoothDevice.PHY_LE_CODED) {
               throw new IllegalArgumentException("bad secondaryPhy " + secondaryPhy);
            }
            this.secondaryPhy = secondaryPhy;
+4 −3
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.bluetooth.le;

import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothGatt;
import android.bluetooth.BluetoothUuid;
import android.bluetooth.IBluetoothGatt;
@@ -363,12 +364,12 @@ public final class BluetoothLeAdvertiser {
            boolean support2MPhy = mBluetoothAdapter.isLe2MPhySupported();
            int pphy = parameters.getPrimaryPhy();
            int sphy = parameters.getSecondaryPhy();
            if (pphy == AdvertisingSetParameters.PHY_LE_CODED && !supportCodedPhy) {
            if (pphy == BluetoothDevice.PHY_LE_CODED && !supportCodedPhy) {
                throw new IllegalArgumentException("Unsupported primary PHY selected");
            }

            if ((sphy == AdvertisingSetParameters.PHY_LE_CODED && !supportCodedPhy)
                || (sphy == AdvertisingSetParameters.PHY_LE_2M && !support2MPhy)) {
            if ((sphy == BluetoothDevice.PHY_LE_CODED && !supportCodedPhy)
                || (sphy == BluetoothDevice.PHY_LE_2M && !support2MPhy)) {
                throw new IllegalArgumentException("Unsupported secondary PHY selected");
            }

Loading