14af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam/*
24af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * Copyright (C) 2014 The Android Open Source Project
34af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *
44af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * Licensed under the Apache License, Version 2.0 (the "License");
54af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * you may not use this file except in compliance with the License.
64af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * You may obtain a copy of the License at
74af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *
84af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *     http://www.apache.org/licenses/LICENSE-2.0
94af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam *
104af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * Unless required by applicable law or agreed to in writing, software
114af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * distributed under the License is distributed on an "AS IS" BASIS,
124af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * See the License for the specific language governing permissions and
144af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam * limitations under the License.
154af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam */
164af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
174af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "sync.h"
184af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include <utils/Log.h>
194af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "wifi_hal.h"
204af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "nan_i.h"
214af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "nancommand.h"
224af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
234af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
244af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamint NanCommand::isNanResponse()
254af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
264af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    if (mNanVendorEvent == NULL) {
274af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        ALOGE("NULL check failed");
284af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        return WIFI_ERROR_INVALID_ARGS;
294af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
304af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
314af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    NanMsgHeader *pHeader = (NanMsgHeader *)mNanVendorEvent;
324af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
334af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    switch (pHeader->msgId) {
344af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_ERROR_RSP:
354af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_CONFIGURATION_RSP:
364af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_RSP:
374af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_PUBLISH_SERVICE_RSP:
384af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_SUBSCRIBE_SERVICE_RSP:
394af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_RSP:
404af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_TRANSMIT_FOLLOWUP_RSP:
414af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_STATS_RSP:
424af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_ENABLE_RSP:
434af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_DISABLE_RSP:
444af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_TCA_RSP:
454af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    case NAN_MSG_ID_BEACON_SDF_RSP:
4617ee741489e21713642ac29853da176bbd5c4698Subhani Shaik    case NAN_MSG_ID_CAPABILITIES_RSP:
4768f9bfdb788eceecc52e8f2edb330b72fc6a3d41Subhani Shaik    case NAN_MSG_ID_TESTMODE_RSP:
484af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        return 1;
494af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    default:
504af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        return 0;
514af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
524af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam}
534af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
549e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaikstruct verboseTlv {
559e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    NanTlvType tlvType;
569e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    char strTlv[NAN_ERROR_STR_LEN];
579e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik};
589e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
599e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaikstruct verboseTlv tlvToStr[] = {
609e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_SDF_MATCH_FILTER, " SDF match filter"},
619e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_TX_MATCH_FILTER, " Tx match filter"},
629e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_RX_MATCH_FILTER, " Rx match filter"},
639e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_SERVICE_SPECIFIC_INFO,
649e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Service specific info"},
659e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_EXT_SERVICE_SPECIFIC_INFO,
669e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Extended Service specific info"},
679e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_TRANSMIT,
689e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Vendor specific attribute transmit"},
699e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_RECEIVE,
709e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Vendor specific attribute receive"},
719e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_RECEIVE,
729e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Post Nan connectivity capability receive"},
739e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_RECEIVE,
749e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Post Nan discovery attribute receive"},
759e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_BEACON_SDF_PAYLOAD_RECEIVE,
769e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Beacon SDF payload receive"},
779e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
789e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    /* Configuration types */
799e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_CONFIG_FIRST, " Config first"},
809e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_24G_SUPPORT, " 2.4G support"},
819e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_24G_BEACON, " 2.4G beacon"},
829e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_24G_SDF, " 2.4G SDF"},
839e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_24G_RSSI_CLOSE, " 2.4G RSSI close"},
849e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_24G_RSSI_MIDDLE, " 2.4G RSSI middle"},
859e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_24G_RSSI_CLOSE_PROXIMITY,
869e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " 2.4G RSSI close proximity"},
879e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_5G_SUPPORT, " 5G support"},
889e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_5G_BEACON, " 5G beacon"},
899e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_5G_SDF, " 5G SDF"},
909e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_5G_RSSI_CLOSE, " 5G RSSI close"},
919e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_5G_RSSI_MIDDLE, " 5G RSSI middle"},
929e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_5G_RSSI_CLOSE_PROXIMITY,
939e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " 5G RSSI close proximity"},
949e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_SID_BEACON, " SID beacon"},
959e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_HOP_COUNT_LIMIT, " Hop count limit"},
969e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_MASTER_PREFERENCE, " Master preference"},
979e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_CLUSTER_ID_LOW, " Cluster ID low"},
989e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_CLUSTER_ID_HIGH, " Cluster ID high"},
999e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_RSSI_AVERAGING_WINDOW_SIZE,
1009e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " RSSI averaging window size"},
1019e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_CLUSTER_OUI_NETWORK_ID,
1029e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Cluster OUI network ID"},
1039e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_SOURCE_MAC_ADDRESS,
1049e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Source MAC address"},
1059e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_CLUSTER_ATTRIBUTE_IN_SDF,
1069e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Cluster attribute in SDF"},
1079e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_SOCIAL_CHANNEL_SCAN_PARAMS,
1089e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Social channel scan params"},
1099e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_DEBUGGING_FLAGS, " Debugging flags"},
1109e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_TRANSMIT,
1119e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Post nan connectivity capabilities transmit"},
1129e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_TRANSMIT,
1139e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Post nan discovery attribute transmit"},
1149e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_FURTHER_AVAILABILITY_MAP,
1159e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Further availability map"},
1169e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_HOP_COUNT_FORCE, " Hop count force"},
1179e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_RANDOM_FACTOR_FORCE,
1189e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Random factor force"},
1199e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_RANDOM_UPDATE_TIME,
1209e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Random update time"},
1219e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_EARLY_WAKEUP, " Early wakeup"},
1229e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_PERIODIC_SCAN_INTERVAL,
1239e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Periodic scan interval"},
1249e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_DW_INTERVAL, " DW interval"},
1259e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_DB_INTERVAL, " DB interval"},
1269e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_FURTHER_AVAILABILITY,
1279e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Further availability"},
1289e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_24G_CHANNEL, " 2.4G channel"},
1299e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_5G_CHANNEL, " 5G channel"},
1309e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_CONFIG_LAST, " Config last"},
1319e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
1329e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    /* Attributes types */
1339e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_ATTRS_FIRST, " Attributes first"},
1349e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_AVAILABILITY_INTERVALS_MAP,
1359e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Availability intervals map"},
1369e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_WLAN_MESH_ID, " WLAN mesh ID"},
1379e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_MAC_ADDRESS, " MAC address"},
1389e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_RECEIVED_RSSI_VALUE,
1399e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Received RSSI value"},
1409e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_CLUSTER_ATTRIBUTE,
1419e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Cluster attribute"},
1429e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_WLAN_INFRA_SSID, " WLAN infra SSID"},
1439e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_ATTRS_LAST, " Attributes last"},
1449e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
1459e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    /* Events Type */
1469e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_EVENTS_FIRST, " Events first"},
1479e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_EVENT_SELF_STATION_MAC_ADDRESS,
1489e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Event Self station MAC address"},
1499e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_EVENT_STARTED_CLUSTER,
1509e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Event started cluster"},
1519e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_EVENT_JOINED_CLUSTER,
1529e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Event joined cluster"},
1539e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_EVENT_CLUSTER_SCAN_RESULTS,
1549e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Event cluster scan results"},
1559e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_FAW_MEM_AVAIL,
1569e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " FAW memory availability"},
1579e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_EVENTS_LAST, " Events last"},
1589e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
1599e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    /* TCA types */
1609e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_TCA_FIRST, " TCA-Threshold Crossing Alert first"},
1619e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_CLUSTER_SIZE_REQ,
1629e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Cluster size request"},
1639e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_CLUSTER_SIZE_RSP,
1649e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Cluster size response"},
1659e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_TCA_LAST, " TCA last"},
1669e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
1679e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    /* Statistics types */
1689e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_STATS_FIRST, " Stats first"},
1699e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_DE_PUBLISH_STATS,
1709e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Discovery engine publish stats"},
1719e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_DE_SUBSCRIBE_STATS,
1729e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Discovery engine subscribe stats"},
1739e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_DE_MAC_STATS,
1749e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Discovery engine MAC stats"},
1759e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_DE_TIMING_SYNC_STATS,
1769e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Discovery engine timing sync stats"},
1779e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_DE_DW_STATS,
1789e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     " Discovery engine DW stats"},
1799e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_DE_STATS, " Discovery engine stats"},
1809e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_STATS_LAST, " Stats last"},
1819e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
1829e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_TLV_TYPE_LAST, " Last"}
1839e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik};
1849e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
1859e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaikstruct errorCode {
1869e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    NanStatusType frameworkError;
1879e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    NanInternalStatusType firmwareError;
1889e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    char nan_error[NAN_ERROR_STR_LEN];
1899e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik};
1909e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
1919e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaikstruct errorCode errorCodeTranslation[] = {
1929e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_SUCCESS, NAN_I_STATUS_SUCCESS,
1939e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "NAN status success"},
1949e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
1959e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INTERNAL_FAILURE, NAN_I_STATUS_DE_FAILURE,
1969e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "NAN Discovery engine failure"},
1979e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
1989e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID, NAN_I_STATUS_INVALID_HANDLE,
1999e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid Publish/Subscribe ID"},
2009e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
2019e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_NO_RESOURCE_AVAILABLE, NAN_I_STATUS_NO_SPACE_AVAILABLE,
2029e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "No space available"},
2039e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
2049e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_PUBLISH_TYPE,
2059e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid Publish type, can be 0 or 1"},
2069e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_TX_TYPE,
2079e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid Tx type"},
2089e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_MSG_VERSION,
2099e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid internal message version"},
2109e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_MSG_LEN,
2119e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid message length"},
2129e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_MSG_ID,
2139e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid message ID"},
2149e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_MATCH_ALGORITHM,
2159e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid matching algorithm, can be 0(match once), 1(match continuous) or 2(match never)"},
2169e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_TLV_LEN,
2179e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid TLV length"},
2189e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_TLV_TYPE,
2199e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid TLV type"},
2209e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_MISSING_TLV_TYPE,
2219e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Missing TLV type"},
2229e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_TOTAL_TLVS_LEN,
2239e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid total TLV length"},
2249e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_TLV_VALUE,
2259e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid TLV value"},
2269e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_TX_PRIORITY,
2279e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid Tx priority"},
2289e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_CONNECTION_MAP,
2299e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid connection map"},
2309e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_THRESHOLD_CROSSING_ALERT_ID,
2319e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid TCA-Threshold Crossing Alert ID"},
2329e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_STATS_ID,
2339e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid STATS ID"},
2349e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
2359e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_PROTOCOL_FAILURE, NAN_I_STATUS_TX_FAIL,
2369e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Tx Fail"},
2379e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
2389e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_RSSI_CLOSE_VALUE,
2399e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid RSSI close value range is 20dbm to 60dbm"},
2409e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_RSSI_MIDDLE_VALUE,
2419e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid RSSI middle value range is 20dbm to 75dbm"},
2429e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_HOP_COUNT_LIMIT,
2439e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid hop count limit, max hop count limit is 5"},
2449e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_HIGH_CLUSTER_ID_VALUE,
2459e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid cluster ID value. Please set the cluster id high greater than the cluster id low"},
2469e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_BACKGROUND_SCAN_PERIOD,
2479e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid background scan period. The range is 10 to 30 milliseconds"},
2489e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_SCAN_CHANNEL,
2499e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid scan channel. Only valid channels are the NAN social channels"},
2509e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_POST_NAN_CONNECTIVITY_CAPABILITIES_BITMAP,
2519e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid post nan connectivity bitmap"},
2529e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_NUMCHAN_VALUE,
2539e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid further availability map number of channel value"},
2549e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_DURATION_VALUE,
2559e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid further availability map duration value"},
2569e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_CLASS_VALUE,
2579e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid further availability map class value"},
2589e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_CHANNEL_VALUE,
2599e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid further availability map channel value"},
2609e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_AVAILABILITY_INTERVAL_BITMAP_VALUE,
2619e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid further availability map availability interval bitmap value"},
2629e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_MAP_ID,
2639e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid further availability map map ID"},
2649e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_CONN_TYPE_VALUE,
2659e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid post nan discovery connection type value"},
2669e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_DEVICE_ROLE_VALUE,
2679e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid post nan discovery device role value"},
2689e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_DURATION_VALUE,
2699e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid post nan discovery duration value"},
2709e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_POST_NAN_DISCOVERY_BITMAP_VALUE,
2719e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid post nan discovery bitmap value"},
2729e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_MISSING_FUTHER_AVAILABILITY_MAP,
2739e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Missing further availability map"},
2749e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_BAND_CONFIG_FLAGS,
2759e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid band configuration flags"},
2769e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_RANDOM_FACTOR_UPDATE_TIME_VALUE,
2779e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid random factor update time value"},
2789e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_ONGOING_SCAN_PERIOD,
2799e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid ongoing scan period"},
2809e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_DW_INTERVAL_VALUE,
2819e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid DW interval value"},
2829e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NAN_I_STATUS_INVALID_DB_INTERVAL_VALUE,
2839e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid DB interval value"},
2849e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
2859e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_SUCCESS, NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_TIMEOUT,
2869e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Terminated Reason: Timeout"},
2879e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_SUCCESS, NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_USER_REQUEST,
2889e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Terminated Reason: User Request"},
2899e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_SUCCESS, NAN_I_PUBLISH_SUBSCRIBE_TERMINATED_REASON_COUNT_REACHED,
2909e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Terminated Reason: Count Reached"},
2919e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
2929e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID, NAN_I_STATUS_INVALID_REQUESTER_INSTANCE_ID,
2939e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid match handle"},
2949e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_NAN_NOT_ALLOWED, NAN_I_STATUS_NAN_NOT_ALLOWED,
2959e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Nan not allowed"},
2969e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_NO_OTA_ACK, NAN_I_STATUS_NO_OTA_ACK,
2979e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "No OTA ack"},
2989e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_ALREADY_ENABLED, NAN_I_STATUS_NAN_ALREADY_ENABLED,
2999e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "NAN is Already enabled"},
3009e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_FOLLOWUP_QUEUE_FULL, NAN_I_STATUS_FOLLOWUP_QUEUE_FULL,
3019e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Follow-up queue full"},
3029e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3039e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_UNSUPPORTED_CONCURRENCY_NAN_DISABLED, NDP_I_UNSUPPORTED_CONCURRENCY,
3049e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Unsupported Concurrency"},
3059e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3069e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INTERNAL_FAILURE, NDP_I_NAN_DATA_IFACE_CREATE_FAILED,
3079e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "NAN data interface create failed"},
3089e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INTERNAL_FAILURE, NDP_I_NAN_DATA_IFACE_DELETE_FAILED,
3099e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "NAN data interface delete failed"},
3109e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INTERNAL_FAILURE, NDP_I_DATA_INITIATOR_REQUEST_FAILED,
3119e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "NAN data initiator request failed"},
3129e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INTERNAL_FAILURE, NDP_I_DATA_RESPONDER_REQUEST_FAILED,
3139e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "NAN data responder request failed"},
3149e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3159e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_NDP_ID, NDP_I_INVALID_NDP_INSTANCE_ID,
3169e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid NDP instance ID"},
3179e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3189e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NDP_I_INVALID_RESPONSE_CODE,
3199e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid response code"},
3209e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INVALID_PARAM, NDP_I_INVALID_APP_INFO_LEN,
3219e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Invalid app info length"},
3229e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3239e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_PROTOCOL_FAILURE, NDP_I_MGMT_FRAME_REQUEST_FAILED,
3249e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Management frame request failed"},
3259e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_PROTOCOL_FAILURE, NDP_I_MGMT_FRAME_RESPONSE_FAILED,
3269e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Management frame response failed"},
3279e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_PROTOCOL_FAILURE, NDP_I_MGMT_FRAME_CONFIRM_FAILED,
3289e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Management frame confirm failed"},
3299e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3309e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INTERNAL_FAILURE, NDP_I_END_FAILED,
3319e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "NDP end failed"},
3329e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3339e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_PROTOCOL_FAILURE, NDP_I_MGMT_FRAME_END_REQUEST_FAILED,
3349e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Management frame end request failed"},
3359e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3369e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    {NAN_STATUS_INTERNAL_FAILURE, NDP_I_VENDOR_SPECIFIC_ERROR,
3379e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik     "Vendor specific error"}
3389e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik};
3399e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3409e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaikvoid NanCommand::NanErrorTranslation(NanInternalStatusType firmwareErrorRecvd,
3419e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                                     u32 valueRcvd,
3429e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                                     void* pResponse)
3439e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik{
344fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik    int i = 0, j = 0;
3459e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    u16 msg_id; /* Based on the message_id in the header determine the Indication type */
3469e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    NanResponseMsg *pRsp;
3479e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    NanPublishTerminatedInd* pRspInd;
3489e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    NanDisabledInd* pRspdInd;
349fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik    char tlvInfo[NAN_ERROR_STR_LEN];
3509e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3519e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    if (isNanResponse()) {
3529e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        pRsp = (NanResponseMsg*)pResponse;
3539e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        for (i = 0; i < (int)(sizeof(errorCodeTranslation)/ sizeof(errorCode)); i++) {
354fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik            if (errorCodeTranslation[i].firmwareError == firmwareErrorRecvd) {
355fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                pRsp->status =  errorCodeTranslation[i].frameworkError;
356fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                strlcpy(pRsp->nan_error, errorCodeTranslation[i].nan_error, NAN_ERROR_STR_LEN);
357fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                if (NAN_I_STATUS_INVALID_TLV_TYPE == firmwareErrorRecvd) {
358fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                    for (j = 0; j < (int)(sizeof(tlvToStr)/sizeof(verboseTlv)); j++) {
359fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                        if (tlvToStr[j].tlvType == valueRcvd) {
360fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                            strlcpy(tlvInfo, tlvToStr[i].strTlv, NAN_ERROR_STR_LEN);
361fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                            break;
362fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                        }
363fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                    }
3649e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                }
365fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                strlcat(pRsp->nan_error, tlvInfo, sizeof(pRsp->nan_error));
366fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                break;
367fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik            }
3689e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        }
3699e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        if (i == (int)(sizeof(errorCodeTranslation)/sizeof(errorCode))) {
3709e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                pRsp->status =  NAN_STATUS_INTERNAL_FAILURE;
3719e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                strlcpy(pRsp->nan_error, "NAN Discovery engine failure", NAN_ERROR_STR_LEN);
3729e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        }
373fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik        ALOGD("%s: Status: %d Error Info[value %d]: %s", __FUNCTION__, pRsp->status, valueRcvd, pRsp->nan_error);
3749e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    } else {
3759e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        msg_id = getIndicationType();
3769e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
3779e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        switch(msg_id) {
3789e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        case NAN_INDICATION_PUBLISH_TERMINATED:
3799e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        case NAN_INDICATION_SUBSCRIBE_TERMINATED:
3809e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        case NAN_INDICATION_SELF_TRANSMIT_FOLLOWUP:
3819e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                pRspInd = (NanPublishTerminatedInd*)pResponse;
3829e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                for (i = 0; i < (int)(sizeof(errorCodeTranslation)/ sizeof(errorCode)); i++) {
3839e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                        if (errorCodeTranslation[i].firmwareError == firmwareErrorRecvd) {
3849e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                                pRspInd->reason =  errorCodeTranslation[i].frameworkError;
3859e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                                strlcpy(pRspInd->nan_reason, errorCodeTranslation[i].nan_error, NAN_ERROR_STR_LEN);
3869e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                                break;
3879e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                        }
3889e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                }
3899e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                if (i == (int)(sizeof(errorCodeTranslation)/sizeof(errorCode))) {
3909e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                        pRspInd->reason =  NAN_STATUS_INTERNAL_FAILURE;
3919e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                        strlcpy(pRspInd->nan_reason, "NAN Discovery engine failure", NAN_ERROR_STR_LEN);
3929e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                }
393fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                ALOGD("%s: Status: %d Error Info[value %d]: %s", __FUNCTION__, pRspInd->reason, valueRcvd, pRspInd->nan_reason);
3949e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                break;
3959e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        case NAN_INDICATION_DISABLED:
3969e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                pRspdInd = (NanDisabledInd*)pResponse;
3979e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                for (i = 0; i < (int)(sizeof(errorCodeTranslation)/ sizeof(errorCode)); i++) {
3989e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                        if (errorCodeTranslation[i].firmwareError == firmwareErrorRecvd) {
3999e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                                pRspdInd->reason =  errorCodeTranslation[i].frameworkError;
4009e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                                strlcpy(pRspdInd->nan_reason, errorCodeTranslation[i].nan_error, NAN_ERROR_STR_LEN);
4019e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                                break;
4029e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                        }
4039e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                }
4049e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                if (i == (int)(sizeof(errorCodeTranslation)/sizeof(errorCode))) {
4059e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                        pRspdInd->reason =  NAN_STATUS_INTERNAL_FAILURE;
4069e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                        strlcpy(pRspdInd->nan_reason, "NAN Discovery engine failure", NAN_ERROR_STR_LEN);
4079e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                }
408fa2853e01eb9884a1965f7746811e2eed60a00f2Subhani Shaik                ALOGD("%s: Status: %d Error Info[value %d]: %s", __FUNCTION__, pRspdInd->reason, valueRcvd, pRspdInd->nan_reason);
4099e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                break;
4109e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik        }
4119e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    }
4129e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik}
4134af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
414a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaikint NanCommand::getNanResponse(transaction_id *id, NanResponseMsg *pRsp)
4154af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
4164af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    if (mNanVendorEvent == NULL || pRsp == NULL) {
4174af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        ALOGE("NULL check failed");
4184af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        return WIFI_ERROR_INVALID_ARGS;
4194af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
4204af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
4214af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    NanMsgHeader *pHeader = (NanMsgHeader *)mNanVendorEvent;
4224af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
4234af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    switch (pHeader->msgId) {
4244af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_ERROR_RSP:
4254af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
4264af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanErrorRspMsg pFwRsp = \
4274af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanErrorRspMsg)mNanVendorEvent;
428a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
4299e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
4304af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_ERROR;
4314af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
4324af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
4334af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_CONFIGURATION_RSP:
4344af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
4354af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanConfigurationRspMsg pFwRsp = \
4364af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanConfigurationRspMsg)mNanVendorEvent;
437a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
4389e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
4394af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_CONFIG;
4404af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
4414af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        break;
4424af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_RSP:
4434af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
4444af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanPublishServiceCancelRspMsg pFwRsp = \
4454af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanPublishServiceCancelRspMsg)mNanVendorEvent;
446a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
4479e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
4484af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_PUBLISH_CANCEL;
449a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.publish_response.publish_id = \
450a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                pFwRsp->fwHeader.handle;
4514af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
4524af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
4534af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_PUBLISH_SERVICE_RSP:
4544af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
4554af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanPublishServiceRspMsg pFwRsp = \
4564af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanPublishServiceRspMsg)mNanVendorEvent;
457a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
4589e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
4594af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_PUBLISH;
460a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.publish_response.publish_id = \
461a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                pFwRsp->fwHeader.handle;
4624af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
4634af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
4644af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_SUBSCRIBE_SERVICE_RSP:
4654af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
4664af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanSubscribeServiceRspMsg pFwRsp = \
4674af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanSubscribeServiceRspMsg)mNanVendorEvent;
468a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
4699e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
4704af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_SUBSCRIBE;
471a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.subscribe_response.subscribe_id = \
472a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                pFwRsp->fwHeader.handle;
4734af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
4744af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        break;
4754af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_RSP:
4764af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
4774af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanSubscribeServiceCancelRspMsg pFwRsp = \
4784af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanSubscribeServiceCancelRspMsg)mNanVendorEvent;
479a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
4809e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
4814af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_SUBSCRIBE_CANCEL;
482a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.subscribe_response.subscribe_id = \
483a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                pFwRsp->fwHeader.handle;
4844af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
4854af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
4864af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_TRANSMIT_FOLLOWUP_RSP:
4874af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
4884af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanTransmitFollowupRspMsg pFwRsp = \
4894af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanTransmitFollowupRspMsg)mNanVendorEvent;
490a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
4919e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
4924af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_TRANSMIT_FOLLOWUP;
4934af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
4944af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
4954af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_STATS_RSP:
4964af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
4974af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanStatsRspMsg pFwRsp = \
4984af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanStatsRspMsg)mNanVendorEvent;
499a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
5009e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->statsRspParams.status,
5019e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                                            pFwRsp->statsRspParams.value, pRsp);
5024af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_STATS;
503a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.stats_response.stats_type = \
504a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                (NanStatsType)pFwRsp->statsRspParams.statsType;
5053ff76888e8710c8d3d7153f3dbc1c9057effa183mukesh agrawal            ALOGV("%s: stats_type:%d",__func__,
506a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                  pRsp->body.stats_response.stats_type);
5074af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            u8 *pInputTlv = pFwRsp->ptlv;
5084af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            NanTlv outputTlv;
5094af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            memset(&outputTlv, 0, sizeof(outputTlv));
5104af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            u16 readLen = 0;
5114af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            int remainingLen = (mNanDataLen -  \
5124af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (sizeof(NanMsgHeader) + sizeof(NanStatsRspParams)));
5134af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            if (remainingLen > 0) {
5144af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                readLen = NANTLV_ReadTlv(pInputTlv, &outputTlv);
5153ff76888e8710c8d3d7153f3dbc1c9057effa183mukesh agrawal                ALOGV("%s: Remaining Len:%d readLen:%d type:%d length:%d",
5164af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                      __func__, remainingLen, readLen, outputTlv.type,
5174af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                      outputTlv.length);
5184af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                if (outputTlv.length <= \
5194af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                    sizeof(pRsp->body.stats_response.data)) {
520a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                    handleNanStatsResponse(pRsp->body.stats_response.stats_type,
521a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                           (char *)outputTlv.value,
5222268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                                           &pRsp->body.stats_response,
5232268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                                           outputTlv.length);
5244af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                }
525ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik            } else
5269e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                ALOGV("%s: No TLV's present",__func__);
5274af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
5284af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
5294af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_ENABLE_RSP:
5304af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
5314af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanEnableRspMsg pFwRsp = \
5324af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanEnableRspMsg)mNanVendorEvent;
533a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
5349e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
5354af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_ENABLED;
5364af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
5374af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
5384af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_DISABLE_RSP:
5394af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
5404af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanDisableRspMsg pFwRsp = \
5414af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanDisableRspMsg)mNanVendorEvent;
542a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
5439e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, 0, pRsp);
5444af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_DISABLED;
5454af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
5464af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
5474af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_TCA_RSP:
5484af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
5494af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanTcaRspMsg pFwRsp = \
5504af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanTcaRspMsg)mNanVendorEvent;
551a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
5529e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
5534af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_TCA;
5544af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
5554af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
5564af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_BEACON_SDF_RSP:
5574af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
5584af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanBeaconSdfPayloadRspMsg pFwRsp = \
5594af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanBeaconSdfPayloadRspMsg)mNanVendorEvent;
560a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
5619e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, 0, pRsp);
5624af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_BEACON_SDF_PAYLOAD;
5634af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
5644af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
56517ee741489e21713642ac29853da176bbd5c4698Subhani Shaik        case NAN_MSG_ID_CAPABILITIES_RSP:
56617ee741489e21713642ac29853da176bbd5c4698Subhani Shaik        {
56717ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pNanCapabilitiesRspMsg pFwRsp = \
56817ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                (pNanCapabilitiesRspMsg)mNanVendorEvent;
56917ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
5709e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik            NanErrorTranslation((NanInternalStatusType)pFwRsp->status, pFwRsp->value, pRsp);
57117ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->response_type = NAN_GET_CAPABILITIES;
57217ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_concurrent_nan_clusters = \
57317ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                        pFwRsp->max_concurrent_nan_clusters;
57417ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_publishes = \
57517ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                        pFwRsp->max_publishes;
57617ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_subscribes = \
57717ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                        pFwRsp->max_subscribes;
57817ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_service_name_len = \
57917ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                        pFwRsp->max_service_name_len;
58017ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_match_filter_len = \
58117ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                        pFwRsp->max_match_filter_len;
58217ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_total_match_filter_len = \
58317ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                        pFwRsp->max_total_match_filter_len;
58417ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_service_specific_info_len = \
58517ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                        pFwRsp->max_service_specific_info_len;
58617ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_vsa_data_len = \
58717ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                        pFwRsp->max_vsa_data_len;
58817ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_mesh_data_len = \
58917ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                        pFwRsp->max_mesh_data_len;
59017ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_ndi_interfaces = \
59117ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                       pFwRsp->max_ndi_interfaces;
59217ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_ndp_sessions = \
59317ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                       pFwRsp->max_ndp_sessions;
59417ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            pRsp->body.nan_capabilities.max_app_info_len = \
59517ee741489e21713642ac29853da176bbd5c4698Subhani Shaik                       pFwRsp->max_app_info_len;
596a6b0b9af5b45ed417e4298f61073695db7882bb4Subhani Shaik            pRsp->body.nan_capabilities.max_queued_transmit_followup_msgs = \
597a6b0b9af5b45ed417e4298f61073695db7882bb4Subhani Shaik                       pFwRsp->max_queued_transmit_followup_msgs;
598ca2a2d92134fd925d61fe2d4a38f329a40ebdfcfSubhani Shaik            pRsp->body.nan_capabilities.ndp_supported_bands = \
599ca2a2d92134fd925d61fe2d4a38f329a40ebdfcfSubhani Shaik                       pFwRsp->ndp_supported_bands;
6007f42815c7a5a2c67874c567bdfb0237220e6226dSubhani Shaik            pRsp->body.nan_capabilities.cipher_suites_supported = \
6017f42815c7a5a2c67874c567bdfb0237220e6226dSubhani Shaik                       pFwRsp->cipher_suites_supported;
602ca2a2d92134fd925d61fe2d4a38f329a40ebdfcfSubhani Shaik            pRsp->body.nan_capabilities.max_scid_len = \
603ca2a2d92134fd925d61fe2d4a38f329a40ebdfcfSubhani Shaik                       pFwRsp->max_scid_len;
604ca2a2d92134fd925d61fe2d4a38f329a40ebdfcfSubhani Shaik            pRsp->body.nan_capabilities.is_ndp_security_supported = \
605ca2a2d92134fd925d61fe2d4a38f329a40ebdfcfSubhani Shaik                       pFwRsp->is_ndp_security_supported;
606979212d9b8873ecd74873fe6f64314b514dd04acSubhani Shaik            pRsp->body.nan_capabilities.max_sdea_service_specific_info_len = \
607979212d9b8873ecd74873fe6f64314b514dd04acSubhani Shaik                       pFwRsp->max_sdea_service_specific_info_len;
608ca2a2d92134fd925d61fe2d4a38f329a40ebdfcfSubhani Shaik            pRsp->body.nan_capabilities.max_subscribe_address = \
609ca2a2d92134fd925d61fe2d4a38f329a40ebdfcfSubhani Shaik                       pFwRsp->max_subscribe_address;
61017ee741489e21713642ac29853da176bbd5c4698Subhani Shaik            break;
61117ee741489e21713642ac29853da176bbd5c4698Subhani Shaik        }
6124af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        default:
6134af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            return  -1;
6144af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
6154af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    return  0;
6164af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam}
6174af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
6184af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamint NanCommand::handleNanResponse()
6194af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
6204af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //parse the data and call
6214af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //the response callback handler with the populated
6224af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //NanResponseMsg
6234af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    NanResponseMsg  rsp_data;
6244af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int ret;
625a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    transaction_id id;
6264af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
6274af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    ALOGV("handleNanResponse called %p", this);
6284af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    memset(&rsp_data, 0, sizeof(rsp_data));
6294af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //get the rsp_data
630a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    ret = getNanResponse(&id, &rsp_data);
6314af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
6329e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    ALOGI("handleNanResponse ret:%d status:%u value:%s response_type:%u",
6339e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik          ret, rsp_data.status, rsp_data.nan_error, rsp_data.response_type);
6344af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    if (ret == 0 && (rsp_data.response_type == NAN_RESPONSE_STATS) &&
6354af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        (mStaParam != NULL) &&
636a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        (rsp_data.body.stats_response.stats_type == NAN_STATS_ID_DE_TIMING_SYNC)) {
6374af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        /*
6384af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam           Fill the staParam with appropriate values and return from here.
6394af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam           No need to call NotifyResponse as the request is for getting the
6404af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam           STA response
6414af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        */
6424af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        NanSyncStats *pSyncStats = &rsp_data.body.stats_response.data.sync_stats;
6434af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->master_rank = pSyncStats->myRank;
6444af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->master_pref = (pSyncStats->myRank & 0xFF00000000000000) >> 56;
6454af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->random_factor = (pSyncStats->myRank & 0x00FF000000000000) >> 48;
6464af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->hop_count = pSyncStats->currAmHopCount;
6474af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->beacon_transmit_time = pSyncStats->currAmBTT;
64868f9bfdb788eceecc52e8f2edb330b72fc6a3d41Subhani Shaik        mStaParam->ndp_channel_freq = pSyncStats->ndpChannelFreq;
6494af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
6502268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        ALOGI("%s:0x%02x master_pref 0x%02x random_factor 0x%02x hop_count %u Channel",
6512268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                __func__, mStaParam->master_pref, mStaParam->random_factor,
6522268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                mStaParam->hop_count, mStaParam->ndp_channel_freq);
6532268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki
6544af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        return ret;
6554af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
6564af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //Call the NotifyResponse Handler
6574af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    if (ret == 0 && mHandler.NotifyResponse) {
658a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        (*mHandler.NotifyResponse)(id, &rsp_data);
6594af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
6604af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    return ret;
6614af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam}
662a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
663a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaikvoid NanCommand::handleNanStatsResponse(NanStatsType stats_type,
664a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                       char *rspBuf,
6652268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                                       NanStatsResponse *pRsp,
6662268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                                       u32 message_len)
667a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik{
668a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    if (stats_type == NAN_STATS_ID_DE_PUBLISH) {
669a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanPublishStats publish_stats;
6702268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        if (message_len != sizeof(NanPublishStats)) {
6712268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            ALOGE("%s: stats_type = %d invalid stats length = %u expected length = %zu\n",
6722268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                    __func__, stats_type, message_len, sizeof(NanPublishStats));
6732268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            return;
6742268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        }
675a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanPublishStats *pPubStats = (FwNanPublishStats *)rspBuf;
676a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
677a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishServiceReqMsgs =
678a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishServiceReqMsgs;
679a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishServiceRspMsgs =
680a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishServiceRspMsgs;
681a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishServiceCancelReqMsgs =
682a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishServiceCancelReqMsgs;
683a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishServiceCancelRspMsgs =
684a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishServiceCancelRspMsgs;
685a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishRepliedIndMsgs =
686a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishRepliedIndMsgs;
687a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishTerminatedIndMsgs =
688a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishTerminatedIndMsgs;
689a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validActiveSubscribes = pPubStats->validActiveSubscribes;
690a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validMatches = pPubStats->validMatches;
691a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validFollowups = pPubStats->validFollowups;
692a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidPublishServiceReqMsgs =
693a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->invalidPublishServiceReqMsgs;
694a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidPublishServiceCancelReqMsgs =
695a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pPubStats->invalidPublishServiceCancelReqMsgs;
696a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidActiveSubscribes =
697a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pPubStats->invalidActiveSubscribes;
698a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidMatches = pPubStats->invalidMatches;
699a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidFollowups = pPubStats->invalidFollowups;
700a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.publishCount = pPubStats->publishCount;
701a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.publishNewMatchCount = pPubStats->publishNewMatchCount;
702a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.pubsubGlobalNewMatchCount =
703a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                               pPubStats->pubsubGlobalNewMatchCount;
704a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &publish_stats, sizeof(NanPublishStats));
705a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE_SUBSCRIBE) {
706a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanSubscribeStats sub_stats;
7072268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        if (message_len != sizeof(NanSubscribeStats)) {
7082268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            ALOGE("%s: stats_type = %d invalid stats length = %u expected length = %zu\n",
7092268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                   __func__, stats_type, message_len, sizeof(NanSubscribeStats));
7102268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            return;
7112268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        }
712a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanSubscribeStats *pSubStats = (FwNanSubscribeStats *)rspBuf;
713a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
714a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeServiceReqMsgs =
715a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeServiceReqMsgs;
716a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeServiceRspMsgs =
717a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeServiceRspMsgs;
718a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeServiceCancelReqMsgs =
719a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeServiceCancelReqMsgs;
720a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeServiceCancelRspMsgs =
721a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeServiceCancelRspMsgs;
722a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeTerminatedIndMsgs =
723a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeTerminatedIndMsgs;
724a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeMatchIndMsgs =
725a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeMatchIndMsgs;
726a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeUnmatchIndMsgs =
727a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeUnmatchIndMsgs;
728a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSolicitedPublishes =
729a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSolicitedPublishes;
730a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validMatches = pSubStats->validMatches;
731a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validFollowups = pSubStats->validFollowups;
732a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidSubscribeServiceReqMsgs =
733a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSubStats->invalidSubscribeServiceReqMsgs;
734a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidSubscribeServiceCancelReqMsgs =
735a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSubStats->invalidSubscribeServiceCancelReqMsgs;
736a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidSubscribeFollowupReqMsgs =
737a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSubStats->invalidSubscribeFollowupReqMsgs;
738a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidSolicitedPublishes =
739a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSubStats->invalidSolicitedPublishes;
740a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidMatches = pSubStats->invalidMatches;
741a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidFollowups = pSubStats->invalidFollowups;
742a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.subscribeCount = pSubStats->subscribeCount;
743a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.bloomFilterIndex = pSubStats->bloomFilterIndex;
744a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.subscribeNewMatchCount = pSubStats->subscribeNewMatchCount;
745a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.pubsubGlobalNewMatchCount =
746a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                      pSubStats->pubsubGlobalNewMatchCount;
747a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &sub_stats, sizeof(NanSubscribeStats));
748a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE_DW) {
749a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanDWStats dw_stats;
7502268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        if (message_len != sizeof(NanDWStats)) {
7512268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            ALOGE("%s: stats_type = %d invalid stats length = %u expected length = %zu\n",
7522268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                   __func__, stats_type, message_len, sizeof(NanDWStats));
7532268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            return;
7542268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        }
755a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanMacStats *pMacStats = (FwNanMacStats *)rspBuf;
756a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
757a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.validFrames = pMacStats->validFrames;
758a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.validActionFrames = pMacStats->validActionFrames;
759a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.validBeaconFrames = pMacStats->validBeaconFrames;
760a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.ignoredActionFrames = pMacStats->ignoredActionFrames;
761a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidFrames = pMacStats->invalidFrames;
762a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidActionFrames = pMacStats->invalidActionFrames;
763a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidBeaconFrames = pMacStats->invalidBeaconFrames;
764a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidMacHeaders = pMacStats->invalidMacHeaders;
765a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidPafHeaders  = pMacStats->invalidPafHeaders;
766a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.nonNanBeaconFrames = pMacStats->nonNanBeaconFrames;
767a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.earlyActionFrames = pMacStats->earlyActionFrames;
768a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.inDwActionFrames = pMacStats->inDwActionFrames;
769a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.lateActionFrames = pMacStats->lateActionFrames;
770a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.framesQueued =  pMacStats->framesQueued;
771a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.totalTRSpUpdates = pMacStats->totalTRSpUpdates;
772a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.completeByTRSp = pMacStats->completeByTRSp;
773a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.completeByTp75DW = pMacStats->completeByTp75DW;
774a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.completeByTendDW = pMacStats->completeByTendDW;
775a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.lateActionFramesTx = pMacStats->lateActionFramesTx;
776a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &dw_stats, sizeof(NanDWStats));
777a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE_MAC) {
778a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanMacStats mac_stats;
7792268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        if (message_len != sizeof(NanMacStats)) {
7802268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            ALOGE("%s: stats_type = %d invalid stats length = %u expected length = %zu\n",
7812268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                   __func__, stats_type, message_len, sizeof(NanMacStats));
7822268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            return;
7832268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        }
784a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanMacStats *pMacStats = (FwNanMacStats *)rspBuf;
785a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
786a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.validFrames = pMacStats->validFrames;
787a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.validActionFrames = pMacStats->validActionFrames;
788a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.validBeaconFrames = pMacStats->validBeaconFrames;
789a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.ignoredActionFrames = pMacStats->ignoredActionFrames;
790a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidFrames = pMacStats->invalidFrames;
791a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidActionFrames = pMacStats->invalidActionFrames;
792a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidBeaconFrames = pMacStats->invalidBeaconFrames;
793a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidMacHeaders = pMacStats->invalidMacHeaders;
794a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidPafHeaders  = pMacStats->invalidPafHeaders;
795a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.nonNanBeaconFrames = pMacStats->nonNanBeaconFrames;
796a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.earlyActionFrames = pMacStats->earlyActionFrames;
797a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.inDwActionFrames = pMacStats->inDwActionFrames;
798a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.lateActionFrames = pMacStats->lateActionFrames;
799a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.framesQueued =  pMacStats->framesQueued;
800a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.totalTRSpUpdates = pMacStats->totalTRSpUpdates;
801a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.completeByTRSp = pMacStats->completeByTRSp;
802a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.completeByTp75DW = pMacStats->completeByTp75DW;
803a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.completeByTendDW = pMacStats->completeByTendDW;
804a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.lateActionFramesTx = pMacStats->lateActionFramesTx;
805a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.twIncreases = pMacStats->twIncreases;
806a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.twDecreases = pMacStats->twDecreases;
807a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.twChanges = pMacStats->twChanges;
808a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.twHighwater = pMacStats->twHighwater;
809a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.bloomFilterIndex = pMacStats->bloomFilterIndex;
810a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &mac_stats, sizeof(NanMacStats));
811a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE_TIMING_SYNC) {
812a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanSyncStats sync_stats;
8132268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        if (message_len != sizeof(NanSyncStats)) {
8142268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            ALOGE("%s: stats_type = %d invalid stats length = %u expected length = %zu\n",
8152268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                   __func__, stats_type, message_len, sizeof(NanSyncStats));
8162268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            return;
8172268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        }
818a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanSyncStats *pSyncStats = (FwNanSyncStats *)rspBuf;
819a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
820a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currTsf = pSyncStats->currTsf;
821a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.myRank = pSyncStats->myRank;
822a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currAmRank = pSyncStats->currAmRank;
823a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.lastAmRank = pSyncStats->lastAmRank;
824a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currAmBTT = pSyncStats->currAmBTT;
825a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.lastAmBTT = pSyncStats->lastAmBTT;
826a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currAmHopCount = pSyncStats->currAmHopCount;
827a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currRole = pSyncStats->currRole;
828a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currClusterId = pSyncStats->currClusterId;
829a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
830a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.timeSpentInCurrRole = pSyncStats->timeSpentInCurrRole;
831a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.totalTimeSpentAsMaster = pSyncStats->totalTimeSpentAsMaster;
832a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.totalTimeSpentAsNonMasterSync =
833a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->totalTimeSpentAsNonMasterSync;
834a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.totalTimeSpentAsNonMasterNonSync =
835a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->totalTimeSpentAsNonMasterNonSync;
836a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.transitionsToAnchorMaster =
837a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->transitionsToAnchorMaster;
838a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.transitionsToMaster =
839a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->transitionsToMaster;
840a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.transitionsToNonMasterSync =
841a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->transitionsToNonMasterSync;
842a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.transitionsToNonMasterNonSync =
843a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->transitionsToNonMasterNonSync;
844a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateCount = pSyncStats->amrUpdateCount;
845a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateRankChangedCount =
846a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->amrUpdateRankChangedCount;
847a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateBTTChangedCount =
848a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->amrUpdateBTTChangedCount;
849a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateHcChangedCount =
850a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->amrUpdateHcChangedCount;
851a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateNewDeviceCount =
852a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->amrUpdateNewDeviceCount;
853a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrExpireCount = pSyncStats->amrExpireCount;
854a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.mergeCount = pSyncStats->mergeCount;
855a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsAboveHcLimit = pSyncStats->beaconsAboveHcLimit;
856a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsBelowRssiThresh = pSyncStats->beaconsBelowRssiThresh;
857a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsIgnoredNoSpace = pSyncStats->beaconsIgnoredNoSpace;
858a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsForOurCluster = pSyncStats->beaconsForOtherCluster;
859a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsForOtherCluster = pSyncStats->beaconsForOtherCluster;
860a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconCancelRequests = pSyncStats->beaconCancelRequests;
861a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconCancelFailures = pSyncStats->beaconCancelFailures;
862a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconUpdateRequests = pSyncStats->beaconUpdateRequests;
863a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconUpdateFailures = pSyncStats->beaconUpdateFailures;
864a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.syncBeaconTxAttempts = pSyncStats->syncBeaconTxAttempts;
865a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.syncBeaconTxFailures = pSyncStats->syncBeaconTxFailures;
866a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.discBeaconTxAttempts = pSyncStats->discBeaconTxAttempts;
867a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.discBeaconTxFailures = pSyncStats->discBeaconTxFailures;
868a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amHopCountExpireCount = pSyncStats->amHopCountExpireCount;
86968f9bfdb788eceecc52e8f2edb330b72fc6a3d41Subhani Shaik        sync_stats.ndpChannelFreq = pSyncStats->ndpChannelFreq;
870a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &sync_stats, sizeof(NanSyncStats));
871a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE) {
872a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanDeStats de_stats;
8732268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        if (message_len != sizeof(NanDeStats)) {
8742268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            ALOGE("%s: stats_type = %d invalid stats length = %u expected length = %zu\n",
8752268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki                   __func__, stats_type, message_len, sizeof(NanDeStats));
8762268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki            return;
8772268d748b893f82330f1be50b09d699cb8e7f9d3Rakesh Sunki        }
878a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanDeStats *pDeStats = (FwNanDeStats *)rspBuf;
879a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
880a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validErrorRspMsgs = pDeStats->validErrorRspMsgs;
881a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTransmitFollowupReqMsgs =
882a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validTransmitFollowupReqMsgs;
883a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTransmitFollowupRspMsgs =
884a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validTransmitFollowupRspMsgs;
885a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validFollowupIndMsgs =
886a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validFollowupIndMsgs;
887a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validConfigurationReqMsgs =
888a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validConfigurationReqMsgs;
889a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validConfigurationRspMsgs =
890a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validConfigurationRspMsgs;
891a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validStatsReqMsgs = pDeStats->validStatsReqMsgs;
892a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validStatsRspMsgs = pDeStats->validStatsRspMsgs;
893a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validEnableReqMsgs = pDeStats->validEnableReqMsgs;
894a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validEnableRspMsgs = pDeStats->validEnableRspMsgs;
895a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validDisableReqMsgs = pDeStats->validDisableReqMsgs;
896a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validDisableRspMsgs = pDeStats->validDisableRspMsgs;
897a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validDisableIndMsgs = pDeStats->validDisableIndMsgs;
898a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validEventIndMsgs = pDeStats->validEventIndMsgs;
899a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTcaReqMsgs = pDeStats->validTcaReqMsgs;
900a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTcaRspMsgs = pDeStats->validTcaRspMsgs;
901a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTcaIndMsgs = pDeStats->validTcaIndMsgs;
902a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidTransmitFollowupReqMsgs =
903a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pDeStats->invalidTransmitFollowupReqMsgs;
904a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidConfigurationReqMsgs =
905a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pDeStats->invalidConfigurationReqMsgs;
906a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidStatsReqMsgs = pDeStats->invalidStatsReqMsgs;
907a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidEnableReqMsgs = pDeStats->invalidEnableReqMsgs;
908a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidDisableReqMsgs = pDeStats->invalidDisableReqMsgs;
909a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidTcaReqMsgs = pDeStats->invalidTcaReqMsgs;
910a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &de_stats, sizeof(NanDeStats));
911a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else {
912a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        ALOGE("Unknown stats_type:%d\n", stats_type);
913a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    }
914a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik}
915ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik
916ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaikint NanCommand::handleNdpResponse(NanResponseType ndpCmdType,
917ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik                                  struct nlattr **tb_vendor)
918ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik{
919ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    //parse the data and call
920ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    //the response callback handler with the populated
921ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    //NanResponseMsg
922ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    NanResponseMsg  rsp_data;
923ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    transaction_id id;
924ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik
925ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    memset(&rsp_data, 0, sizeof(rsp_data));
926ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik
927ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    if ((!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID]) ||
928ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_DRV_RESPONSE_STATUS_TYPE]) ||
929ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE]))
930ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    {
931ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        ALOGE("%s: QCA_WLAN_VENDOR_ATTR_NDP not found", __FUNCTION__);
932ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        return WIFI_ERROR_INVALID_ARGS;
933ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    }
934ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik
935ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    id = nla_get_u16(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_TRANSACTION_ID]);
936ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    ALOGD("%s: Transaction id : val %d", __FUNCTION__, id);
9379e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
9389e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik    NanErrorTranslation((NanInternalStatusType)nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_DRV_RESPONSE_STATUS_TYPE]),
9399e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik                        nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_DRV_RETURN_VALUE]), &rsp_data);
940ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    rsp_data.response_type = ndpCmdType;
9419e567c5a5c2e8d673cd1e3796b1fd7153ad22a8fSubhani Shaik
942ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    if (ndpCmdType == NAN_DP_INITIATOR_RESPONSE)
943ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    {
944ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        if (!tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID])
945ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        {
946ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik            ALOGE("%s: QCA_WLAN_VENDOR_ATTR_NDP not found", __FUNCTION__);
947ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik            return WIFI_ERROR_INVALID_ARGS;
948ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        }
949ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        rsp_data.body.data_request_response.ndp_instance_id =
950ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        nla_get_u32(tb_vendor[QCA_WLAN_VENDOR_ATTR_NDP_INSTANCE_ID]);
951ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    }
952ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    //Call the NotifyResponse Handler
953ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    if (mHandler.NotifyResponse) {
954ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik        (*mHandler.NotifyResponse)(id, &rsp_data);
955ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    }
956ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik    return WIFI_SUCCESS;
957ad90a3eeb5acc5f53db457e66d06205de96d144dSubhani Shaik}
958