/* * Copyright (C) 2014 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; import android.os.Parcel; import android.os.Parcelable; /** * Represents local wifi adapter. Different devices have different kinds of * wifi adapters; each with different capabilities. Use this class to find out * which capabilites are supported by the wifi adapter on the device. */ public class WifiAdapter implements Parcelable { /* Keep this list in sync with wifi_hal.h */ /** @hide */ public static final int WIFI_FEATURE_INFRA = 0x0001; // Basic infrastructure mode /** @hide */ public static final int WIFI_FEATURE_INFRA_5G = 0x0002; // Support for 5 GHz Band /** @hide */ public static final int WIFI_FEATURE_PASSPOINT = 0x0004; // Support for GAS/ANQP /** @hide */ public static final int WIFI_FEATURE_P2P = 0x0008; // Wifi-Direct /** @hide */ public static final int WIFI_FEATURE_MOBILE_HOTSPOT = 0x0010; // Soft AP /** @hide */ public static final int WIFI_FEATURE_SCANNER = 0x0020; // WifiScanner APIs /** @hide */ public static final int WIFI_FEATURE_NAN = 0x0040; // Neighbor Awareness Networking /** @hide */ public static final int WIFI_FEATURE_D2D_RTT = 0x0080; // Device-to-device RTT /** @hide */ public static final int WIFI_FEATURE_D2AP_RTT = 0x0100; // Device-to-AP RTT /** @hide */ public static final int WIFI_FEATURE_BATCH_SCAN = 0x0200; // Batched Scan (deprecated) /** @hide */ public static final int WIFI_FEATURE_PNO = 0x0400; // Preferred network offload /** @hide */ public static final int WIFI_FEATURE_ADDITIONAL_STA = 0x0800; // Support for two STAs /** @hide */ public static final int WIFI_FEATURE_TDLS = 0x1000; // Tunnel directed link setup /** @hide */ public static final int WIFI_FEATURE_TDLS_OFFCHANNEL = 0x2000; // Support for TDLS off channel /** @hide */ public static final int WIFI_FEATURE_EPR = 0x4000; // Enhanced power reporting private String name; private int supportedFeatures; /** @hide */ public WifiAdapter(String name, int supportedFeatures) { this.name = name; this.supportedFeatures = supportedFeatures; } /** * @return name of the adapter */ public String getName() { return name; } private int getSupportedFeatures() { return supportedFeatures; } private boolean isFeatureSupported(int feature) { return (supportedFeatures & feature) == feature; } /** * @return true if this adapter supports 5 GHz band */ public boolean is5GHzBandSupported() { return isFeatureSupported(WIFI_FEATURE_INFRA_5G); } /** * @return true if this adapter supports passpoint */ public boolean isPasspointSupported() { return isFeatureSupported(WIFI_FEATURE_PASSPOINT); } /** * @return true if this adapter supports WifiP2pManager (Wi-Fi Direct) */ public boolean isP2pSupported() { return isFeatureSupported(WIFI_FEATURE_P2P); } /** * @return true if this adapter supports portable Wi-Fi hotspot */ public boolean isPortableHotspotSupported() { return isFeatureSupported(WIFI_FEATURE_MOBILE_HOTSPOT); } /** * @return true if this adapter supports WifiScanner APIs */ public boolean isWifiScannerSupported() { return isFeatureSupported(WIFI_FEATURE_SCANNER); } /** * @return true if this adapter supports Neighbour Awareness Network APIs * @hide */ public boolean isNanSupported() { return isFeatureSupported(WIFI_FEATURE_NAN); } /** * @return true if this adapter supports Device-to-device RTT */ public boolean isDeviceToDeviceRttSupported() { return isFeatureSupported(WIFI_FEATURE_D2D_RTT); } /** * @return true if this adapter supports Device-to-AP RTT */ public boolean isDeviceToApRttSupported() { return isFeatureSupported(WIFI_FEATURE_D2AP_RTT); } /** * @return true if this adapter supports offloaded connectivity scan */ public boolean isPreferredNetworkOffloadSupported() { return isFeatureSupported(WIFI_FEATURE_PNO); } /** * @return true if this adapter supports multiple simultaneous connections * @hide */ public boolean isAdditionalStaSupported() { return isFeatureSupported(WIFI_FEATURE_ADDITIONAL_STA); } /** * @return true if this adapter supports Tunnel Directed Link Setup */ public boolean isTdlsSupported() { return isFeatureSupported(WIFI_FEATURE_TDLS); } /** * @return true if this adapter supports Off Channel Tunnel Directed Link Setup */ public boolean isOffChannelTdlsSupported() { return isFeatureSupported(WIFI_FEATURE_TDLS_OFFCHANNEL); } /** * @return true if this adapter supports advanced power/performance counters */ public boolean isEnhancedPowerReportingSupported() { return isFeatureSupported(WIFI_FEATURE_EPR); } /* Parcelable implementation */ /** * Implement the Parcelable interface * {@hide} */ public int describeContents() { return 0; } /** * Implement the Parcelable interface * {@hide} */ public void writeToParcel(Parcel dest, int flags) { dest.writeString(name); dest.writeInt(supportedFeatures); } /** * Implement the Parcelable interface * {@hide} */ public static final Creator CREATOR = new Creator() { public WifiAdapter createFromParcel(Parcel in) { WifiAdapter adaptor = new WifiAdapter(in.readString(), in.readInt()); return adaptor; } public WifiAdapter[] newArray(int size) { return new WifiAdapter[size]; } }; }