| /* |
| * Copyright (C) 2014 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #ifndef __WIFI_HAL_NAN_COMMAND_H__ |
| #define __WIFI_HAL_NAN_COMMAND_H__ |
| |
| #include "common.h" |
| #include "cpp_bindings.h" |
| #include "wifi_hal.h" |
| #include "nan_cert.h" |
| |
| class NanCommand : public WifiVendorCommand |
| { |
| private: |
| NanCallbackHandler mHandler; |
| char *mNanVendorEvent; |
| u32 mNanDataLen; |
| NanStaParameter *mStaParam; |
| |
| //Function to check the initial few bytes of data to |
| //determine whether NanResponse or NanEvent |
| int isNanResponse(); |
| //Function which unparses the data and calls the NotifyResponse |
| int handleNanResponse(); |
| //Function which will parse the mVendorData and gets |
| // the rsp_data appropriately. |
| int getNanResponse(transaction_id *id, NanResponseMsg *pRsp); |
| //Function which will return the Nan Indication type based on |
| //the initial few bytes of mVendorData |
| NanIndicationType getIndicationType(); |
| //Function which calls the necessaryIndication callback |
| //based on the indication type |
| int handleNanIndication(); |
| //Various Functions to get the appropriate indications |
| int getNanPublishReplied(NanPublishRepliedInd *event); |
| int getNanPublishTerminated(NanPublishTerminatedInd *event); |
| int getNanMatch(NanMatchInd *event); |
| int getNanMatchExpired(NanMatchExpiredInd *event); |
| int getNanSubscribeTerminated(NanSubscribeTerminatedInd *event); |
| int getNanFollowup(NanFollowupInd *event); |
| int getNanDiscEngEvent(NanDiscEngEventInd *event); |
| int getNanDisabled(NanDisabledInd *event); |
| int getNanTca(NanTCAInd *event); |
| int getNanBeaconSdfPayload(NanBeaconSdfPayloadInd *event); |
| //Internal cleanup function |
| void cleanup(); |
| |
| static NanCommand *mNanCommandInstance; |
| |
| // Other private helper functions |
| int calcNanTransmitPostDiscoverySize( |
| const NanTransmitPostDiscovery *pPostDiscovery); |
| void fillNanSocialChannelParamVal( |
| const NanSocialChannelScanParams *pScanParams, |
| u32* pChannelParamArr); |
| u32 getNanTransmitPostConnectivityCapabilityVal( |
| const NanTransmitPostConnectivityCapability *pCapab); |
| void fillNanTransmitPostDiscoveryVal( |
| const NanTransmitPostDiscovery *pTxDisc, |
| u8 *pOutValue); |
| int calcNanFurtherAvailabilityMapSize( |
| const NanFurtherAvailabilityMap *pFam); |
| void fillNanFurtherAvailabilityMapVal( |
| const NanFurtherAvailabilityMap *pFam, |
| u8 *pOutValue); |
| |
| void getNanReceivePostConnectivityCapabilityVal( |
| const u8* pInValue, |
| NanReceivePostConnectivityCapability *pRxCapab); |
| void getNanReceiveSdeaCtrlParams(const u8* pInValue, |
| NanSdeaCtrlParams *pPeerSdeaParams); |
| int getNanReceivePostDiscoveryVal(const u8 *pInValue, |
| u32 length, |
| NanReceivePostDiscovery *pRxDisc); |
| int getNanFurtherAvailabilityMap(const u8 *pInValue, |
| u32 length, |
| u8* num_chans, |
| NanFurtherAvailabilityChannel *pFac); |
| void handleNanStatsResponse(NanStatsType stats_type, |
| char* rspBuf, |
| NanStatsResponse *pRsp, |
| u32 message_len); |
| |
| //Function which unparses the data and calls the NotifyResponse |
| int handleNdpResponse(NanResponseType ndpCmdtyp, struct nlattr **tb_vendor); |
| int handleNdpIndication(u32 ndpCmdType, struct nlattr **tb_vendor); |
| int getNdpRequest(struct nlattr **tb_vendor, NanDataPathRequestInd *event); |
| int getNdpConfirm(struct nlattr **tb_vendor, NanDataPathConfirmInd *event); |
| int getNdpEnd(struct nlattr **tb_vendor, NanDataPathEndInd *event); |
| int getNanTransmitFollowupInd(NanTransmitFollowupInd *event); |
| int getNanRangeRequestReceivedInd(NanRangeRequestInd *event); |
| int getNanRangeReportInd(NanRangeReportInd *event); |
| int getNdpScheduleUpdate(struct nlattr **tb_vendor, NanDataPathScheduleUpdateInd *event); |
| public: |
| NanCommand(wifi_handle handle, int id, u32 vendor_id, u32 subcmd); |
| static NanCommand* instance(wifi_handle handle); |
| virtual ~NanCommand(); |
| |
| // This function implements creation of NAN specific Request |
| // based on the request type |
| virtual wifi_error create(); |
| virtual wifi_error requestEvent(); |
| virtual int handleResponse(WifiEvent &reply); |
| virtual int handleEvent(WifiEvent &event); |
| wifi_error setCallbackHandler(NanCallbackHandler nHandler); |
| |
| |
| //Functions to fill the vendor data appropriately |
| wifi_error putNanEnable(transaction_id id, const NanEnableRequest *pReq); |
| wifi_error putNanDisable(transaction_id id); |
| wifi_error putNanPublish(transaction_id id, const NanPublishRequest *pReq); |
| wifi_error putNanPublishCancel(transaction_id id, const NanPublishCancelRequest *pReq); |
| wifi_error putNanSubscribe(transaction_id id, const NanSubscribeRequest *pReq); |
| wifi_error putNanSubscribeCancel(transaction_id id, const NanSubscribeCancelRequest *pReq); |
| wifi_error putNanTransmitFollowup(transaction_id id, const NanTransmitFollowupRequest *pReq); |
| wifi_error putNanStats(transaction_id id, const NanStatsRequest *pReq); |
| wifi_error putNanConfig(transaction_id id, const NanConfigRequest *pReq); |
| wifi_error putNanTCA(transaction_id id, const NanTCARequest *pReq); |
| wifi_error putNanBeaconSdfPayload(transaction_id id, const NanBeaconSdfPayloadRequest *pReq); |
| wifi_error getNanStaParameter(wifi_interface_handle iface, NanStaParameter *pRsp); |
| wifi_error putNanCapabilities(transaction_id id); |
| wifi_error putNanDebugCommand(NanDebugParams debug, int debug_msg_length); |
| |
| /* Functions for NAN error translation |
| For NanResponse, NanPublishTerminatedInd, NanSubscribeTerminatedInd, |
| NanDisabledInd, NanTransmitFollowupInd: |
| function to translate firmware specific errors |
| to generic freamework error along with the error string |
| */ |
| void NanErrorTranslation(NanInternalStatusType firmwareErrorRecvd, |
| u32 valueRcvd, |
| void *pRsp, |
| bool is_ndp_rsp); |
| }; |
| #endif /* __WIFI_HAL_NAN_COMMAND_H__ */ |
| |