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