[7872] wlbt : [Katmai] HAL Changes for ePNO Implementation.
HAL Changes for epNO Implementation for Connected as well
as Disconnected Mode as per Android N requirements.
Change-Id: I4c47c4663d968910dea52e9cfefbd7b0b0cf8589
SCSC-BugId:SSB-25809
Signed-off-by: Mohit Ghuley <mohit.ghuley@samsung.com>
diff --git a/gscan.cpp b/gscan.cpp
index 2904e7b..b247725 100755
--- a/gscan.cpp
+++ b/gscan.cpp
@@ -92,11 +92,17 @@
} GSCAN_ATTRIBUTE;
typedef enum {
- EPNO_ATTRIBUTE_SSID_LIST,
+ EPNO_ATTRIBUTE_MINIMUM_5G_RSSI,
+ EPNO_ATTRIBUTE_MINIMUM_2G_RSSI,
+ EPNO_ATTRIBUTE_INITIAL_SCORE_MAX,
+ EPNO_ATTRIBUTE_CUR_CONN_BONUS,
+ EPNO_ATTRIBUTE_SAME_NETWORK_BONUS,
+ EPNO_ATTRIBUTE_SECURE_BONUS,
+ EPNO_ATTRIBUTE_5G_BONUS,
EPNO_ATTRIBUTE_SSID_NUM,
+ EPNO_ATTRIBUTE_SSID_LIST,
EPNO_ATTRIBUTE_SSID,
EPNO_ATTRIBUTE_SSID_LEN,
- EPNO_ATTRIBUTE_RSSI,
EPNO_ATTRIBUTE_FLAGS,
EPNO_ATTRIBUTE_AUTH,
EPNO_ATTRIBUTE_MAX
@@ -1117,7 +1123,6 @@
}
int createSetupRequest(WifiRequest& request) {
- int rssi_threshold;
int result = request.create(GOOGLE_OUI, SLSI_NL80211_VENDOR_SUBCMD_SET_EPNO_LIST);
if (result < 0) {
return result;
@@ -1132,23 +1137,60 @@
request.attr_end(data);
return result;
}
-
- rssi_threshold = epno_params->min5GHz_rssi < epno_params->min24GHz_rssi ? epno_params->min5GHz_rssi : epno_params->min24GHz_rssi;
+ result = request.put_u16(EPNO_ATTRIBUTE_MINIMUM_5G_RSSI, epno_params->min5GHz_rssi);
+ if (result < 0) {
+ return result;
+ }
+ result = request.put_u16(EPNO_ATTRIBUTE_MINIMUM_2G_RSSI, epno_params->min24GHz_rssi);
+ if (result < 0) {
+ return result;
+ }
+ result = request.put_u16(EPNO_ATTRIBUTE_INITIAL_SCORE_MAX, epno_params->initial_score_max);
+ if (result < 0) {
+ return result;
+ }
+ result = request.put_u8(EPNO_ATTRIBUTE_CUR_CONN_BONUS, epno_params->current_connection_bonus);
+ if (result < 0) {
+ return result;
+ }
+ result = request.put_u8(EPNO_ATTRIBUTE_SAME_NETWORK_BONUS, epno_params->same_network_bonus);
+ if (result < 0) {
+ return result;
+ }
+ result = request.put_u8(EPNO_ATTRIBUTE_SECURE_BONUS, epno_params->secure_bonus);
+ if (result < 0) {
+ return result;
+ }
+ result = request.put_u8(EPNO_ATTRIBUTE_5G_BONUS, epno_params->band5GHz_bonus);
+ if (result < 0) {
+ return result;
+ }
result = request.put_u8(EPNO_ATTRIBUTE_SSID_NUM, epno_params->num_networks);
if (result < 0) {
return result;
}
+ ALOGI("ePNO [min5GHz_rssi:%d min24GHz_rssi:%d initial_score_max:%d current_connection_bonus:%d same_network_bonus:%d secure_bonus:%d band5GHz_bonus:%d num_networks:%d]",
+ epno_params->min5GHz_rssi,
+ epno_params->min24GHz_rssi,
+ epno_params->initial_score_max,
+ epno_params->current_connection_bonus,
+ epno_params->same_network_bonus,
+ epno_params->secure_bonus,
+ epno_params->band5GHz_bonus,
+ epno_params->num_networks);
+
struct nlattr * attr = request.attr_start(EPNO_ATTRIBUTE_SSID_LIST);
for (int i = 0; i < epno_params->num_networks; i++) {
nlattr *attr2 = request.attr_start(i);
if (attr2 == NULL) {
return WIFI_ERROR_OUT_OF_MEMORY;
}
- result = request.put(EPNO_ATTRIBUTE_SSID, epno_params->networks[i].ssid, 32);
- ALOGI("ePNO [SSID:%s rssi_thresh:%d flags:%d auth:%d]", epno_params->networks[i].ssid,
- (signed char)rssi_threshold, epno_params->networks[i].flags,
- epno_params->networks[i].auth_bit_field);
+ result = request.put_u16(EPNO_ATTRIBUTE_FLAGS, epno_params->networks[i].flags);
+ if (result < 0) {
+ return result;
+ }
+ result = request.put_u8(EPNO_ATTRIBUTE_AUTH, epno_params->networks[i].auth_bit_field);
if (result < 0) {
return result;
}
@@ -1156,16 +1198,10 @@
if (result < 0) {
return result;
}
-
- result = request.put_u8(EPNO_ATTRIBUTE_RSSI, rssi_threshold);
- if (result < 0) {
- return result;
- }
- result = request.put_u8(EPNO_ATTRIBUTE_FLAGS, epno_params->networks[i].flags);
- if (result < 0) {
- return result;
- }
- result = request.put_u8(EPNO_ATTRIBUTE_AUTH, epno_params->networks[i].auth_bit_field);
+ result = request.put(EPNO_ATTRIBUTE_SSID, epno_params->networks[i].ssid, strlen(epno_params->networks[i].ssid));
+ ALOGI("ePNO [SSID:%s flags:%d auth:%d]", epno_params->networks[i].ssid,
+ epno_params->networks[i].flags,
+ epno_params->networks[i].auth_bit_field);
if (result < 0) {
return result;
}
@@ -1238,7 +1274,6 @@
wifi_epno_handler handler)
{
wifi_handle handle = getWifiHandle(iface);
-
ePNOCommand *cmd = new ePNOCommand(iface, id, (wifi_epno_params *)epno_params, handler);
wifi_register_cmd(handle, id, cmd);
wifi_error result = (wifi_error)cmd->start();
@@ -1503,4 +1538,4 @@
//release the reference of command as well
cmd->releaseRef();
return result;
-}
\ No newline at end of file
+}