| /* |
| * Copyright (C) 2022 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package android.net.wifi.aware; |
| |
| import android.annotation.IntRange; |
| import android.annotation.NonNull; |
| import android.annotation.SystemApi; |
| import android.os.Parcel; |
| import android.os.Parcelable; |
| |
| /** |
| * An object to use with {@link WifiAwareManager#setAwareParams(AwareParams)} specifying |
| * configuration of the Wi-Fi Aware protocol implementation. |
| * @hide |
| */ |
| @SystemApi |
| public final class AwareParams implements Parcelable { |
| |
| /** |
| * An integer representing the parameter is never set. |
| */ |
| public static final int UNSET_PARAMETER = -1; |
| |
| private int mDw24Ghz = UNSET_PARAMETER; |
| private int mDw5Ghz = UNSET_PARAMETER; |
| private int mDw6Ghz = UNSET_PARAMETER; |
| private int mDiscoveryBeaconIntervalMs = UNSET_PARAMETER; |
| private int mNumSpatialStreamsInDiscovery = UNSET_PARAMETER; |
| private boolean mIsDwEarlyTerminationEnabled = false; |
| private int mMacRandomIntervalSec = UNSET_PARAMETER; |
| |
| /** |
| * Construct an empty {@link AwareParams}. |
| */ |
| public AwareParams() { |
| } |
| |
| private AwareParams(Parcel in) { |
| mDw24Ghz = in.readInt(); |
| mDw5Ghz = in.readInt(); |
| mDw6Ghz = in.readInt(); |
| mDiscoveryBeaconIntervalMs = in.readInt(); |
| mNumSpatialStreamsInDiscovery = in.readInt(); |
| mIsDwEarlyTerminationEnabled = in.readBoolean(); |
| mMacRandomIntervalSec = in.readInt(); |
| } |
| |
| public static final @NonNull Creator<AwareParams> CREATOR = new Creator<AwareParams>() { |
| @Override |
| public AwareParams createFromParcel(Parcel in) { |
| return new AwareParams(in); |
| } |
| |
| @Override |
| public AwareParams[] newArray(int size) { |
| return new AwareParams[size]; |
| } |
| }; |
| |
| /** |
| * Specifies the discovery window (DW) interval for Sync beacons and SDF frames for 2.4Ghz. |
| * Defined as per Wi-Fi Alliance (WFA) Wi-Fi Aware specifications version 3.1 Section 4.1.1.1 |
| * Valid values of DW Interval are: 1, 2, 3, 4 and 5 corresponding to waking up every 1, 2, 4, |
| * 8, and 16 DWs. |
| * @param dw A positive number specifying the discovery window (DW) interval |
| */ |
| public void setDiscoveryWindowWakeInterval24Ghz(@IntRange(from = 1, to = 5) int dw) { |
| if (dw > 5 || dw < 1) { |
| throw new IllegalArgumentException("DW value for 2.4Ghz must be 1 to 5"); |
| } |
| mDw24Ghz = dw; |
| } |
| |
| /** |
| * Specifies the discovery window (DW) interval for Sync beacons and SDF frames for 5Ghz. |
| * Defined as per Wi-Fi Alliance (WFA) Wi-Fi Aware specifications version 3.1 Section 4.1.1.1 |
| * <ul> |
| * <li>0: indicating no discovery in the 5GHz band</li> |
| * <li>1, 2, 3, 4, or 5: corresponding to waking up every 1, 2, 4, 8, and 16 DWs.</li> |
| * </ul> |
| * @param dw An integer specifying the discovery window (DW) interval |
| */ |
| public void setDiscoveryWindowWakeInterval5Ghz(@IntRange(from = 0, to = 5) int dw) { |
| if (dw > 5 || dw < 0) { |
| throw new IllegalArgumentException("DW value for 5Ghz must be 0 to 5"); |
| } |
| mDw5Ghz = dw; |
| } |
| |
| /** |
| * Set the discovery windows (DW) for 6Ghz reserved. |
| * @param dw An integer specifying the discovery window (DW) interval |
| * @hide |
| */ |
| public void setDiscoveryWindow6Ghz(@IntRange(from = 0) int dw) { |
| mDw6Ghz = dw; |
| } |
| |
| /** |
| * Specify the Discovery Beacon interval in ms. Specification only applicable if the device |
| * transmits Discovery Beacons (based on the Wi-Fi Aware protocol selection criteria). The value |
| * can be increased to reduce power consumption (on devices which would transmit Discovery |
| * Beacons), however - cluster synchronization time will likely increase. |
| * @param intervalInMs An integer specifying the interval in millisecond |
| */ |
| public void setDiscoveryBeaconIntervalMillis(@IntRange(from = 1) int intervalInMs) { |
| if (intervalInMs < 1) { |
| throw new IllegalArgumentException("Discovery Beacon interval must >= 1"); |
| } |
| mDiscoveryBeaconIntervalMs = intervalInMs; |
| } |
| |
| /** |
| * The number of spatial streams to be used for transmitting Wi-Fi Aware management frames (does |
| * NOT apply to data-path packets). A small value may reduce power consumption for small |
| * discovery packets. |
| * @param spatialStreamsNum A positive number specifying the number of spatial streams |
| */ |
| public void setNumSpatialStreamsInDiscovery(@IntRange(from = 1) int spatialStreamsNum) { |
| if (spatialStreamsNum < 1) { |
| throw new IllegalArgumentException("Number Spatial streams must >= 1"); |
| } |
| mNumSpatialStreamsInDiscovery = spatialStreamsNum; |
| } |
| |
| /** |
| * Specifies the interval in seconds that the Wi-Fi Aware management interface MAC address is |
| * re-randomized. |
| * @param intervalSec A positive number indicating the interval for the MAC address to |
| * re-randomize, must not exceed 1800 second (30 mins). |
| */ |
| public void setMacRandomizationIntervalSeconds(@IntRange(from = 1, to = 1800) int intervalSec) { |
| if (intervalSec > 1800 || intervalSec < 1) { |
| throw new IllegalArgumentException("Mac Randomization Interval must be between 1 to " |
| + "1800 seconds"); |
| } |
| mMacRandomIntervalSec = intervalSec; |
| } |
| |
| /** |
| * Controls whether the device may terminate listening on a Discovery Window (DW) earlier than |
| * the DW termination (16ms) if no information is received. Enabling the feature will result in |
| * lower power consumption, but may result in some missed messages and hence increased latency. |
| * |
| * @param enable true to enable, false otherwise |
| */ |
| public void setDwEarlyTerminationEnabled(boolean enable) { |
| mIsDwEarlyTerminationEnabled = enable; |
| } |
| |
| /** |
| * Get the discovery window (DW) interval for 2.4Ghz. |
| * @see #setDiscoveryWindowWakeInterval24Ghz(int) |
| * @return an integer represents discovery window interval, {@link #UNSET_PARAMETER} represent |
| * this parameter is not set |
| */ |
| public int getDiscoveryWindowWakeInterval24Ghz() { |
| return mDw24Ghz; |
| } |
| |
| /** |
| * Get the discovery window (DW) interval for 5Ghz. |
| * @see #setDiscoveryWindowWakeInterval5Ghz(int) |
| * @return an integer represents discovery window interval, {@link #UNSET_PARAMETER} represent |
| * this parameter is not set |
| */ |
| public int getDiscoveryWindowWakeInterval5Ghz() { |
| return mDw5Ghz; |
| } |
| |
| /** |
| * Get the discovery window (DW) interval for 6ghz. |
| * @see #setDiscoveryWindowWakeInterval5Ghz(int) |
| * @return an integer represents discovery window interval, {@link #UNSET_PARAMETER} represent |
| * this parameter is not |
| * set |
| * @hide |
| */ |
| public int getDiscoveryWindowWakeInterval6Ghz() { |
| return mDw24Ghz; |
| } |
| |
| /** |
| * Get the discovery beacon interval in milliseconds |
| * @see #setDiscoveryBeaconIntervalMillis(int) |
| * @return an integer represents discovery beacon interval in milliseconds, |
| * {@link #UNSET_PARAMETER} represent this parameter is not set |
| */ |
| public int getDiscoveryBeaconIntervalMillis() { |
| return mDiscoveryBeaconIntervalMs; |
| } |
| |
| /** |
| * Get the number of the spatial streams used in discovery |
| * @see #setNumSpatialStreamsInDiscovery(int) |
| * @return an integer represents number of the spatial streams, {@link #UNSET_PARAMETER} |
| * represent this parameter is not set |
| */ |
| public int getNumSpatialStreamsInDiscovery() { |
| return mNumSpatialStreamsInDiscovery; |
| } |
| |
| /** |
| * Check if discovery window early termination is enabled. |
| * @see #setDwEarlyTerminationEnabled(boolean) |
| * @return true if enabled, false otherwise. |
| */ |
| public boolean isDwEarlyTerminationEnabled() { |
| return mIsDwEarlyTerminationEnabled; |
| } |
| |
| /** |
| * Get the interval of the MAC address randomization. |
| * @return An integer represents the interval in seconds, {@link #UNSET_PARAMETER} represent |
| * this parameter is not set |
| */ |
| public int getMacRandomizationIntervalSeconds() { |
| return mMacRandomIntervalSec; |
| } |
| |
| |
| @Override |
| public int describeContents() { |
| return 0; |
| } |
| |
| @Override |
| public void writeToParcel(@NonNull Parcel dest, int flags) { |
| dest.writeInt(mDw24Ghz); |
| dest.writeInt(mDw5Ghz); |
| dest.writeInt(mDw6Ghz); |
| dest.writeInt(mDiscoveryBeaconIntervalMs); |
| dest.writeInt(mNumSpatialStreamsInDiscovery); |
| dest.writeBoolean((mIsDwEarlyTerminationEnabled)); |
| dest.writeInt(mMacRandomIntervalSec); |
| } |
| |
| /** @hide */ |
| @Override |
| public String toString() { |
| StringBuffer sbf = new StringBuffer(); |
| sbf.append("AwareParams [") |
| .append("mDw24Ghz=").append(mDw24Ghz) |
| .append(", mDw5Ghz=").append(mDw5Ghz) |
| .append(", mDw6Ghz=").append(mDw6Ghz) |
| .append(", mDiscoveryBeaconIntervalMs=").append(mDiscoveryBeaconIntervalMs) |
| .append(", mNumSpatialStreamsInDiscovery=").append(mNumSpatialStreamsInDiscovery) |
| .append(", mIsDwEarlyTerminationEnabled=").append(mIsDwEarlyTerminationEnabled) |
| .append(", mMacRandomIntervalSec=").append(mMacRandomIntervalSec) |
| .append("]"); |
| return sbf.toString(); |
| } |
| } |