1ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber/* 2ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * Copyright (C) 2012 The Android Open Source Project 3ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * 4ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * you may not use this file except in compliance with the License. 6ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * You may obtain a copy of the License at 7ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * 8ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * 10ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * Unless required by applicable law or agreed to in writing, software 11ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * See the License for the specific language governing permissions and 14ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * limitations under the License. 15ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber */ 16ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 17ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huberpackage android.net.wifi.p2p; 18ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 19ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huberimport android.os.Parcelable; 20ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huberimport android.os.Parcel; 21ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 22fea17de7aaa5729d3111102b2734b158403d2780Jeff Sharkeyimport java.util.Locale; 23fea17de7aaa5729d3111102b2734b158403d2780Jeff Sharkey 24ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber/** 25ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * A class representing Wifi Display information for a device 26ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * @hide 27ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber */ 28ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huberpublic class WifiP2pWfdInfo implements Parcelable { 29ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 30ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private static final String TAG = "WifiP2pWfdInfo"; 31ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 32ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private boolean mWfdEnabled; 33ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 34ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private int mDeviceInfo; 35ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 36ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public static final int WFD_SOURCE = 0; 37ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public static final int PRIMARY_SINK = 1; 38ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public static final int SECONDARY_SINK = 2; 39ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public static final int SOURCE_OR_PRIMARY_SINK = 3; 40ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 41ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber /* Device information bitmap */ 42ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber /** One of {@link #WFD_SOURCE}, {@link #PRIMARY_SINK}, {@link #SECONDARY_SINK} 43ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber * or {@link #SOURCE_OR_PRIMARY_SINK} 44ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber */ 45ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private static final int DEVICE_TYPE = 0x3; 46ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private static final int COUPLED_SINK_SUPPORT_AT_SOURCE = 0x4; 47ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private static final int COUPLED_SINK_SUPPORT_AT_SINK = 0x8; 48ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private static final int SESSION_AVAILABLE = 0x30; 49ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private static final int SESSION_AVAILABLE_BIT1 = 0x10; 50ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private static final int SESSION_AVAILABLE_BIT2 = 0x20; 51ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 52ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private int mCtrlPort; 53ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 54ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber private int mMaxThroughput; 55ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 56ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public WifiP2pWfdInfo() { 57ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 58ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 591f6d8706918ddb277cad5fc8a006cc56ea7dbf69Irfan Sheriff public WifiP2pWfdInfo(int devInfo, int ctrlPort, int maxTput) { 601f6d8706918ddb277cad5fc8a006cc56ea7dbf69Irfan Sheriff mWfdEnabled = true; 611f6d8706918ddb277cad5fc8a006cc56ea7dbf69Irfan Sheriff mDeviceInfo = devInfo; 621f6d8706918ddb277cad5fc8a006cc56ea7dbf69Irfan Sheriff mCtrlPort = ctrlPort; 631f6d8706918ddb277cad5fc8a006cc56ea7dbf69Irfan Sheriff mMaxThroughput = maxTput; 641f6d8706918ddb277cad5fc8a006cc56ea7dbf69Irfan Sheriff } 651f6d8706918ddb277cad5fc8a006cc56ea7dbf69Irfan Sheriff 66ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public boolean isWfdEnabled() { 67ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return mWfdEnabled; 68ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 69ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 70ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public void setWfdEnabled(boolean enabled) { 71ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mWfdEnabled = enabled; 72ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 73ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 74ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public int getDeviceType() { 75ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return (mDeviceInfo & DEVICE_TYPE); 76ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 77ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 78ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public boolean setDeviceType(int deviceType) { 79ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber if (deviceType >= WFD_SOURCE && deviceType <= SOURCE_OR_PRIMARY_SINK) { 808b3b81000c6fe7e6e5bab0f3e2d24022d3eaaea8Grigoriy Kraynov mDeviceInfo &= ~DEVICE_TYPE; 81ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo |= deviceType; 82ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return true; 83ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 84ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return false; 85ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 86ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 87ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public boolean isCoupledSinkSupportedAtSource() { 88ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return (mDeviceInfo & COUPLED_SINK_SUPPORT_AT_SINK) != 0; 89ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 90ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 91ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public void setCoupledSinkSupportAtSource(boolean enabled) { 92ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber if (enabled ) { 93ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo |= COUPLED_SINK_SUPPORT_AT_SINK; 94ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } else { 95ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo &= ~COUPLED_SINK_SUPPORT_AT_SINK; 96ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 97ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 98ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 99ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public boolean isCoupledSinkSupportedAtSink() { 100ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return (mDeviceInfo & COUPLED_SINK_SUPPORT_AT_SINK) != 0; 101ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 102ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 103ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public void setCoupledSinkSupportAtSink(boolean enabled) { 104ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber if (enabled ) { 105ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo |= COUPLED_SINK_SUPPORT_AT_SINK; 106ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } else { 107ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo &= ~COUPLED_SINK_SUPPORT_AT_SINK; 108ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 109ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 110ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 111ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public boolean isSessionAvailable() { 112ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return (mDeviceInfo & SESSION_AVAILABLE) != 0; 113ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 114ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 115ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public void setSessionAvailable(boolean enabled) { 116ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber if (enabled) { 117ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo |= SESSION_AVAILABLE_BIT1; 118ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo &= ~SESSION_AVAILABLE_BIT2; 119ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } else { 120ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo &= ~SESSION_AVAILABLE; 121ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 122ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 123ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 124ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public int getControlPort() { 125ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return mCtrlPort; 126ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 127ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 128ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public void setControlPort(int port) { 129ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mCtrlPort = port; 130ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 131ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 132ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public void setMaxThroughput(int maxThroughput) { 133ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mMaxThroughput = maxThroughput; 134ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 135ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 136ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public int getMaxThroughput() { 137ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return mMaxThroughput; 138ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 139ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 140ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public String getDeviceInfoHex() { 141fea17de7aaa5729d3111102b2734b158403d2780Jeff Sharkey return String.format( 142fea17de7aaa5729d3111102b2734b158403d2780Jeff Sharkey Locale.US, "%04x%04x%04x%04x", 6, mDeviceInfo, mCtrlPort, mMaxThroughput); 143ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 144ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 145ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public String toString() { 146ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber StringBuffer sbuf = new StringBuffer(); 147ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber sbuf.append("WFD enabled: ").append(mWfdEnabled); 148ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber sbuf.append("WFD DeviceInfo: ").append(mDeviceInfo); 149ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber sbuf.append("\n WFD CtrlPort: ").append(mCtrlPort); 150ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber sbuf.append("\n WFD MaxThroughput: ").append(mMaxThroughput); 151ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return sbuf.toString(); 152ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 153ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 154ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber /** Implement the Parcelable interface */ 155ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public int describeContents() { 156ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return 0; 157ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 158ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 159ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber /** copy constructor */ 160ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public WifiP2pWfdInfo(WifiP2pWfdInfo source) { 161ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber if (source != null) { 16290082124aaf66916da0a9f9bfb695caa74734b0fIrfan Sheriff mWfdEnabled = source.mWfdEnabled; 163ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo = source.mDeviceInfo; 164ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mCtrlPort = source.mCtrlPort; 165ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mMaxThroughput = source.mMaxThroughput; 166ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 167ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 168ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 169ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber /** Implement the Parcelable interface */ 170ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public void writeToParcel(Parcel dest, int flags) { 171ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber dest.writeInt(mWfdEnabled ? 1 : 0); 172ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber dest.writeInt(mDeviceInfo); 173ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber dest.writeInt(mCtrlPort); 174ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber dest.writeInt(mMaxThroughput); 175ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 176ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 177ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public void readFromParcel(Parcel in) { 178ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mWfdEnabled = (in.readInt() == 1); 179ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mDeviceInfo = in.readInt(); 180ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mCtrlPort = in.readInt(); 181ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber mMaxThroughput = in.readInt(); 182ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 183ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 184ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber /** Implement the Parcelable interface */ 185ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public static final Creator<WifiP2pWfdInfo> CREATOR = 186ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber new Creator<WifiP2pWfdInfo>() { 187ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public WifiP2pWfdInfo createFromParcel(Parcel in) { 188ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber WifiP2pWfdInfo device = new WifiP2pWfdInfo(); 189ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber device.readFromParcel(in); 190ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return device; 191ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 192ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber 193ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber public WifiP2pWfdInfo[] newArray(int size) { 194ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber return new WifiP2pWfdInfo[size]; 195ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber } 196ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber }; 197ab4cd45133ccea6a66fb081f9b2a8d14eb3e4f1dAndreas Huber} 198