wifi-hal: Send link stats after all events are received
Send link stats to framework after all the related events are received
in wifi-hal.
Change-Id: I1222307cb9189a91ba8ae5c42c7032daaa2e9df6
CRs-fixed: 1083922
diff --git a/qcwcn/wifi_hal/llstats.cpp b/qcwcn/wifi_hal/llstats.cpp
index 7183eb9..284e70f 100644
--- a/qcwcn/wifi_hal/llstats.cpp
+++ b/qcwcn/wifi_hal/llstats.cpp
@@ -857,6 +857,31 @@
return WifiCommand::requestResponse(mMsg);
}
+void LLStatsCommand::notifyResponse()
+{
+ mHandler.on_link_stats_results(mRequestId,
+ mResultsParams.iface_stat, mNumRadios,
+ mResultsParams.radio_stat);
+ if(mResultsParams.radio_stat)
+ {
+ if (mResultsParams.radio_stat->tx_time_per_levels)
+ {
+ free(mResultsParams.radio_stat->tx_time_per_levels);
+ mResultsParams.radio_stat->tx_time_per_levels = NULL;
+ }
+ free(mResultsParams.radio_stat);
+ mResultsParams.radio_stat = NULL;
+ mRadioStatsSize = 0;
+ mNumRadios = 0;
+ }
+ if(mResultsParams.iface_stat)
+ {
+ free(mResultsParams.iface_stat);
+ mResultsParams.iface_stat = NULL;
+ }
+}
+
+
int LLStatsCommand::handleResponse(WifiEvent &reply)
{
unsigned i=0;
@@ -1032,28 +1057,6 @@
ALOGV("%s: numPeers is %u\n", __FUNCTION__,
mResultsParams.iface_stat->num_peers);
#endif
- if(mResultsParams.iface_stat->num_peers == 0)
- {
- // Number of Radios are 1 for now
- mHandler.on_link_stats_results(mRequestId,
- mResultsParams.iface_stat,
- mNumRadios,
- mResultsParams.radio_stat);
- if(mResultsParams.radio_stat)
- {
- if (mResultsParams.radio_stat->tx_time_per_levels)
- {
- free(mResultsParams.radio_stat->tx_time_per_levels);
- mResultsParams.radio_stat->tx_time_per_levels = NULL;
- }
- free(mResultsParams.radio_stat);
- mResultsParams.radio_stat = NULL;
- mRadioStatsSize = 0;
- mNumRadios = 0;
- }
- free(mResultsParams.iface_stat);
- mResultsParams.iface_stat = NULL;
- }
}
}
break;
@@ -1166,27 +1169,6 @@
}
}
- // Number of Radios are 1 for now
- mHandler.on_link_stats_results(mRequestId,
- mResultsParams.iface_stat, mNumRadios,
- mResultsParams.radio_stat);
- if(mResultsParams.radio_stat)
- {
- if (mResultsParams.radio_stat->tx_time_per_levels)
- {
- free(mResultsParams.radio_stat->tx_time_per_levels);
- mResultsParams.radio_stat->tx_time_per_levels = NULL;
- }
- free(mResultsParams.radio_stat);
- mResultsParams.radio_stat = NULL;
- mRadioStatsSize = 0;
- mNumRadios = 0;
- }
- if(mResultsParams.iface_stat)
- {
- free(mResultsParams.iface_stat);
- mResultsParams.iface_stat = NULL;
- }
}
break;
@@ -1369,6 +1351,9 @@
if (ret < 0)
goto cleanup;
+ if (ret == 0)
+ LLCommand->notifyResponse();
+
cleanup:
return (wifi_error)ret;
}
diff --git a/qcwcn/wifi_hal/llstatscommand.h b/qcwcn/wifi_hal/llstatscommand.h
index 9202f3a..64aba60 100644
--- a/qcwcn/wifi_hal/llstatscommand.h
+++ b/qcwcn/wifi_hal/llstatscommand.h
@@ -103,6 +103,8 @@
virtual int requestResponse();
+ virtual void notifyResponse();
+
virtual int handleResponse(WifiEvent &reply);
virtual void getClearRspParams(u32 *stats_clear_rsp_mask, u8 *stop_rsp);