120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen/* 220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Copyright (C) 2016 The Android Open Source Project 320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Licensed under the Apache License, Version 2.0 (the "License"); 520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * you may not use this file except in compliance with the License. 620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * You may obtain a copy of the License at 720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * http://www.apache.org/licenses/LICENSE-2.0 920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 1020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Unless required by applicable law or agreed to in writing, software 1120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * distributed under the License is distributed on an "AS IS" BASIS, 1220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * See the License for the specific language governing permissions and 1420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * limitations under the License. 1520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 1620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 1720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohenpackage android.net.wifi.nan; 1820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 1920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohenimport android.os.Parcel; 2020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohenimport android.os.Parcelable; 2120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 2220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen/** 2320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Defines a request object to configure a Wi-Fi NAN network. Built using 2420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@link ConfigRequest.Builder}. Configuration is requested using 2520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@link WifiNanManager#requestConfig(ConfigRequest)}. Note that the actual 2620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * achieved configuration may be different from the requested configuration - 2720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * since multiple applications may request different configurations. 2820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 2920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @hide PROPOSED_NAN_API 3020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 3120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohenpublic class ConfigRequest implements Parcelable { 3220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 3320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Lower range of possible cluster ID. 3420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 3520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @hide 3620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 3720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public static final int CLUSTER_ID_MIN = 0; 3820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 3920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 4020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Upper range of possible cluster ID. 4120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 4220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @hide 4320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 4420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public static final int CLUSTER_ID_MAX = 0xFFFF; 4520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 4620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 4720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Indicates whether 5G band support is requested. 4820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 4920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @hide 5020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 5120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public final boolean mSupport5gBand; 5220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 5320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 5420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Specifies the desired master preference. 5520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 5620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @hide 5720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 5820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public final int mMasterPreference; 5920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 6020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 6120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Specifies the desired lower range of the cluster ID. Must be lower then 6220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@link ConfigRequest#mClusterHigh}. 6320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 6420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @hide 6520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 6620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public final int mClusterLow; 6720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 6820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 6920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Specifies the desired higher range of the cluster ID. Must be higher then 7020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@link ConfigRequest#mClusterLow}. 7120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 7220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @hide 7320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 7420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public final int mClusterHigh; 7520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 7620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen private ConfigRequest(boolean support5gBand, int masterPreference, int clusterLow, 7720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen int clusterHigh) { 7820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mSupport5gBand = support5gBand; 7920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mMasterPreference = masterPreference; 8020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mClusterLow = clusterLow; 8120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mClusterHigh = clusterHigh; 8220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 8320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 8420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen @Override 8520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public String toString() { 8620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return "ConfigRequest [mSupport5gBand=" + mSupport5gBand + ", mMasterPreference=" 8720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen + mMasterPreference + ", mClusterLow=" + mClusterLow + ", mClusterHigh=" 8820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen + mClusterHigh + "]"; 8920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 9020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 9120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen @Override 9220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public int describeContents() { 9320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return 0; 9420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 9520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 9620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen @Override 9720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public void writeToParcel(Parcel dest, int flags) { 9820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen dest.writeInt(mSupport5gBand ? 1 : 0); 9920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen dest.writeInt(mMasterPreference); 10020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen dest.writeInt(mClusterLow); 10120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen dest.writeInt(mClusterHigh); 10220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 10320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 10420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public static final Creator<ConfigRequest> CREATOR = new Creator<ConfigRequest>() { 10520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen @Override 10620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public ConfigRequest[] newArray(int size) { 10720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return new ConfigRequest[size]; 10820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 10920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 11020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen @Override 11120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public ConfigRequest createFromParcel(Parcel in) { 11220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen boolean support5gBand = in.readInt() != 0; 11320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen int masterPreference = in.readInt(); 11420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen int clusterLow = in.readInt(); 11520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen int clusterHigh = in.readInt(); 11620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return new ConfigRequest(support5gBand, masterPreference, clusterLow, clusterHigh); 11720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 11820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen }; 11920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 12020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen @Override 12120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public boolean equals(Object o) { 12220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (this == o) { 12320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return true; 12420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 12520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 12620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (!(o instanceof ConfigRequest)) { 12720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return false; 12820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 12920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 13020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen ConfigRequest lhs = (ConfigRequest) o; 13120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 13220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return mSupport5gBand == lhs.mSupport5gBand && mMasterPreference == lhs.mMasterPreference 13320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen && mClusterLow == lhs.mClusterLow && mClusterHigh == lhs.mClusterHigh; 13420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 13520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 13620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen @Override 13720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public int hashCode() { 13820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen int result = 17; 13920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 14020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen result = 31 * result + (mSupport5gBand ? 1 : 0); 14120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen result = 31 * result + mMasterPreference; 14220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen result = 31 * result + mClusterLow; 14320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen result = 31 * result + mClusterHigh; 14420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 14520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return result; 14620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 14720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 14820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 14920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Builder used to build {@link ConfigRequest} objects. 15020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 15120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public static final class Builder { 15220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen private boolean mSupport5gBand; 15320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen private int mMasterPreference; 15420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen private int mClusterLow; 15520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen private int mClusterHigh; 15620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 15720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 15820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Default constructor for the Builder. 15920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 16020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public Builder() { 16120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mSupport5gBand = false; 16220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mMasterPreference = 0; 16320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mClusterLow = 0; 16420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mClusterHigh = CLUSTER_ID_MAX; 16520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 16620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 16720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 16820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Specify whether 5G band support is required in this request. 16920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 17020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @param support5gBand Support for 5G band is required. 17120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @return The builder to facilitate chaining 17220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@code builder.setXXX(..).setXXX(..)}. 17320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 17420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public Builder setSupport5gBand(boolean support5gBand) { 17520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mSupport5gBand = support5gBand; 17620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return this; 17720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 17820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 17920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 18020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Specify the Master Preference requested. The permitted range is 0 to 18120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 255 with 1 and 255 excluded (reserved). 18220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 18320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @param masterPreference The requested master preference 18420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @return The builder to facilitate chaining 18520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@code builder.setXXX(..).setXXX(..)}. 18620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 18720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public Builder setMasterPreference(int masterPreference) { 18820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (masterPreference < 0) { 18920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen throw new IllegalArgumentException( 19020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen "Master Preference specification must be non-negative"); 19120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 19220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (masterPreference == 1 || masterPreference == 255 || masterPreference > 255) { 19320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen throw new IllegalArgumentException("Master Preference specification must not " 19420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen + "exceed 255 or use 1 or 255 (reserved values)"); 19520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 19620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 19720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mMasterPreference = masterPreference; 19820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return this; 19920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 20020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 20120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 20220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * The Cluster ID is generated randomly for new NAN networks. Specify 20320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * the lower range of the cluster ID. The upper range is specified using 20420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * the {@link ConfigRequest.Builder#setClusterHigh(int)}. The permitted 20520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * range is 0 to the value specified by 20620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@link ConfigRequest.Builder#setClusterHigh(int)}. Equality is 20720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * permitted which restricts the Cluster ID to the specified value. 20820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 20920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @param clusterLow The lower range of the generated cluster ID. 21020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @return The builder to facilitate chaining 21120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@code builder.setClusterLow(..).setClusterHigh(..)}. 21220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 21320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public Builder setClusterLow(int clusterLow) { 21420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (clusterLow < CLUSTER_ID_MIN) { 21520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen throw new IllegalArgumentException("Cluster specification must be non-negative"); 21620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 21720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (clusterLow > CLUSTER_ID_MAX) { 21820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen throw new IllegalArgumentException("Cluster specification must not exceed 0xFFFF"); 21920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 22020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 22120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mClusterLow = clusterLow; 22220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return this; 22320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 22420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 22520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 22620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * The Cluster ID is generated randomly for new NAN networks. Specify 22720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * the lower upper of the cluster ID. The lower range is specified using 22820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * the {@link ConfigRequest.Builder#setClusterLow(int)}. The permitted 22920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * range is the value specified by 23020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@link ConfigRequest.Builder#setClusterLow(int)} to 0xFFFF. Equality 23120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * is permitted which restricts the Cluster ID to the specified value. 23220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * 23320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @param clusterHigh The upper range of the generated cluster ID. 23420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * @return The builder to facilitate chaining 23520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * {@code builder.setClusterLow(..).setClusterHigh(..)}. 23620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 23720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public Builder setClusterHigh(int clusterHigh) { 23820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (clusterHigh < CLUSTER_ID_MIN) { 23920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen throw new IllegalArgumentException("Cluster specification must be non-negative"); 24020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 24120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (clusterHigh > CLUSTER_ID_MAX) { 24220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen throw new IllegalArgumentException("Cluster specification must not exceed 0xFFFF"); 24320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 24420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 24520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen mClusterHigh = clusterHigh; 24620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return this; 24720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 24820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 24920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen /** 25020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * Build {@link ConfigRequest} given the current requests made on the 25120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen * builder. 25220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen */ 25320d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen public ConfigRequest build() { 25420d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen if (mClusterLow > mClusterHigh) { 25520d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen throw new IllegalArgumentException( 25620d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen "Invalid argument combination - must have Cluster Low <= Cluster High"); 25720d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 25820d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen 25920d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen return new ConfigRequest(mSupport5gBand, mMasterPreference, mClusterLow, mClusterHigh); 26020d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 26120d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen } 26220d329b08df7d1a94e6caee781f09e812a79c913Etan Cohen} 263