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#ifndef __WIFI_HAL_NAN_COMMAND_H__
185c63f6a5f46ca95fe003bac5cfae2fc74a0b22a7Subhani Shaik#define __WIFI_HAL_NAN_COMMAND_H__
194af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
204af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "common.h"
214af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam#include "cpp_bindings.h"
22a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik#include "wifi_hal.h"
234af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
244af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamclass NanCommand : public WifiVendorCommand
254af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam{
264af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyamprivate:
274af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    NanCallbackHandler mHandler;
284af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    char *mNanVendorEvent;
294af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    u32 mNanDataLen;
304af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    NanStaParameter *mStaParam;
314af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
324af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //Function to check the initial few bytes of data to
334af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //determine whether NanResponse or NanEvent
344af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int isNanResponse();
354af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //Function which unparses the data and calls the NotifyResponse
364af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int handleNanResponse();
374af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //Function which will parse the mVendorData and gets
384af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    // the rsp_data appropriately.
39a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int getNanResponse(transaction_id *id, NanResponseMsg *pRsp);
404af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //Function which will return the Nan Indication type based on
414af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //the initial few bytes of mVendorData
424af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    NanIndicationType getIndicationType();
434af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //Function which calls the necessaryIndication callback
444af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //based on the indication type
454af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int handleNanIndication();
464af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //Various Functions to get the appropriate indications
474af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanPublishTerminated(NanPublishTerminatedInd *event);
484af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanMatch(NanMatchInd *event);
4917ee741489e21713642ac29853da176bbd5c4698Subhani Shaik    int getNanMatchExpired(NanMatchExpiredInd *event);
504af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanSubscribeTerminated(NanSubscribeTerminatedInd *event);
514af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanFollowup(NanFollowupInd *event);
524af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanDiscEngEvent(NanDiscEngEventInd *event);
534af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanDisabled(NanDisabledInd *event);
544af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanTca(NanTCAInd *event);
554af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanBeaconSdfPayload(NanBeaconSdfPayloadInd *event);
56a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    //Internal cleanup function
57a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    void cleanup();
584af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
594af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    static NanCommand *mNanCommandInstance;
604af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
614af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    // Other private helper functions
624af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int calcNanTransmitPostDiscoverySize(
634af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        const NanTransmitPostDiscovery *pPostDiscovery);
644af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    void fillNanSocialChannelParamVal(
654af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        const NanSocialChannelScanParams *pScanParams,
664af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        u32* pChannelParamArr);
674af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    u32 getNanTransmitPostConnectivityCapabilityVal(
684af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        const NanTransmitPostConnectivityCapability *pCapab);
694af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    void fillNanTransmitPostDiscoveryVal(
704af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        const NanTransmitPostDiscovery *pTxDisc,
714af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        u8 *pOutValue);
724af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int calcNanFurtherAvailabilityMapSize(
734af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        const NanFurtherAvailabilityMap *pFam);
744af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    void fillNanFurtherAvailabilityMapVal(
754af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        const NanFurtherAvailabilityMap *pFam,
764af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        u8 *pOutValue);
774af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
784af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    void getNanReceivePostConnectivityCapabilityVal(
794af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        const u8* pInValue,
804af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam        NanReceivePostConnectivityCapability *pRxCapab);
814af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanReceivePostDiscoveryVal(const u8 *pInValue,
824af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                                      u32 length,
834af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                                      NanReceivePostDiscovery *pRxDisc);
844af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    int getNanFurtherAvailabilityMap(const u8 *pInValue,
854af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam                                     u32 length,
86a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                     u8* num_chans,
87a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                     NanFurtherAvailabilityChannel *pFac);
88a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    void handleNanStatsResponse(NanStatsType stats_type,
89a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                char* rspBuf,
90a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik                                NanStatsResponse *pRsp);
914af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
924af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyampublic:
93a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    NanCommand(wifi_handle handle, int id, u32 vendor_id, u32 subcmd);
944af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    static NanCommand* instance(wifi_handle handle);
954af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual ~NanCommand();
964af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
974af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    // This function implements creation of NAN specific Request
984af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    // based on  the request type
994af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual int create();
1004af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual int requestEvent();
1015c63f6a5f46ca95fe003bac5cfae2fc74a0b22a7Subhani Shaik    virtual int handleResponse(WifiEvent &reply);
1024af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    virtual int handleEvent(WifiEvent &event);
103a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int setCallbackHandler(NanCallbackHandler nHandler);
1044af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
1054af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
1064af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam    //Functions to fill the vendor data appropriately
107a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanEnable(transaction_id id, const NanEnableRequest *pReq);
108a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanDisable(transaction_id id);
109a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanPublish(transaction_id id, const NanPublishRequest *pReq);
110a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanPublishCancel(transaction_id id, const NanPublishCancelRequest *pReq);
111a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanSubscribe(transaction_id id, const NanSubscribeRequest *pReq);
112a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanSubscribeCancel(transaction_id id, const NanSubscribeCancelRequest *pReq);
113a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanTransmitFollowup(transaction_id id, const NanTransmitFollowupRequest *pReq);
114a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanStats(transaction_id id, const NanStatsRequest *pReq);
115a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanConfig(transaction_id id, const NanConfigRequest *pReq);
116a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanTCA(transaction_id id, const NanTCARequest *pReq);
117a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int putNanBeaconSdfPayload(transaction_id id, const NanBeaconSdfPayloadRequest *pReq);
118a3c2c8f1bfcddd50047c8ad29e535a54e99acf62Subhani Shaik    int getNanStaParameter(wifi_interface_handle iface, NanStaParameter *pRsp);
11917ee741489e21713642ac29853da176bbd5c4698Subhani Shaik    int putNanCapabilities(transaction_id id);
1204af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam};
1215c63f6a5f46ca95fe003bac5cfae2fc74a0b22a7Subhani Shaik#endif /* __WIFI_HAL_NAN_COMMAND_H__ */
1224af494a4400d1ee3944e227626d0452e033284d5Amarnath Hullur Subramanyam
123