16d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang/*
26d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Copyright (C) 2014 The Android Open Source Project
36d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang *
46d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Licensed under the Apache License, Version 2.0 (the "License");
56d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * you may not use this file except in compliance with the License.
66d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * You may obtain a copy of the License at
76d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang *
86d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang *      http://www.apache.org/licenses/LICENSE-2.0
96d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang *
106d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * Unless required by applicable law or agreed to in writing, software
116d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * distributed under the License is distributed on an "AS IS" BASIS,
126d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * See the License for the specific language governing permissions and
146d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * limitations under the License.
156d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */
166d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
176d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangpackage android.bluetooth.le;
186d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
196d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangimport android.os.Parcel;
206d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangimport android.os.Parcelable;
216d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
226d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang/**
236d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang * The {@link AdvertiseSettings} provide a way to adjust advertising preferences for each
24af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang * Bluetooth LE advertisement instance. Use {@link AdvertiseSettings.Builder} to create an
25af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang * instance of this class.
266d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang */
276d81118032b92caa0f5cfebe11af02a98f819d5eWei Wangpublic final class AdvertiseSettings implements Parcelable {
286d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
296d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     * Perform Bluetooth LE advertising in low power mode. This is the default and preferred
306d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     * advertising mode as it consumes the least power.
316d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
326d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public static final int ADVERTISE_MODE_LOW_POWER = 0;
33af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang
346d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
356d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     * Perform Bluetooth LE advertising in balanced power mode. This is balanced between advertising
366d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     * frequency and power consumption.
376d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
386d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public static final int ADVERTISE_MODE_BALANCED = 1;
39af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang
406d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
416d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     * Perform Bluetooth LE advertising in low latency, high power mode. This has the highest power
42af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang     * consumption and should not be used for continuous background advertising.
436d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
446d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public static final int ADVERTISE_MODE_LOW_LATENCY = 2;
456d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
466d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
47af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang     * Advertise using the lowest transmission (TX) power level. Low transmission power can be used
48af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang     * to restrict the visibility range of advertising packets.
496d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
506d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public static final int ADVERTISE_TX_POWER_ULTRA_LOW = 0;
51af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang
526d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
53af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang     * Advertise using low TX power level.
546d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
556d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public static final int ADVERTISE_TX_POWER_LOW = 1;
56af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang
576d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
58af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang     * Advertise using medium TX power level.
596d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
606d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public static final int ADVERTISE_TX_POWER_MEDIUM = 2;
61af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang
626d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
63af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang     * Advertise using high TX power level. This corresponds to largest visibility range of the
646d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     * advertising packet.
656d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
666d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public static final int ADVERTISE_TX_POWER_HIGH = 3;
676d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
686d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
699960b576533041d07b141008c5925dcecb8c9224Wei Wang     * The maximum limited advertisement duration as specified by the Bluetooth SIG
706d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
719960b576533041d07b141008c5925dcecb8c9224Wei Wang    private static final int LIMITED_ADVERTISING_MAX_MILLIS = 180 * 1000;
726d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
736d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    private final int mAdvertiseMode;
746d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    private final int mAdvertiseTxPowerLevel;
759960b576533041d07b141008c5925dcecb8c9224Wei Wang    private final int mAdvertiseTimeoutMillis;
76af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang    private final boolean mAdvertiseConnectable;
776d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
786d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    private AdvertiseSettings(int advertiseMode, int advertiseTxPowerLevel,
79af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang            boolean advertiseConnectable, int advertiseTimeout) {
806d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        mAdvertiseMode = advertiseMode;
816d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        mAdvertiseTxPowerLevel = advertiseTxPowerLevel;
82af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        mAdvertiseConnectable = advertiseConnectable;
839960b576533041d07b141008c5925dcecb8c9224Wei Wang        mAdvertiseTimeoutMillis = advertiseTimeout;
846d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    }
856d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
866d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    private AdvertiseSettings(Parcel in) {
876d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        mAdvertiseMode = in.readInt();
886d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        mAdvertiseTxPowerLevel = in.readInt();
89af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        mAdvertiseConnectable = in.readInt() != 0 ? true : false;
909960b576533041d07b141008c5925dcecb8c9224Wei Wang        mAdvertiseTimeoutMillis = in.readInt();
916d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    }
926d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
936d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
946d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     * Returns the advertise mode.
956d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
966d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public int getMode() {
976d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        return mAdvertiseMode;
986d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    }
996d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1006d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
101af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang     * Returns the TX power level for advertising.
1026d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
1036d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public int getTxPowerLevel() {
1046d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        return mAdvertiseTxPowerLevel;
1056d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    }
1066d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1076d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
108af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang     * Returns whether the advertisement will indicate connectable.
1096d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
1109960b576533041d07b141008c5925dcecb8c9224Wei Wang    public boolean isConnectable() {
111af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        return mAdvertiseConnectable;
112af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang    }
113af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang
114af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang    /**
1159960b576533041d07b141008c5925dcecb8c9224Wei Wang     * Returns the advertising time limit in milliseconds.
116af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang     */
117af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang    public int getTimeout() {
1189960b576533041d07b141008c5925dcecb8c9224Wei Wang        return mAdvertiseTimeoutMillis;
1196d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    }
1206d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1216d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    @Override
1226d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public String toString() {
123af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        return "Settings [mAdvertiseMode=" + mAdvertiseMode
124af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang             + ", mAdvertiseTxPowerLevel=" + mAdvertiseTxPowerLevel
125af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang             + ", mAdvertiseConnectable=" + mAdvertiseConnectable
1269960b576533041d07b141008c5925dcecb8c9224Wei Wang             + ", mAdvertiseTimeoutMillis=" + mAdvertiseTimeoutMillis + "]";
1276d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    }
1286d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1296d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    @Override
1306d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public int describeContents() {
1316d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        return 0;
1326d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    }
1336d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1346d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    @Override
1356d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public void writeToParcel(Parcel dest, int flags) {
1366d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        dest.writeInt(mAdvertiseMode);
1376d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        dest.writeInt(mAdvertiseTxPowerLevel);
138af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        dest.writeInt(mAdvertiseConnectable ? 1 : 0);
1399960b576533041d07b141008c5925dcecb8c9224Wei Wang        dest.writeInt(mAdvertiseTimeoutMillis);
1406d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    }
1416d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1426d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public static final Parcelable.Creator<AdvertiseSettings> CREATOR =
1436d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            new Creator<AdvertiseSettings>() {
1446d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            @Override
1456d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                public AdvertiseSettings[] newArray(int size) {
1466d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                    return new AdvertiseSettings[size];
1476d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                }
1486d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1496d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            @Override
1506d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                public AdvertiseSettings createFromParcel(Parcel in) {
1516d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                    return new AdvertiseSettings(in);
1526d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                }
1536d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            };
1546d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1556d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    /**
1566d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     * Builder class for {@link AdvertiseSettings}.
1576d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang     */
1586d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    public static final class Builder {
1596d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        private int mMode = ADVERTISE_MODE_LOW_POWER;
1606d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        private int mTxPowerLevel = ADVERTISE_TX_POWER_MEDIUM;
1619960b576533041d07b141008c5925dcecb8c9224Wei Wang        private int mTimeoutMillis = 0;
162af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        private boolean mConnectable = true;
1636d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1646d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        /**
1656d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         * Set advertise mode to control the advertising power and latency.
1666d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *
1676d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         * @param advertiseMode Bluetooth LE Advertising mode, can only be one of
1686d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *            {@link AdvertiseSettings#ADVERTISE_MODE_LOW_POWER},
1696d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *            {@link AdvertiseSettings#ADVERTISE_MODE_BALANCED}, or
1706d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *            {@link AdvertiseSettings#ADVERTISE_MODE_LOW_LATENCY}.
1716d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         * @throws IllegalArgumentException If the advertiseMode is invalid.
1726d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         */
1736d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        public Builder setAdvertiseMode(int advertiseMode) {
1746d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            if (advertiseMode < ADVERTISE_MODE_LOW_POWER
1756d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                    || advertiseMode > ADVERTISE_MODE_LOW_LATENCY) {
1766d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                throw new IllegalArgumentException("unknown mode " + advertiseMode);
1776d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            }
1786d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            mMode = advertiseMode;
1796d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            return this;
1806d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        }
1816d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
1826d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        /**
183af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang         * Set advertise TX power level to control the transmission power level for the advertising.
1846d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *
1856d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         * @param txPowerLevel Transmission power of Bluetooth LE Advertising, can only be one of
1866d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *            {@link AdvertiseSettings#ADVERTISE_TX_POWER_ULTRA_LOW},
1876d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *            {@link AdvertiseSettings#ADVERTISE_TX_POWER_LOW},
1886d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *            {@link AdvertiseSettings#ADVERTISE_TX_POWER_MEDIUM} or
1896d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *            {@link AdvertiseSettings#ADVERTISE_TX_POWER_HIGH}.
1906d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         * @throws IllegalArgumentException If the {@code txPowerLevel} is invalid.
1916d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         */
1926d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        public Builder setTxPowerLevel(int txPowerLevel) {
1936d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            if (txPowerLevel < ADVERTISE_TX_POWER_ULTRA_LOW
1946d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                    || txPowerLevel > ADVERTISE_TX_POWER_HIGH) {
1956d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang                throw new IllegalArgumentException("unknown tx power level " + txPowerLevel);
1966d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            }
1976d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            mTxPowerLevel = txPowerLevel;
1986d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            return this;
1996d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        }
2006d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
2016d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        /**
202af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang         * Set whether the advertisement type should be connectable or non-connectable.
2036d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         *
2049960b576533041d07b141008c5925dcecb8c9224Wei Wang         * @param connectable Controls whether the advertisment type will be connectable (true)
205af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang         *                    or non-connectable (false).
206af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang         */
2079960b576533041d07b141008c5925dcecb8c9224Wei Wang        public Builder setConnectable(boolean connectable) {
2089960b576533041d07b141008c5925dcecb8c9224Wei Wang            mConnectable = connectable;
209af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang            return this;
210af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        }
211af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang
212af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang        /**
213af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang         * Limit advertising to a given amount of time.
2149960b576533041d07b141008c5925dcecb8c9224Wei Wang         * @param timeoutMillis Advertising time limit. May not exceed 180000 milliseconds.
215af74e66e29a518157cb78fcef4b4fc532b7f60b0Wei Wang         *                       A value of 0 will disable the time limit.
2169960b576533041d07b141008c5925dcecb8c9224Wei Wang         * @throws IllegalArgumentException If the provided timeout is over 180000 ms.
2176d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         */
2189960b576533041d07b141008c5925dcecb8c9224Wei Wang        public Builder setTimeout(int timeoutMillis) {
2199960b576533041d07b141008c5925dcecb8c9224Wei Wang            if (timeoutMillis < 0 || timeoutMillis > LIMITED_ADVERTISING_MAX_MILLIS) {
2209960b576533041d07b141008c5925dcecb8c9224Wei Wang                throw new IllegalArgumentException("timeoutMillis invalid (must be 0-"
2219960b576533041d07b141008c5925dcecb8c9224Wei Wang                                    + LIMITED_ADVERTISING_MAX_MILLIS + " milliseconds)");
2226d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            }
2239960b576533041d07b141008c5925dcecb8c9224Wei Wang            mTimeoutMillis = timeoutMillis;
2246d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang            return this;
2256d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        }
2266d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang
2276d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        /**
2286d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         * Build the {@link AdvertiseSettings} object.
2296d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang         */
2306d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        public AdvertiseSettings build() {
2319960b576533041d07b141008c5925dcecb8c9224Wei Wang            return new AdvertiseSettings(mMode, mTxPowerLevel, mConnectable, mTimeoutMillis);
2326d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang        }
2336d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang    }
2346d81118032b92caa0f5cfebe11af02a98f819d5eWei Wang}
235