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