nan_rsp.cpp revision a3c2c8f1bfcddd50047c8ad29e535a54e99acf62
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:
464af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        return 1;
474af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    default:
484af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        return 0;
494af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
504af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam}
514af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
524af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
53a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaikint NanCommand::getNanResponse(transaction_id *id, NanResponseMsg *pRsp)
544af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
554af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    if (mNanVendorEvent == NULL || pRsp == NULL) {
564af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        ALOGE("NULL check failed");
574af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        return WIFI_ERROR_INVALID_ARGS;
584af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
594af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
604af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    NanMsgHeader *pHeader = (NanMsgHeader *)mNanVendorEvent;
614af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
624af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    switch (pHeader->msgId) {
634af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_ERROR_RSP:
644af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
654af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanErrorRspMsg pFwRsp = \
664af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanErrorRspMsg)mNanVendorEvent;
67a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
68a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
694af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->value;
704af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_ERROR;
714af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
724af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
734af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_CONFIGURATION_RSP:
744af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
754af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanConfigurationRspMsg pFwRsp = \
764af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanConfigurationRspMsg)mNanVendorEvent;
77a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
78a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
794af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->value;
804af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_CONFIG;
814af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
824af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        break;
834af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_RSP:
844af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
854af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanPublishServiceCancelRspMsg pFwRsp = \
864af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanPublishServiceCancelRspMsg)mNanVendorEvent;
87a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
88a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
894af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->value;
904af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_PUBLISH_CANCEL;
91a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.publish_response.publish_id = \
92a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                pFwRsp->fwHeader.handle;
934af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
944af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
954af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_PUBLISH_SERVICE_RSP:
964af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
974af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanPublishServiceRspMsg pFwRsp = \
984af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanPublishServiceRspMsg)mNanVendorEvent;
99a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
100a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
1014af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->value;
1024af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_PUBLISH;
103a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.publish_response.publish_id = \
104a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                pFwRsp->fwHeader.handle;
1054af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
1064af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
1074af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_SUBSCRIBE_SERVICE_RSP:
1084af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
1094af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanSubscribeServiceRspMsg pFwRsp = \
1104af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanSubscribeServiceRspMsg)mNanVendorEvent;
111a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
112a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
1134af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->value;
1144af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_SUBSCRIBE;
115a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.subscribe_response.subscribe_id = \
116a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                pFwRsp->fwHeader.handle;
1174af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
1184af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        break;
1194af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_RSP:
1204af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
1214af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanSubscribeServiceCancelRspMsg pFwRsp = \
1224af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanSubscribeServiceCancelRspMsg)mNanVendorEvent;
123a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
124a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
1254af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->value;
1264af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_SUBSCRIBE_CANCEL;
127a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.subscribe_response.subscribe_id = \
128a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                pFwRsp->fwHeader.handle;
1294af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
1304af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
1314af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_TRANSMIT_FOLLOWUP_RSP:
1324af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
1334af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanTransmitFollowupRspMsg pFwRsp = \
1344af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanTransmitFollowupRspMsg)mNanVendorEvent;
135a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
136a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
1374af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->value;
1384af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_TRANSMIT_FOLLOWUP;
1394af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
1404af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
1414af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_STATS_RSP:
1424af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
1434af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanStatsRspMsg pFwRsp = \
1444af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanStatsRspMsg)mNanVendorEvent;
145a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
146a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->statsRspParams.status;
1474af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->statsRspParams.value;
1484af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_STATS;
149a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->body.stats_response.stats_type = \
150a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                (NanStatsType)pFwRsp->statsRspParams.statsType;
151a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            ALOGI("%s: stats_type:%d",__func__,
152a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                  pRsp->body.stats_response.stats_type);
1534af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            u8 *pInputTlv = pFwRsp->ptlv;
1544af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            NanTlv outputTlv;
1554af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            memset(&outputTlv, 0, sizeof(outputTlv));
1564af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            u16 readLen = 0;
1574af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            int remainingLen = (mNanDataLen -  \
1584af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (sizeof(NanMsgHeader) + sizeof(NanStatsRspParams)));
1594af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            if (remainingLen > 0) {
1604af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                readLen = NANTLV_ReadTlv(pInputTlv, &outputTlv);
1614af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                ALOGI("%s: Remaining Len:%d readLen:%d type:%d length:%d",
1624af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                      __func__, remainingLen, readLen, outputTlv.type,
1634af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                      outputTlv.length);
1644af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                if (outputTlv.length <= \
1654af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                    sizeof(pRsp->body.stats_response.data)) {
166a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                    handleNanStatsResponse(pRsp->body.stats_response.stats_type,
167a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                           (char *)outputTlv.value,
168a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                           &pRsp->body.stats_response);
1694af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                }
1704af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            }
1714af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            else
1724af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                ALOGI("%s: No TLV's present",__func__);
1734af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
1744af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
1754af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_ENABLE_RSP:
1764af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
1774af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanEnableRspMsg pFwRsp = \
1784af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanEnableRspMsg)mNanVendorEvent;
179a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
180a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
1814af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->value;
1824af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_ENABLED;
1834af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
1844af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
1854af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_DISABLE_RSP:
1864af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
1874af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanDisableRspMsg pFwRsp = \
1884af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanDisableRspMsg)mNanVendorEvent;
189a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
190a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
1914af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = 0;
1924af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_DISABLED;
1934af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
1944af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
1954af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_TCA_RSP:
1964af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
1974af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanTcaRspMsg pFwRsp = \
1984af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanTcaRspMsg)mNanVendorEvent;
199a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
200a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
2014af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = pFwRsp->value;
2024af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_TCA;
2034af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
2044af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
2054af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        case NAN_MSG_ID_BEACON_SDF_RSP:
2064af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        {
2074af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pNanBeaconSdfPayloadRspMsg pFwRsp = \
2084af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                (pNanBeaconSdfPayloadRspMsg)mNanVendorEvent;
209a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            *id = (transaction_id)pFwRsp->fwHeader.transactionId;
210a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik            pRsp->status = (NanStatusType)pFwRsp->status;
2114af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->value = 0;
2124af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            pRsp->response_type = NAN_RESPONSE_BEACON_SDF_PAYLOAD;
2134af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            break;
2144af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        }
2154af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        default:
2164af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam            return  -1;
2174af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
2184af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    return  0;
2194af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam}
2204af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
2214af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamint NanCommand::handleNanResponse()
2224af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
2234af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //parse the data and call
2244af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //the response callback handler with the populated
2254af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //NanResponseMsg
2264af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    NanResponseMsg  rsp_data;
2274af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int ret;
228a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    transaction_id id;
2294af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
2304af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    ALOGV("handleNanResponse called %p", this);
2314af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    memset(&rsp_data, 0, sizeof(rsp_data));
2324af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //get the rsp_data
233a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    ret = getNanResponse(&id, &rsp_data);
2344af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
2354af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    ALOGI("handleNanResponse ret:%d status:%u value:%u response_type:%u",
2364af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam          ret, rsp_data.status, rsp_data.value, rsp_data.response_type);
2374af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    if (ret == 0 && (rsp_data.response_type == NAN_RESPONSE_STATS) &&
2384af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        (mStaParam != NULL) &&
239a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        (rsp_data.body.stats_response.stats_type == NAN_STATS_ID_DE_TIMING_SYNC)) {
2404af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        /*
2414af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam           Fill the staParam with appropriate values and return from here.
2424af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam           No need to call NotifyResponse as the request is for getting the
2434af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam           STA response
2444af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        */
2454af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        NanSyncStats *pSyncStats = &rsp_data.body.stats_response.data.sync_stats;
2464af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->master_rank = pSyncStats->myRank;
2474af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->master_pref = (pSyncStats->myRank & 0xFF00000000000000) >> 56;
2484af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->random_factor = (pSyncStats->myRank & 0x00FF000000000000) >> 48;
2494af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->hop_count = pSyncStats->currAmHopCount;
2504af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        mStaParam->beacon_transmit_time = pSyncStats->currAmBTT;
2514af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
2524af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        return ret;
2534af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
2544af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //Call the NotifyResponse Handler
2554af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    if (ret == 0 && mHandler.NotifyResponse) {
256a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        (*mHandler.NotifyResponse)(id, &rsp_data);
2574af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    }
2584af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    return ret;
2594af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam}
260a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
261a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaikvoid NanCommand::handleNanStatsResponse(NanStatsType stats_type,
262a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                       char *rspBuf,
263a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                       NanStatsResponse *pRsp)
264a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik{
265a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    if (stats_type == NAN_STATS_ID_DE_PUBLISH) {
266a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanPublishStats publish_stats;
267a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanPublishStats *pPubStats = (FwNanPublishStats *)rspBuf;
268a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
269a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishServiceReqMsgs =
270a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishServiceReqMsgs;
271a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishServiceRspMsgs =
272a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishServiceRspMsgs;
273a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishServiceCancelReqMsgs =
274a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishServiceCancelReqMsgs;
275a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishServiceCancelRspMsgs =
276a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishServiceCancelRspMsgs;
277a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishRepliedIndMsgs =
278a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishRepliedIndMsgs;
279a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validPublishTerminatedIndMsgs =
280a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->validPublishTerminatedIndMsgs;
281a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validActiveSubscribes = pPubStats->validActiveSubscribes;
282a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validMatches = pPubStats->validMatches;
283a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.validFollowups = pPubStats->validFollowups;
284a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidPublishServiceReqMsgs =
285a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                    pPubStats->invalidPublishServiceReqMsgs;
286a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidPublishServiceCancelReqMsgs =
287a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pPubStats->invalidPublishServiceCancelReqMsgs;
288a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidActiveSubscribes =
289a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pPubStats->invalidActiveSubscribes;
290a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidMatches = pPubStats->invalidMatches;
291a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.invalidFollowups = pPubStats->invalidFollowups;
292a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.publishCount = pPubStats->publishCount;
293a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.publishNewMatchCount = pPubStats->publishNewMatchCount;
294a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        publish_stats.pubsubGlobalNewMatchCount =
295a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                               pPubStats->pubsubGlobalNewMatchCount;
296a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &publish_stats, sizeof(NanPublishStats));
297a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE_SUBSCRIBE) {
298a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanSubscribeStats sub_stats;
299a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanSubscribeStats *pSubStats = (FwNanSubscribeStats *)rspBuf;
300a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
301a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeServiceReqMsgs =
302a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeServiceReqMsgs;
303a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeServiceRspMsgs =
304a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeServiceRspMsgs;
305a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeServiceCancelReqMsgs =
306a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeServiceCancelReqMsgs;
307a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeServiceCancelRspMsgs =
308a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeServiceCancelRspMsgs;
309a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeTerminatedIndMsgs =
310a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeTerminatedIndMsgs;
311a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeMatchIndMsgs =
312a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeMatchIndMsgs;
313a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSubscribeUnmatchIndMsgs =
314a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSubscribeUnmatchIndMsgs;
315a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validSolicitedPublishes =
316a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                pSubStats->validSolicitedPublishes;
317a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validMatches = pSubStats->validMatches;
318a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.validFollowups = pSubStats->validFollowups;
319a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidSubscribeServiceReqMsgs =
320a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSubStats->invalidSubscribeServiceReqMsgs;
321a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidSubscribeServiceCancelReqMsgs =
322a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSubStats->invalidSubscribeServiceCancelReqMsgs;
323a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidSubscribeFollowupReqMsgs =
324a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSubStats->invalidSubscribeFollowupReqMsgs;
325a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidSolicitedPublishes =
326a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSubStats->invalidSolicitedPublishes;
327a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidMatches = pSubStats->invalidMatches;
328a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.invalidFollowups = pSubStats->invalidFollowups;
329a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.subscribeCount = pSubStats->subscribeCount;
330a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.bloomFilterIndex = pSubStats->bloomFilterIndex;
331a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.subscribeNewMatchCount = pSubStats->subscribeNewMatchCount;
332a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sub_stats.pubsubGlobalNewMatchCount =
333a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                      pSubStats->pubsubGlobalNewMatchCount;
334a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &sub_stats, sizeof(NanSubscribeStats));
335a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE_DW) {
336a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanDWStats dw_stats;
337a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanMacStats *pMacStats = (FwNanMacStats *)rspBuf;
338a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
339a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.validFrames = pMacStats->validFrames;
340a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.validActionFrames = pMacStats->validActionFrames;
341a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.validBeaconFrames = pMacStats->validBeaconFrames;
342a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.ignoredActionFrames = pMacStats->ignoredActionFrames;
343a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidFrames = pMacStats->invalidFrames;
344a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidActionFrames = pMacStats->invalidActionFrames;
345a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidBeaconFrames = pMacStats->invalidBeaconFrames;
346a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidMacHeaders = pMacStats->invalidMacHeaders;
347a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.invalidPafHeaders  = pMacStats->invalidPafHeaders;
348a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.nonNanBeaconFrames = pMacStats->nonNanBeaconFrames;
349a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.earlyActionFrames = pMacStats->earlyActionFrames;
350a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.inDwActionFrames = pMacStats->inDwActionFrames;
351a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.lateActionFrames = pMacStats->lateActionFrames;
352a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.framesQueued =  pMacStats->framesQueued;
353a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.totalTRSpUpdates = pMacStats->totalTRSpUpdates;
354a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.completeByTRSp = pMacStats->completeByTRSp;
355a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.completeByTp75DW = pMacStats->completeByTp75DW;
356a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.completeByTendDW = pMacStats->completeByTendDW;
357a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        dw_stats.lateActionFramesTx = pMacStats->lateActionFramesTx;
358a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &dw_stats, sizeof(NanDWStats));
359a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE_MAC) {
360a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanMacStats mac_stats;
361a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanMacStats *pMacStats = (FwNanMacStats *)rspBuf;
362a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
363a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.validFrames = pMacStats->validFrames;
364a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.validActionFrames = pMacStats->validActionFrames;
365a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.validBeaconFrames = pMacStats->validBeaconFrames;
366a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.ignoredActionFrames = pMacStats->ignoredActionFrames;
367a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidFrames = pMacStats->invalidFrames;
368a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidActionFrames = pMacStats->invalidActionFrames;
369a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidBeaconFrames = pMacStats->invalidBeaconFrames;
370a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidMacHeaders = pMacStats->invalidMacHeaders;
371a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.invalidPafHeaders  = pMacStats->invalidPafHeaders;
372a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.nonNanBeaconFrames = pMacStats->nonNanBeaconFrames;
373a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.earlyActionFrames = pMacStats->earlyActionFrames;
374a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.inDwActionFrames = pMacStats->inDwActionFrames;
375a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.lateActionFrames = pMacStats->lateActionFrames;
376a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.framesQueued =  pMacStats->framesQueued;
377a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.totalTRSpUpdates = pMacStats->totalTRSpUpdates;
378a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.completeByTRSp = pMacStats->completeByTRSp;
379a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.completeByTp75DW = pMacStats->completeByTp75DW;
380a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.completeByTendDW = pMacStats->completeByTendDW;
381a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.lateActionFramesTx = pMacStats->lateActionFramesTx;
382a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.twIncreases = pMacStats->twIncreases;
383a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.twDecreases = pMacStats->twDecreases;
384a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.twChanges = pMacStats->twChanges;
385a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.twHighwater = pMacStats->twHighwater;
386a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        mac_stats.bloomFilterIndex = pMacStats->bloomFilterIndex;
387a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &mac_stats, sizeof(NanMacStats));
388a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE_TIMING_SYNC) {
389a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanSyncStats sync_stats;
390a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanSyncStats *pSyncStats = (FwNanSyncStats *)rspBuf;
391a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
392a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currTsf = pSyncStats->currTsf;
393a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.myRank = pSyncStats->myRank;
394a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currAmRank = pSyncStats->currAmRank;
395a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.lastAmRank = pSyncStats->lastAmRank;
396a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currAmBTT = pSyncStats->currAmBTT;
397a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.lastAmBTT = pSyncStats->lastAmBTT;
398a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currAmHopCount = pSyncStats->currAmHopCount;
399a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currRole = pSyncStats->currRole;
400a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.currClusterId = pSyncStats->currClusterId;
401a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
402a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.timeSpentInCurrRole = pSyncStats->timeSpentInCurrRole;
403a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.totalTimeSpentAsMaster = pSyncStats->totalTimeSpentAsMaster;
404a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.totalTimeSpentAsNonMasterSync =
405a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->totalTimeSpentAsNonMasterSync;
406a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.totalTimeSpentAsNonMasterNonSync =
407a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->totalTimeSpentAsNonMasterNonSync;
408a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.transitionsToAnchorMaster =
409a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->transitionsToAnchorMaster;
410a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.transitionsToMaster =
411a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->transitionsToMaster;
412a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.transitionsToNonMasterSync =
413a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->transitionsToNonMasterSync;
414a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.transitionsToNonMasterNonSync =
415a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->transitionsToNonMasterNonSync;
416a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateCount = pSyncStats->amrUpdateCount;
417a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateRankChangedCount =
418a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->amrUpdateRankChangedCount;
419a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateBTTChangedCount =
420a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->amrUpdateBTTChangedCount;
421a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateHcChangedCount =
422a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->amrUpdateHcChangedCount;
423a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrUpdateNewDeviceCount =
424a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pSyncStats->amrUpdateNewDeviceCount;
425a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amrExpireCount = pSyncStats->amrExpireCount;
426a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.mergeCount = pSyncStats->mergeCount;
427a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsAboveHcLimit = pSyncStats->beaconsAboveHcLimit;
428a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsBelowRssiThresh = pSyncStats->beaconsBelowRssiThresh;
429a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsIgnoredNoSpace = pSyncStats->beaconsIgnoredNoSpace;
430a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsForOurCluster = pSyncStats->beaconsForOtherCluster;
431a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconsForOtherCluster = pSyncStats->beaconsForOtherCluster;
432a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconCancelRequests = pSyncStats->beaconCancelRequests;
433a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconCancelFailures = pSyncStats->beaconCancelFailures;
434a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconUpdateRequests = pSyncStats->beaconUpdateRequests;
435a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.beaconUpdateFailures = pSyncStats->beaconUpdateFailures;
436a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.syncBeaconTxAttempts = pSyncStats->syncBeaconTxAttempts;
437a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.syncBeaconTxFailures = pSyncStats->syncBeaconTxFailures;
438a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.discBeaconTxAttempts = pSyncStats->discBeaconTxAttempts;
439a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.discBeaconTxFailures = pSyncStats->discBeaconTxFailures;
440a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        sync_stats.amHopCountExpireCount = pSyncStats->amHopCountExpireCount;
441a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &sync_stats, sizeof(NanSyncStats));
442a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else if (stats_type == NAN_STATS_ID_DE) {
443a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        NanDeStats de_stats;
444a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        FwNanDeStats *pDeStats = (FwNanDeStats *)rspBuf;
445a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik
446a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validErrorRspMsgs = pDeStats->validErrorRspMsgs;
447a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTransmitFollowupReqMsgs =
448a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validTransmitFollowupReqMsgs;
449a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTransmitFollowupRspMsgs =
450a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validTransmitFollowupRspMsgs;
451a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validFollowupIndMsgs =
452a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validFollowupIndMsgs;
453a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validConfigurationReqMsgs =
454a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validConfigurationReqMsgs;
455a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validConfigurationRspMsgs =
456a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                        pDeStats->validConfigurationRspMsgs;
457a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validStatsReqMsgs = pDeStats->validStatsReqMsgs;
458a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validStatsRspMsgs = pDeStats->validStatsRspMsgs;
459a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validEnableReqMsgs = pDeStats->validEnableReqMsgs;
460a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validEnableRspMsgs = pDeStats->validEnableRspMsgs;
461a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validDisableReqMsgs = pDeStats->validDisableReqMsgs;
462a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validDisableRspMsgs = pDeStats->validDisableRspMsgs;
463a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validDisableIndMsgs = pDeStats->validDisableIndMsgs;
464a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validEventIndMsgs = pDeStats->validEventIndMsgs;
465a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTcaReqMsgs = pDeStats->validTcaReqMsgs;
466a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTcaRspMsgs = pDeStats->validTcaRspMsgs;
467a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.validTcaIndMsgs = pDeStats->validTcaIndMsgs;
468a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidTransmitFollowupReqMsgs =
469a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pDeStats->invalidTransmitFollowupReqMsgs;
470a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidConfigurationReqMsgs =
471a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                            pDeStats->invalidConfigurationReqMsgs;
472a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidStatsReqMsgs = pDeStats->invalidStatsReqMsgs;
473a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidEnableReqMsgs = pDeStats->invalidEnableReqMsgs;
474a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidDisableReqMsgs = pDeStats->invalidDisableReqMsgs;
475a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        de_stats.invalidTcaReqMsgs = pDeStats->invalidTcaReqMsgs;
476a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        memcpy(&pRsp->data, &de_stats, sizeof(NanDeStats));
477a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    } else {
478a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik        ALOGE("Unknown stats_type:%d\n", stats_type);
479a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    }
480a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik}
481