summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/wifi/WifiNative.java71
-rw-r--r--service/jni/com_android_server_wifi_WifiNative.cpp136
-rw-r--r--service/jni/wifi_hal_stub.h14
-rw-r--r--service/lib/wifi_hal_stub.cpp28
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(&params, 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, &params, 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(&params, 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, &params);
- }
- 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) {