155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync/* 255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Copyright (C) 2011 The Android Open Source Project 355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Licensed under the Apache License, Version 2.0 (the "License"); 555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * you may not use this file except in compliance with the License. 655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * You may obtain a copy of the License at 755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * http://www.apache.org/licenses/LICENSE-2.0 955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * 1055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * Unless required by applicable law or agreed to in writing, software 1155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * distributed under the License is distributed on an "AS IS" BASIS, 1255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * See the License for the specific language governing permissions and 1455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * limitations under the License. 1555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */ 1655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 1755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncpackage android.net.wifi.p2p; 1855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 19651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriffimport android.net.wifi.WpsInfo; 2055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Parcelable; 2155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncimport android.os.Parcel; 2255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 2355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync/** 246f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * A class representing a Wi-Fi P2p configuration for setting up a connection 256f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * 266f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * {@see WifiP2pManager} 2755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */ 2855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo syncpublic class WifiP2pConfig implements Parcelable { 2955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 3055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync /** 316f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * The device MAC address uniquely identifies a Wi-Fi p2p device 3255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */ 3355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public String deviceAddress; 3455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 3555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync /** 366f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff * Wi-Fi Protected Setup information 3755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */ 38651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff public WpsInfo wps; 3955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 40e0c28d5f1358fc2d4c464f910bd04fed4b283fefIrfan Sheriff /** @hide */ 41e0c28d5f1358fc2d4c464f910bd04fed4b283fefIrfan Sheriff public static final int MAX_GROUP_OWNER_INTENT = 15; 4299766cf40ed706aad36032f2107fb0c1e54fc398Irfan Sheriff /** @hide */ 4399766cf40ed706aad36032f2107fb0c1e54fc398Irfan Sheriff public static final int MIN_GROUP_OWNER_INTENT = 0; 44e0c28d5f1358fc2d4c464f910bd04fed4b283fefIrfan Sheriff 4555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync /** 4655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * This is an integer value between 0 and 15 where 0 indicates the least 4755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * inclination to be a group owner and 15 indicates the highest inclination 4855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync * to be a group owner. 492b8edd0c485f74067605c19983e3e7f44b20ec50repo sync * 502b8edd0c485f74067605c19983e3e7f44b20ec50repo sync * A value of -1 indicates the system can choose an appropriate value. 5155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync */ 522b8edd0c485f74067605c19983e3e7f44b20ec50repo sync public int groupOwnerIntent = -1; 5355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 549cc2718abc0152d79e3e8bf23be94ddd3cc9db87Irfan Sheriff /** @hide */ 550879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga public int netId = WifiP2pGroup.PERSISTENT_NET_ID; 5655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 5755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pConfig() { 5855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync //set defaults 59651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff wps = new WpsInfo(); 60651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff wps.setup = WpsInfo.PBC; 6155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 6255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 636f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff /** P2P-GO-NEG-REQUEST 42:fc:89:a8:96:09 dev_passwd_id=4 {@hide}*/ 6455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pConfig(String supplicantEvent) throws IllegalArgumentException { 6555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync String[] tokens = supplicantEvent.split(" "); 6655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 6755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync if (tokens.length < 2 || !tokens[0].equals("P2P-GO-NEG-REQUEST")) { 6855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync throw new IllegalArgumentException("Malformed supplicant event"); 6955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 7055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 7155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync deviceAddress = tokens[1]; 72651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff wps = new WpsInfo(); 7355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 7455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync if (tokens.length > 2) { 7555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync String[] nameVal = tokens[2].split("="); 7655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync int devPasswdId; 7755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync try { 7855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync devPasswdId = Integer.parseInt(nameVal[1]); 7955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } catch (NumberFormatException e) { 8055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync devPasswdId = 0; 8155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 82618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff //Based on definitions in wps/wps_defs.h 8355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync switch (devPasswdId) { 84618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff //DEV_PW_USER_SPECIFIED = 0x0001, 8555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync case 0x01: 86618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff wps.setup = WpsInfo.DISPLAY; 8755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync break; 88618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff //DEV_PW_PUSHBUTTON = 0x0004, 8955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync case 0x04: 90651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff wps.setup = WpsInfo.PBC; 9155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync break; 92618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff //DEV_PW_REGISTRAR_SPECIFIED = 0x0005 9355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync case 0x05: 94618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff wps.setup = WpsInfo.KEYPAD; 9555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync break; 9655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync default: 97651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff wps.setup = WpsInfo.PBC; 9855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync break; 9955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 10055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 10155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 10255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 10355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public String toString() { 10455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync StringBuffer sbuf = new StringBuffer(); 10555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync sbuf.append("\n address: ").append(deviceAddress); 1066f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff sbuf.append("\n wps: ").append(wps); 10755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync sbuf.append("\n groupOwnerIntent: ").append(groupOwnerIntent); 1080879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga sbuf.append("\n persist: ").append(netId); 10955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return sbuf.toString(); 11055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 11155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 112651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff /** Implement the Parcelable interface */ 11355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public int describeContents() { 11455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return 0; 11555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 11655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 117651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff /** copy constructor */ 11855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pConfig(WifiP2pConfig source) { 11955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync if (source != null) { 120651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff deviceAddress = source.deviceAddress; 121651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff wps = new WpsInfo(source.wps); 122651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff groupOwnerIntent = source.groupOwnerIntent; 1230879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga netId = source.netId; 124651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff } 12555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 12655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 127651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff /** Implement the Parcelable interface */ 12855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public void writeToParcel(Parcel dest, int flags) { 12955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync dest.writeString(deviceAddress); 1306f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff dest.writeParcelable(wps, flags); 13155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync dest.writeInt(groupOwnerIntent); 1320879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga dest.writeInt(netId); 13355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 13455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 135651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff /** Implement the Parcelable interface */ 13655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public static final Creator<WifiP2pConfig> CREATOR = 13755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync new Creator<WifiP2pConfig>() { 13855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pConfig createFromParcel(Parcel in) { 13955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync WifiP2pConfig config = new WifiP2pConfig(); 14055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync config.deviceAddress = in.readString(); 141651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff config.wps = (WpsInfo) in.readParcelable(null); 14255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync config.groupOwnerIntent = in.readInt(); 1430879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga config.netId = in.readInt(); 14455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return config; 14555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 14655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync 14755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync public WifiP2pConfig[] newArray(int size) { 14855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync return new WifiP2pConfig[size]; 14955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync } 15055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync }; 15155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync} 152