WifiNative.java revision b0c1b80f471bd49af60e7b78161d814e355a6972
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.net.wifi;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Native calls for sending requests to the supplicant daemon, and for
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * receiving asynchronous events. All methods of the form "xxxxCommand()"
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must be single-threaded, to avoid requests and responses initiated
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * from multiple threads from being intermingled.
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p/>
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Note that methods whose names are not of the form "xxxCommand()" do
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * not talk to the supplicant daemon.
27a8fbe1fb74d3bd40b73c90c85ac25e5176475ca5Irfan Sheriff * Also, note that all WifiNative calls should happen in the
28a8fbe1fb74d3bd40b73c90c85ac25e5176475ca5Irfan Sheriff * WifiStateTracker class except for waitForEvent() call which is
29a8fbe1fb74d3bd40b73c90c85ac25e5176475ca5Irfan Sheriff * on a separate monitor channel for WifiMonitor
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * {@hide}
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class WifiNative {
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int BLUETOOTH_COEXISTENCE_MODE_ENABLED = 0;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int BLUETOOTH_COEXISTENCE_MODE_DISABLED = 1;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    static final int BLUETOOTH_COEXISTENCE_MODE_SENSE = 2;
385d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static String getErrorString(int errorCode);
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean loadDriver();
42a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff
43a2a1b911a31dd94ee75e94845f762b91f1db1368Irfan Sheriff    public native static boolean isDriverLoaded();
445d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean unloadDriver();
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean startSupplicant();
485d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff
495d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff    /* Does a graceful shutdown of supplicant.
505d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff     *
515d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff     * Note that underneath we use a harsh-sounding "terminate" supplicant command
525d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff     * for a graceful stop and a mild-sounding "stop" interface
535d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff     * to kill the process
545d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff     */
555d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff    public native static boolean stopSupplicant();
565d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff
575d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff    /* Sends a kill signal to supplicant. To be used when we have lost connection
585d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff       or when the supplicant is hung */
5996071a7031bac06e3f249610b010ad5651efe8aeIrfan Sheriff    public native static boolean killSupplicant();
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean connectToSupplicant();
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static void closeSupplicantConnection();
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean pingCommand();
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
67a5ec95cdb1a7d2024249277dff1f99d0046c9b56Mike Lockwood    public native static boolean scanCommand(boolean forceActive);
685d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean setScanModeCommand(boolean setActive);
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static String listNetworksCommand();
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static int addNetworkCommand();
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean setNetworkVariableCommand(int netId, String name, String value);
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static String getNetworkVariableCommand(int netId, String name);
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean removeNetworkCommand(int netId);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean enableNetworkCommand(int netId, boolean disableOthers);
825d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean disableNetworkCommand(int netId);
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean reconnectCommand();
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean reassociateCommand();
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean disconnectCommand();
9096071a7031bac06e3f249610b010ad5651efe8aeIrfan Sheriff
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static String statusCommand();
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static int getRssiCommand();
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
9591f22f901bee5d52d81ca4070a1b187ac8b90dadRobert Greenwalt    public native static int getRssiApproxCommand();
9691f22f901bee5d52d81ca4070a1b187ac8b90dadRobert Greenwalt
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static int getLinkSpeedCommand();
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static String getMacAddressCommand();
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static String scanResultsCommand();
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean startDriverCommand();
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean stopDriverCommand();
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
107b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff
108b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff    /**
109b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff     * Start filtering out Multicast V4 packets
110b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff     * @return {@code true} if the operation succeeded, {@code false} otherwise
111b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff     */
112b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff    public native static boolean startFilteringMulticastV4Packets();
113b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff
114b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff    /**
115b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff     * Stop filtering out Multicast V4 packets.
116b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff     * @return {@code true} if the operation succeeded, {@code false} otherwise
117b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff     */
118b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff    public native static boolean stopFilteringMulticastV4Packets();
119b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
121b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff     * Start filtering out Multicast V6 packets
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return {@code true} if the operation succeeded, {@code false} otherwise
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
124b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff    public native static boolean startFilteringMulticastV6Packets();
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
127b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff     * Stop filtering out Multicast V6 packets.
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return {@code true} if the operation succeeded, {@code false} otherwise
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
130b0c1b80f471bd49af60e7b78161d814e355a6972Irfan Sheriff    public native static boolean stopFilteringMulticastV6Packets();
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean setPowerModeCommand(int mode);
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
13425c9bf2396ceb48fc5cfd5c1dd58aa4d4750d056Irfan Sheriff    public native static int getBandCommand();
13525c9bf2396ceb48fc5cfd5c1dd58aa4d4750d056Irfan Sheriff
13625c9bf2396ceb48fc5cfd5c1dd58aa4d4750d056Irfan Sheriff    public native static boolean setBandCommand(int band);
13725c9bf2396ceb48fc5cfd5c1dd58aa4d4750d056Irfan Sheriff
138ea8bd1d1676dd96f8f9726bb8f67fa18dec7b9c1Mikael Kanstrup    public native static int getPowerModeCommand();
139ea8bd1d1676dd96f8f9726bb8f67fa18dec7b9c1Mikael Kanstrup
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Sets the bluetooth coexistence mode.
1425d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff     *
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @param mode One of {@link #BLUETOOTH_COEXISTENCE_MODE_DISABLED},
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            {@link #BLUETOOTH_COEXISTENCE_MODE_ENABLED}, or
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     *            {@link #BLUETOOTH_COEXISTENCE_MODE_SENSE}.
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return Whether the mode was successfully set.
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean setBluetoothCoexistenceModeCommand(int mode);
149b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project
150b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    /**
151b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * Enable or disable Bluetooth coexistence scan mode. When this mode is on,
152b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * some of the low-level scan parameters used by the driver are changed to
153b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * reduce interference with A2DP streaming.
154b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     *
155b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * @param isSet whether to enable or disable this mode
156b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     * @return {@code true} if the command succeeded, {@code false} otherwise.
157b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project     */
158b2a3dd88a53cc8c6d19f6dc8ec4f3d6c4abd9b54The Android Open Source Project    public native static boolean setBluetoothCoexistenceScanModeCommand(boolean setCoexScanMode);
1595d001ea0271eeedb05984ac00d5e41d767f0cb87Irfan Sheriff
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean saveConfigCommand();
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean reloadConfigCommand();
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean setScanResultHandlingCommand(int mode);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean addToBlacklistCommand(String bssid);
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static boolean clearBlacklistCommand();
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1705ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff    public native static boolean startWpsPbcCommand(String bssid);
1715ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff
17202fb46a297c4f645f2a30b574151401dd0978521Irfan Sheriff    public native static boolean startWpsWithPinFromAccessPointCommand(String bssid, String apPin);
173f235c5ab91b040b88ceb61beb819e15f1b19e9e4Irfan Sheriff
17402fb46a297c4f645f2a30b574151401dd0978521Irfan Sheriff    public native static String startWpsWithPinFromDeviceCommand(String bssid);
1755ee89800bee7c6c755778795a536e0e2f12b85ffIrfan Sheriff
1765876a4273e67271f0eca607af9520f7e5abbe4f3Irfan Sheriff    public native static boolean setSuspendOptimizationsCommand(boolean enabled);
1775876a4273e67271f0eca607af9520f7e5abbe4f3Irfan Sheriff
178ed4f28b492da3ff140bbaabbbda798a08c40ea5bIrfan Sheriff    public native static boolean setCountryCodeCommand(String countryCode);
179ed4f28b492da3ff140bbaabbbda798a08c40ea5bIrfan Sheriff
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Wait for the supplicant to send an event, returning the event string.
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * @return the event string sent by the supplicant.
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public native static String waitForEvent();
185fcc0845cf9990470d498dcaa036f0ae6487ddf34Irfan Sheriff
1862b7f63887e39079a52592fb4507d8daaf90e8afaIrfan Sheriff    public native static void enableBackgroundScanCommand(boolean enable);
1872b7f63887e39079a52592fb4507d8daaf90e8afaIrfan Sheriff
1882b7f63887e39079a52592fb4507d8daaf90e8afaIrfan Sheriff    public native static void setScanIntervalCommand(int scanInterval);
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
190