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