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
63f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    void invalidate() {
64f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff        deviceAddress = "";
65f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff    }
66f118043ca726c65f04cddc6321c9e820b577fc6fIrfan Sheriff
676f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff    /** P2P-GO-NEG-REQUEST 42:fc:89:a8:96:09 dev_passwd_id=4 {@hide}*/
6855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public WifiP2pConfig(String supplicantEvent) throws IllegalArgumentException {
6955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        String[] tokens = supplicantEvent.split(" ");
7055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
7155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (tokens.length < 2 || !tokens[0].equals("P2P-GO-NEG-REQUEST")) {
7255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            throw new IllegalArgumentException("Malformed supplicant event");
7355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
7455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
7555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        deviceAddress = tokens[1];
76651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        wps = new WpsInfo();
7755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
7855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (tokens.length > 2) {
7955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            String[] nameVal = tokens[2].split("=");
8055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            int devPasswdId;
8155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            try {
8255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                devPasswdId = Integer.parseInt(nameVal[1]);
8355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            } catch (NumberFormatException e) {
8455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                devPasswdId = 0;
8555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
86618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff            //Based on definitions in wps/wps_defs.h
8755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            switch (devPasswdId) {
88618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                //DEV_PW_USER_SPECIFIED = 0x0001,
8955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                case 0x01:
90618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                    wps.setup = WpsInfo.DISPLAY;
9155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    break;
92618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                //DEV_PW_PUSHBUTTON = 0x0004,
9355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                case 0x04:
94651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    wps.setup = WpsInfo.PBC;
9555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    break;
96618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                //DEV_PW_REGISTRAR_SPECIFIED = 0x0005
9755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                case 0x05:
98618455f7e7255019c8cc08a734ba7c52b67a7dc8Irfan Sheriff                    wps.setup = WpsInfo.KEYPAD;
9955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    break;
10055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                default:
101651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                    wps.setup = WpsInfo.PBC;
10255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                    break;
10355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
10455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        }
10555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
10655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
10755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public String toString() {
10855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        StringBuffer sbuf = new StringBuffer();
10955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        sbuf.append("\n address: ").append(deviceAddress);
1106f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff        sbuf.append("\n wps: ").append(wps);
11155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        sbuf.append("\n groupOwnerIntent: ").append(groupOwnerIntent);
1120879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        sbuf.append("\n persist: ").append(netId);
11355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return sbuf.toString();
11455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
11555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
116651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Implement the Parcelable interface */
11755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public int describeContents() {
11855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        return 0;
11955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
12055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
121651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** copy constructor */
12255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public WifiP2pConfig(WifiP2pConfig source) {
12355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        if (source != null) {
124651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            deviceAddress = source.deviceAddress;
125651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            wps = new WpsInfo(source.wps);
126651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff            groupOwnerIntent = source.groupOwnerIntent;
1270879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga            netId = source.netId;
128651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff        }
12955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
13055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
131651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Implement the Parcelable interface */
13255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public void writeToParcel(Parcel dest, int flags) {
13355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        dest.writeString(deviceAddress);
1346f7d385d964949e507dcc9c88012372f48d0bce7Irfan Sheriff        dest.writeParcelable(wps, flags);
13555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        dest.writeInt(groupOwnerIntent);
1360879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga        dest.writeInt(netId);
13755bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    }
13855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
139651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff    /** Implement the Parcelable interface */
14055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync    public static final Creator<WifiP2pConfig> CREATOR =
14155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        new Creator<WifiP2pConfig>() {
14255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            public WifiP2pConfig createFromParcel(Parcel in) {
14355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                WifiP2pConfig config = new WifiP2pConfig();
14455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                config.deviceAddress = in.readString();
145651cdfcbac6245f570475991588ddc2d30265e8dIrfan Sheriff                config.wps = (WpsInfo) in.readParcelable(null);
14655bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                config.groupOwnerIntent = in.readInt();
1470879d03f0a5caa108a0a7320442d57629f9ced81Yoshihiko Ikenaga                config.netId = in.readInt();
14855bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                return config;
14955bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
15055bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync
15155bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            public WifiP2pConfig[] newArray(int size) {
15255bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync                return new WifiP2pConfig[size];
15355bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync            }
15455bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync        };
15555bc5f3e0408bcb5a39a6732de0b2d1aa99a55berepo sync}
156