/* * 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 CREATOR = new Creator() { @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 * * @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(); } }