diff options
-rw-r--r-- | service/java/com/android/server/wifi/WifiNative.java | 71 | ||||
-rw-r--r-- | service/jni/com_android_server_wifi_WifiNative.cpp | 136 | ||||
-rw-r--r-- | service/jni/wifi_hal_stub.h | 14 | ||||
-rw-r--r-- | service/lib/wifi_hal_stub.cpp | 28 |
4 files changed, 51 insertions, 198 deletions
diff --git a/service/java/com/android/server/wifi/WifiNative.java b/service/java/com/android/server/wifi/WifiNative.java index 4c62b664e..8166328dc 100644 --- a/service/java/com/android/server/wifi/WifiNative.java +++ b/service/java/com/android/server/wifi/WifiNative.java @@ -16,21 +16,21 @@ package com.android.server.wifi; -import android.content.Context; -import android.content.Intent; import android.app.AlarmManager; import android.app.PendingIntent; -import android.content.IntentFilter; import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; import android.net.wifi.RttManager; import android.net.wifi.ScanResult; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiEnterpriseConfig; import android.net.wifi.WifiLinkLayerStats; -import android.net.wifi.WifiWakeReasonAndCounts; import android.net.wifi.WifiManager; import android.net.wifi.WifiScanner; import android.net.wifi.WifiSsid; +import android.net.wifi.WifiWakeReasonAndCounts; import android.net.wifi.WpsInfo; import android.net.wifi.p2p.WifiP2pConfig; import android.net.wifi.p2p.WifiP2pGroup; @@ -1738,28 +1738,25 @@ public class WifiNative { void onScanRestarted(); } - // Callback from native - private static void onScanResultsAvailable(int id) { - ScanEventHandler handler = sScanEventHandler; - if (handler != null) { - handler.onScanResultsAvailable(); - } - } - /* scan status, keep these values in sync with gscan.h */ - private static int WIFI_SCAN_BUFFER_FULL = 0; - private static int WIFI_SCAN_COMPLETE = 1; + private static final int WIFI_SCAN_RESULTS_AVAILABLE = 0; + private static final int WIFI_SCAN_THRESHOLD_NUM_SCANS = 1; + private static final int WIFI_SCAN_THRESHOLD_PERCENT = 2; + private static final int WIFI_SCAN_DISABLED = 3; // Callback from native - private static void onScanStatus(int status) { + private static void onScanStatus(int id, int event) { ScanEventHandler handler = sScanEventHandler; - if (status == WIFI_SCAN_BUFFER_FULL) { - /* we have a separate event to take care of this */ - } else if (status == WIFI_SCAN_COMPLETE) { + if (event == WIFI_SCAN_RESULTS_AVAILABLE || event == WIFI_SCAN_THRESHOLD_NUM_SCANS + || event == WIFI_SCAN_THRESHOLD_PERCENT) { if (handler != null) { + // TODO pass event back to framework handler.onScanStatus(); } } + else if (event == WIFI_SCAN_DISABLED) { + // TODO signal that scan has been disabled + } } public static WifiSsid createWifiSsid(byte[] rawSsid) { @@ -1852,7 +1849,8 @@ public class WifiNative { } // Callback from native - private static void onFullScanResult(int id, ScanResult result, byte bytes[]) { + private static void onFullScanResult(int id, ScanResult result, byte bytes[], + int bucketsScanned) { if (DBG) Log.i(TAG, "Got a full scan results event, ssid = " + result.SSID + ", " + "num = " + bytes.length); @@ -2532,7 +2530,7 @@ public class WifiNative { public static class WifiPnoNetwork { String SSID; - int rssi_threshold; + int rssi_threshold; // TODO remove int flags; int auth; String configKey; // kept for reference @@ -2627,6 +2625,7 @@ public class WifiNative { } } + // TODO remove public static class WifiLazyRoamParams { int A_band_boost_threshold; int A_band_penalty_threshold; @@ -2653,18 +2652,9 @@ public class WifiNative { } } - private native static boolean setLazyRoamNative(int iface, int id, - boolean enabled, WifiLazyRoamParams param); - + // TODO remove public boolean setLazyRoam(boolean enabled, WifiLazyRoamParams params) { - synchronized (sLock) { - if (isHalStarted()) { - sPnoCmdId = getNewCmdIdLocked(); - return setLazyRoamNative(sWlan0Index, sPnoCmdId, enabled, params); - } else { - return false; - } - } + return false; } private native static boolean setBssidBlacklistNative(int iface, int id, @@ -2687,24 +2677,9 @@ public class WifiNative { } } - private native static boolean setSsidWhitelistNative(int iface, int id, String list[]); - + // TODO remove public boolean setSsidWhitelist(String list[]) { - int size = 0; - if (list != null) { - size = list.length; - } - Log.e(TAG, "setSsidWhitelist cmd " + sPnoCmdId + " size " + size); - - synchronized (sLock) { - if (isHalStarted()) { - sPnoCmdId = getNewCmdIdLocked(); - - return setSsidWhitelistNative(sWlan0Index, sPnoCmdId, list); - } else { - return false; - } - } + return false; } private native static int startSendingOffloadedPacketNative(int iface, int idx, diff --git a/service/jni/com_android_server_wifi_WifiNative.cpp b/service/jni/com_android_server_wifi_WifiNative.cpp index 874502cd7..333d052aa 100644 --- a/service/jni/com_android_server_wifi_WifiNative.cpp +++ b/service/jni/com_android_server_wifi_WifiNative.cpp @@ -94,10 +94,6 @@ int init_wifi_hal_func_table(wifi_hal_fn *hal_fn) { hal_fn->wifi_get_logger_supported_feature_set = wifi_get_logger_supported_feature_set_stub; hal_fn->wifi_get_ring_data = wifi_get_ring_data_stub; hal_fn->wifi_get_driver_version = wifi_get_driver_version_stub; - hal_fn->wifi_set_ssid_white_list = wifi_set_ssid_white_list_stub; - hal_fn->wifi_set_gscan_roam_params = wifi_set_gscan_roam_params_stub; - hal_fn->wifi_set_bssid_preference = wifi_set_bssid_preference_stub; - hal_fn->wifi_enable_lazy_roam = wifi_enable_lazy_roam_stub; hal_fn->wifi_set_bssid_blacklist = wifi_set_bssid_blacklist_stub; hal_fn->wifi_start_sending_offloaded_packet = wifi_start_sending_offloaded_packet_stub; hal_fn->wifi_stop_sending_offloaded_packet = wifi_stop_sending_offloaded_packet_stub; @@ -481,25 +477,17 @@ static jstring android_net_wifi_getInterfaceName(JNIEnv *env, jclass cls, jint i } -static void onScanResultsAvailable(wifi_request_id id, unsigned num_results) { - - JNIHelper helper(mVM); - - // ALOGD("onScanResultsAvailable called, vm = %p, obj = %p, env = %p", mVM, mCls, env); - - helper.reportEvent(mCls, "onScanResultsAvailable", "(I)V", id); -} - -static void onScanEvent(wifi_scan_event event, unsigned status) { +static void onScanEvent(wifi_request_id id, wifi_scan_event event) { JNIHelper helper(mVM); // ALOGD("onScanStatus called, vm = %p, obj = %p, env = %p", mVM, mCls, env); - helper.reportEvent(mCls, "onScanStatus", "(I)V", event); + helper.reportEvent(mCls, "onScanStatus", "(II)V", id, event); } -static void onFullScanResult(wifi_request_id id, wifi_scan_result *result) { + static void onFullScanResult(wifi_request_id id, wifi_scan_result *result, + unsigned buckets_scanned) { JNIHelper helper(mVM); @@ -522,8 +510,8 @@ static void onFullScanResult(wifi_request_id id, wifi_scan_result *result) { // ALOGD("Returning result"); - helper.reportEvent(mCls, "onFullScanResult", "(ILandroid/net/wifi/ScanResult;[B)V", id, - scanResult.get(), elements.get()); + helper.reportEvent(mCls, "onFullScanResult", "(ILandroid/net/wifi/ScanResult;[BI)V", id, + scanResult.get(), elements.get(), buckets_scanned); } static jboolean android_net_wifi_startScan( @@ -597,7 +585,6 @@ static jboolean android_net_wifi_startScan( wifi_scan_result_handler handler; memset(&handler, 0, sizeof(handler)); - handler.on_scan_results_available = &onScanResultsAvailable; handler.on_full_scan_result = &onFullScanResult; handler.on_scan_event = &onScanEvent; @@ -1904,16 +1891,16 @@ static jboolean android_net_wifi_setPnoListNative( if (list == NULL) { // stop pno - int result = hal_fn.wifi_set_epno_list(id, handle, 0, NULL, handler); + int result = hal_fn.wifi_reset_epno_list(id, handle); ALOGD(" setPnoListNative: STOP result = %d", result); return result >= 0; } - wifi_epno_network net_list[MAX_PNO_SSID]; - memset(&net_list, 0, sizeof(net_list)); + wifi_epno_params params; + memset(¶ms, 0, sizeof(params)); size_t len = helper.getArrayLength((jobjectArray)list); - if (len > (size_t)MAX_PNO_SSID) { + if (len > (size_t)MAX_EPNO_NETWORKS) { return false; } @@ -1953,56 +1940,24 @@ static jboolean android_net_wifi_setPnoListNative( ALOGE("Error setPnoListNative: zero length ssid, skip it"); continue; } - memcpy(net_list[i].ssid, ssid, ssid_len); + memcpy(params.networks[i].ssid, ssid, ssid_len); - int rssit = helper.getIntField(pno_net, "rssi_threshold"); - net_list[i].rssi_threshold = (byte)rssit; int a = helper.getIntField(pno_net, "auth"); - net_list[i].auth_bit_field = a; + params.networks[i].auth_bit_field = a; int f = helper.getIntField(pno_net, "flags"); - net_list[i].flags = f; - ALOGD(" setPnoListNative: idx %u rssi %d/%d auth %x/%x flags %x/%x [%s]", i, - (signed)net_list[i].rssi_threshold, net_list[i].rssi_threshold, - net_list[i].auth_bit_field, a, net_list[i].flags, f, net_list[i].ssid); + params.networks[i].flags = f; + ALOGD(" setPnoListNative: idx %u auth %x/%x flags %x/%x [%s]", i, + params.networks[i].auth_bit_field, a, params.networks[i].flags, f, + params.networks[i].ssid); } + params.num_networks = len; - int result = hal_fn.wifi_set_epno_list(id, handle, len, net_list, handler); + int result = hal_fn.wifi_set_epno_list(id, handle, ¶ms, handler); ALOGD(" setPnoListNative: result %d", result); return result >= 0; } -static jboolean android_net_wifi_setLazyRoam( - JNIEnv *env, jclass cls, jint iface, jint id, jboolean enabled, jobject roam_param) { - - JNIHelper helper(env); - wifi_error status = WIFI_SUCCESS; - wifi_roam_params params; - memset(¶ms, 0, sizeof(params)); - - wifi_interface_handle handle = getIfaceHandle(helper, cls, iface); - ALOGD("configure lazy roam request [%d] = %p", id, handle); - - if (roam_param != NULL) { - params.A_band_boost_threshold = helper.getIntField(roam_param, "A_band_boost_threshold"); - params.A_band_penalty_threshold = helper.getIntField(roam_param, "A_band_penalty_threshold"); - params.A_band_boost_factor = helper.getIntField(roam_param, "A_band_boost_factor"); - params.A_band_penalty_factor = helper.getIntField(roam_param, "A_band_penalty_factor"); - params.A_band_max_boost = helper.getIntField(roam_param, "A_band_max_boost"); - params.lazy_roam_hysteresis = helper.getIntField(roam_param, "lazy_roam_hysteresis"); - params.alert_roam_rssi_trigger = helper.getIntField(roam_param, "alert_roam_rssi_trigger"); - status = hal_fn.wifi_set_gscan_roam_params(id, handle, ¶ms); - } - ALOGD("android_net_wifi_setLazyRoam configured params status=%d\n", status); - - if (status >= 0) { - int doEnable = enabled ? 1 : 0; - status = hal_fn.wifi_enable_lazy_roam(id, handle, doEnable); - ALOGD("android_net_wifi_setLazyRoam enabled roam status=%d\n", status); - } - return status >= 0; -} - static jboolean android_net_wifi_setBssidBlacklist( JNIEnv *env, jclass cls, jint iface, jint id, jobject list) { @@ -2051,55 +2006,6 @@ static jboolean android_net_wifi_setBssidBlacklist( return hal_fn.wifi_set_bssid_blacklist(id, handle, params) == WIFI_SUCCESS; } -static jboolean android_net_wifi_setSsidWhitelist( - JNIEnv *env, jclass cls, jint iface, jint id, jobject list) { - - JNIHelper helper(env); - wifi_interface_handle handle = getIfaceHandle(helper, cls, iface); - ALOGD("configure SSID white list request [%d] = %p", id, handle); - wifi_ssid *ssids = NULL; - int num_ssids = 0; - if (list != NULL) { - size_t len = helper.getArrayLength((jobjectArray)list); - if (len > 0) { - ssids = (wifi_ssid *)malloc(len * sizeof (wifi_ssid)); - if (!ssids) return false; - memset(ssids, 0, len * sizeof (wifi_ssid)); - for (unsigned int i = 0; i < len; i++) { - - JNIObject<jobject> jssid = helper.getObjectArrayElement(list, i); - if (jssid == NULL) { - ALOGE("configure SSID whitelist: could not get element %d", i); - free(ssids); - return false; - } - - ScopedUtfChars chars(env, (jstring)jssid.get()); - const char *utf = chars.c_str(); - if (utf == NULL) { - ALOGE("Error getting sssid"); - free(ssids); - return false; - } - - int slen = strnlen(utf, 33); - if (slen <= 0 || slen > 32) { - ALOGE("Error wrong ssid length %d", slen); - free(ssids); - return false; - } - - memcpy(ssids[i].ssid, utf, slen); - num_ssids++; - ALOGD("SSID white list: added ssid %s", utf); - } - } - } - - ALOGD("android_net_wifi_setSsidWhitelist Added %d sssids", num_ssids); - return hal_fn.wifi_set_ssid_white_list(id, handle, num_ssids, ssids) == WIFI_SUCCESS; -} - static jint android_net_wifi_start_sending_offloaded_packet(JNIEnv *env, jclass cls, jint iface, jint idx, jbyteArray srcMac, jbyteArray dstMac, jbyteArray pkt, jint period) { JNIHelper helper(env); @@ -2107,7 +2013,7 @@ static jint android_net_wifi_start_sending_offloaded_packet(JNIEnv *env, jclass ALOGD("Start packet offload [%d] = %p", idx, handle); wifi_error ret; wifi_request_id id = idx; - + ScopedBytesRO pktBytes(env, pkt), srcMacBytes(env, srcMac), dstMacBytes(env, dstMac); byte * pkt_data = (byte*) pktBytes.get(); @@ -2342,12 +2248,8 @@ static JNINativeMethod gWifiMethods[] = { {"getRingBufferDataNative", "(ILjava/lang/String;)Z", (void*) android_net_wifi_get_ring_buffer_data}, {"getFwMemoryDumpNative","(I)Z", (void*) android_net_wifi_get_fw_memory_dump}, - { "setLazyRoamNative", "(IIZLcom/android/server/wifi/WifiNative$WifiLazyRoamParams;)Z", - (void*) android_net_wifi_setLazyRoam}, { "setBssidBlacklistNative", "(II[Ljava/lang/String;)Z", (void*)android_net_wifi_setBssidBlacklist}, - { "setSsidWhitelistNative", "(II[Ljava/lang/String;)Z", - (void*)android_net_wifi_setSsidWhitelist}, {"setLoggingEventHandlerNative", "(II)Z", (void *) android_net_wifi_set_log_handler}, {"resetLogHandlerNative", "(II)Z", (void *) android_net_wifi_reset_log_handler}, { "startSendingOffloadedPacketNative", "(II[B[B[BI)I", diff --git a/service/jni/wifi_hal_stub.h b/service/jni/wifi_hal_stub.h index c001327de..e01d13322 100644 --- a/service/jni/wifi_hal_stub.h +++ b/service/jni/wifi_hal_stub.h @@ -69,8 +69,9 @@ wifi_error wifi_get_rtt_capabilities_stub(wifi_interface_handle iface, wifi_error wifi_set_nodfs_flag_stub(wifi_interface_handle iface, u32 nodfs); wifi_error wifi_start_logging_stub(wifi_interface_handle iface, u32 verbose_level, u32 flags, u32 max_interval_sec, u32 min_data_size, char *buffer_name); -wifi_error wifi_set_epno_list_stub(int id, wifi_interface_info *iface, int num_networks, - wifi_epno_network *networks, wifi_epno_handler handler); +wifi_error wifi_set_epno_list_stub(wifi_request_id id, wifi_interface_info *iface, + const wifi_epno_params *params, wifi_epno_handler handler); +wifi_error wifi_reset_epno_list_stub(wifi_request_id id, wifi_interface_info *iface); wifi_error wifi_set_country_code_stub(wifi_interface_handle iface, const char *code); wifi_error wifi_get_firmware_memory_dump_stub( wifi_interface_handle iface, wifi_firmware_memory_dump_handler handler); @@ -87,8 +88,6 @@ wifi_error wifi_get_ring_buffers_status_stub(wifi_interface_handle iface, wifi_error wifi_get_logger_supported_feature_set_stub(wifi_interface_handle iface, unsigned int *support); wifi_error wifi_get_ring_data_stub(wifi_interface_handle iface, char *ring_name); -wifi_error wifi_set_epno_list_stub(int id, wifi_interface_info *iface, int num_networks, - wifi_epno_network *networks, wifi_epno_handler handler); wifi_error wifi_enable_tdls_stub(wifi_interface_handle iface, mac_addr addr, wifi_tdls_params *params, wifi_tdls_handler handler); wifi_error wifi_disable_tdls_stub(wifi_interface_handle iface, mac_addr addr); @@ -101,13 +100,6 @@ wifi_error wifi_get_driver_version_stub(wifi_interface_handle iface, char *buffe wifi_error wifi_set_country_code_stub(wifi_interface_handle iface, const char *code); wifi_error wifi_set_bssid_blacklist_stub(wifi_request_id id, wifi_interface_handle iface, wifi_bssid_params params); -wifi_error wifi_enable_lazy_roam_stub(wifi_request_id id, wifi_interface_handle iface, int enable); -wifi_error wifi_set_bssid_preference_stub(wifi_request_id id, wifi_interface_handle iface, - int num_bssid, wifi_bssid_preference *prefs); -wifi_error wifi_set_gscan_roam_params_stub(wifi_request_id id, wifi_interface_handle iface, - wifi_roam_params * params); -wifi_error wifi_set_ssid_white_list_stub(wifi_request_id id, wifi_interface_handle iface, - int num_networks, wifi_ssid *ssids); wifi_error wifi_start_sending_offloaded_packet_stub(wifi_request_id id, wifi_interface_handle iface, u8 *ip_packet, u16 ip_packet_len, u8 *src_mac_addr, u8 *dst_mac_addr, u32 period_msec); diff --git a/service/lib/wifi_hal_stub.cpp b/service/lib/wifi_hal_stub.cpp index bc923d58f..3ccaf0826 100644 --- a/service/lib/wifi_hal_stub.cpp +++ b/service/lib/wifi_hal_stub.cpp @@ -158,8 +158,12 @@ wifi_error wifi_start_logging_stub(wifi_interface_handle iface, u32 verbose_leve return WIFI_ERROR_NOT_SUPPORTED; } -wifi_error wifi_set_epno_list_stub(int id, wifi_interface_info *iface, int num_networks, - wifi_epno_network *networks, wifi_epno_handler handler) { +wifi_error wifi_set_epno_list_stub(int id, wifi_interface_info *iface, + const wifi_epno_params *params, wifi_epno_handler handler) { + return WIFI_ERROR_NOT_SUPPORTED; +} + +wifi_error wifi_reset_epno_list_stub(int id, wifi_interface_info *iface) { return WIFI_ERROR_NOT_SUPPORTED; } @@ -238,26 +242,6 @@ wifi_error wifi_set_bssid_blacklist_stub(wifi_request_id id, wifi_interface_hand return WIFI_ERROR_NOT_SUPPORTED; } -wifi_error wifi_enable_lazy_roam_stub(wifi_request_id id, wifi_interface_handle iface, int enable) -{ - return WIFI_ERROR_NOT_SUPPORTED; -} - -wifi_error wifi_set_bssid_preference_stub(wifi_request_id id, wifi_interface_handle iface, - int num_bssid, wifi_bssid_preference *prefs) { - return WIFI_ERROR_NOT_SUPPORTED; -} - -wifi_error wifi_set_gscan_roam_params_stub(wifi_request_id id, wifi_interface_handle iface, - wifi_roam_params * params) { - return WIFI_ERROR_NOT_SUPPORTED; -} - -wifi_error wifi_set_ssid_white_list_stub(wifi_request_id id, wifi_interface_handle iface, - int num_networks, wifi_ssid *ssids) { - return WIFI_ERROR_NOT_SUPPORTED; -} - wifi_error wifi_start_sending_offloaded_packet_stub(wifi_request_id id, wifi_interface_handle iface, u8 *ip_packet, u16 ip_packet_len, u8 *src_mac_addr, u8 *dst_mac_addr, u32 period_msec) { |