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     */
33f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    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
63ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde    /** @hide */
64ffadfb9ffdced62db215319d3edc7717802088fbVinit Deshapnde    public void invalidate() {
65f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff        deviceAddress = "";
66f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    }
67f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff
686f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff    /** P2P-GO-NEG-REQUEST 42:fc:89:a8:96:09 dev_passwd_id=4 {@hide}*/
6955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public WifiP2pConfig(String supplicantEvent) throws IllegalArgumentException {
7055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        String[] tokens = supplicantEvent.split(" ");
7155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
7255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (tokens.length < 2 || !tokens[0].equals("P2P-GO-NEG-REQUEST")) {
7355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            throw new IllegalArgumentException("Malformed supplicant event");
7455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
7555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
7655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        deviceAddress = tokens[1];
77651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        wps = new WpsInfo();
7855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
7955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (tokens.length > 2) {
8055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            String[] nameVal = tokens[2].split("=");
8155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            int devPasswdId;
8255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            try {
8355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                devPasswdId = Integer.parseInt(nameVal[1]);
8455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            } catch (NumberFormatException e) {
8555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                devPasswdId = 0;
8655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
87618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff            //Based on definitions in wps/wps_defs.h
8855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            switch (devPasswdId) {
89618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                //DEV_PW_USER_SPECIFIED = 0x0001,
9055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                case 0x01:
91618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                    wps.setup = WpsInfo.DISPLAY;
9255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    break;
93618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                //DEV_PW_PUSHBUTTON = 0x0004,
9455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                case 0x04:
95651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    wps.setup = WpsInfo.PBC;
9655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    break;
97618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                //DEV_PW_REGISTRAR_SPECIFIED = 0x0005
9855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                case 0x05:
99618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                    wps.setup = WpsInfo.KEYPAD;
10055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    break;
10155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                default:
102651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    wps.setup = WpsInfo.PBC;
10355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    break;
10455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
10555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
10655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
10755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
10855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public String toString() {
10955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        StringBuffer sbuf = new StringBuffer();
11055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        sbuf.append("\n address: ").append(deviceAddress);
1116f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff        sbuf.append("\n wps: ").append(wps);
11255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        sbuf.append("\n groupOwnerIntent: ").append(groupOwnerIntent);
1130879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        sbuf.append("\n persist: ").append(netId);
11455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return sbuf.toString();
11555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
11655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
117651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Implement the Parcelable interface */
11855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public int describeContents() {
11955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return 0;
12055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
12155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
122651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** copy constructor */
12355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public WifiP2pConfig(WifiP2pConfig source) {
12455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (source != null) {
125651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            deviceAddress = source.deviceAddress;
126651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            wps = new WpsInfo(source.wps);
127651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            groupOwnerIntent = source.groupOwnerIntent;
1280879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga            netId = source.netId;
129651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        }
13055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
13155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
132651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Implement the Parcelable interface */
13355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public void writeToParcel(Parcel dest, int flags) {
13455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        dest.writeString(deviceAddress);
1356f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff        dest.writeParcelable(wps, flags);
13655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        dest.writeInt(groupOwnerIntent);
1370879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        dest.writeInt(netId);
13855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
13955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
140651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Implement the Parcelable interface */
14155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final Creator<WifiP2pConfig> CREATOR =
14255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        new Creator<WifiP2pConfig>() {
14355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            public WifiP2pConfig createFromParcel(Parcel in) {
14455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                WifiP2pConfig config = new WifiP2pConfig();
14555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                config.deviceAddress = in.readString();
146651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                config.wps = (WpsInfo) in.readParcelable(null);
14755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                config.groupOwnerIntent = in.readInt();
1480879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                config.netId = in.readInt();
14955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                return config;
15055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
15155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
15255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            public WifiP2pConfig[] newArray(int size) {
15355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                return new WifiP2pConfig[size];
15455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
15555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        };
15655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync}
157