Merge "halutil updates for link layer statistics" into lmp-dev
Pierre Vandwalle [Tue, 26 Aug 2014 20:46:42 +0000 (20:46 +0000)]
bcmdhd/wifi_hal/link_layer_stats.cpp

index 82c5502..3226da8 100644 (file)
@@ -40,7 +40,7 @@ public:
     { }
 
     virtual int create() {
-        // ALOGD("Creating message to get link statistics; iface = %d", mIfaceInfo->id);
+        // ALOGI("Creating message to get link statistics; iface = %d", mIfaceInfo->id);
 
         int ret = mMsg.create(GOOGLE_OUI, LSTATS_SUBCMD_GET_INFO);
         if (ret < 0) {
@@ -54,7 +54,7 @@ public:
 protected:
     virtual int handleResponse(WifiEvent& reply) {
 
-        // ALOGD("In GetLinkStatsCommand::handleResponse");
+        // ALOGI("In GetLinkStatsCommand::handleResponse");
 
         if (reply.get_cmd() != NL80211_CMD_VENDOR) {
             ALOGD("Ignoring reply with cmd = %d", reply.get_cmd());
@@ -64,16 +64,19 @@ protected:
         int id = reply.get_vendor_id();
         int subcmd = reply.get_vendor_subcmd();
 
-        // ALOGD("Id = %0x, subcmd = %d", id, subcmd);
+        // ALOGI("Id = %0x, subcmd = %d", id, subcmd);
 
         void *data = reply.get_vendor_data();
         int len = reply.get_vendor_data_len();
-
-        if (len == sizeof(wifi_iface_stat)) {
-            (*mHandler.on_link_stats_results)(id, (wifi_iface_stat *)data, 1, NULL);
-        } else {
-            ALOGE("Invalid reply length: %d", len);
+       int num_chan = ((wifi_radio_stat *)data)->num_channels;
+        if (num_chan > 32) {
+           ALOGE("Incorrect number of channels = %d", num_chan);
+           return NL_SKIP;
         }
+       (*mHandler.on_link_stats_results)(id,
+               (wifi_iface_stat *)((char *)&((wifi_radio_stat *)data)->channels
+               + num_chan*sizeof(wifi_channel_stat)),
+               1, (wifi_radio_stat *)data);
 
         return NL_OK;
     }