1*4d7e907cSAndroid Build Coastguard WorkerCopyright 2017 The Android Open Source Project 2*4d7e907cSAndroid Build Coastguard Worker 3*4d7e907cSAndroid Build Coastguard WorkerLicensed under the Apache License, Version 2.0 (the "License"); 4*4d7e907cSAndroid Build Coastguard Workeryou may not use this file except in compliance with the License. 5*4d7e907cSAndroid Build Coastguard WorkerYou may obtain a copy of the License at 6*4d7e907cSAndroid Build Coastguard Worker 7*4d7e907cSAndroid Build Coastguard Worker http://www.apache.org/licenses/LICENSE-2.0 8*4d7e907cSAndroid Build Coastguard Worker 9*4d7e907cSAndroid Build Coastguard WorkerUnless required by applicable law or agreed to in writing, software 10*4d7e907cSAndroid Build Coastguard Workerdistributed under the License is distributed on an "AS IS" BASIS, 11*4d7e907cSAndroid Build Coastguard WorkerWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*4d7e907cSAndroid Build Coastguard WorkerSee the License for the specific language governing permissions and 13*4d7e907cSAndroid Build Coastguard Workerlimitations under the License. 14*4d7e907cSAndroid Build Coastguard Worker 15*4d7e907cSAndroid Build Coastguard Worker# Wi-Fi Aware (NAN) HAL API Usage 16*4d7e907cSAndroid Build Coastguard Worker 17*4d7e907cSAndroid Build Coastguard WorkerThe Wi-Fi Aware (NAN) HAL API is defined in (<i>hardware/interfaces/wifi/1.0/</i>): 18*4d7e907cSAndroid Build Coastguard Worker 19*4d7e907cSAndroid Build Coastguard Worker* IWifiNanIface.hal 20*4d7e907cSAndroid Build Coastguard Worker* IWifiNanIfaceEventCallback.hal 21*4d7e907cSAndroid Build Coastguard Worker* types.hal (structure definitions) 22*4d7e907cSAndroid Build Coastguard Worker 23*4d7e907cSAndroid Build Coastguard WorkerThe Wi-Fi Aware (NAN) HAL API surface is very large - only a subset is used from the framework. 24*4d7e907cSAndroid Build Coastguard Worker 25*4d7e907cSAndroid Build Coastguard WorkerUnderstanding of the HAL API subset which is actively used by the Android framework can be deduced 26*4d7e907cSAndroid Build Coastguard Workerby reviewing framework code, specifically (<i>frameworks/opt/net/wifi/</i>): 27*4d7e907cSAndroid Build Coastguard Worker 28*4d7e907cSAndroid Build Coastguard Worker* WifiAwareNativeApi.java 29*4d7e907cSAndroid Build Coastguard Worker* WifiAwareNativeCallback.java 30*4d7e907cSAndroid Build Coastguard Worker 31*4d7e907cSAndroid Build Coastguard WorkerThe above framework files determine the API usage - and should be consulted as the authoritative 32*4d7e907cSAndroid Build Coastguard Workerreference. Please consult the primary HAL file for documentation - they will not be replicated 33*4d7e907cSAndroid Build Coastguard Workerin this document. APIs which are in the HAL but are not listed in this README file are not used by 34*4d7e907cSAndroid Build Coastguard Workerthe framework. 35*4d7e907cSAndroid Build Coastguard Worker 36*4d7e907cSAndroid Build Coastguard WorkerNote: the HAL API is translated to the legacy HAL API (<i>wifi_nan.h</i>). This README file covers 37*4d7e907cSAndroid Build Coastguard Workerthe new HAL API only. To understand the mapping between new and legacy HALs please consult 38*4d7e907cSAndroid Build Coastguard Worker<i>hardware/interfaces/wifi/\<version\>/default/hidl_struct_util.cpp</i>. 39*4d7e907cSAndroid Build Coastguard Worker 40*4d7e907cSAndroid Build Coastguard Worker## IWifiNanIface 41*4d7e907cSAndroid Build Coastguard Worker 42*4d7e907cSAndroid Build Coastguard WorkerFormat: 43*4d7e907cSAndroid Build Coastguard Worker* Hard-coded values are in <b>bold</b>, e.g. <b>true</b> or <b>5</b> 44*4d7e907cSAndroid Build Coastguard Worker* Assigned but not fixed values are specified using the <i>variable</i> keyword, possibly with some 45*4d7e907cSAndroid Build Coastguard Workerdetails/constraints 46*4d7e907cSAndroid Build Coastguard Worker* Unassigned values are specified using the <i>N/A</i> keyword. Unassigned usually means initialized 47*4d7e907cSAndroid Build Coastguard Workerto 0. 48*4d7e907cSAndroid Build Coastguard Worker 49*4d7e907cSAndroid Build Coastguard WorkerAPIs: 50*4d7e907cSAndroid Build Coastguard Worker 51*4d7e907cSAndroid Build Coastguard Worker* registerEventCallback(IWifiNanIfaceEventCallback callback) 52*4d7e907cSAndroid Build Coastguard Worker* getCapabilitiesRequest 53*4d7e907cSAndroid Build Coastguard Worker* enableRequest 54*4d7e907cSAndroid Build Coastguard Worker * NanEnableRequest 55*4d7e907cSAndroid Build Coastguard Worker * bool[2] operateInBand 56*4d7e907cSAndroid Build Coastguard Worker * Index [NanBandIndex.NAN_BAND_24GHZ] = <b>true</b> 57*4d7e907cSAndroid Build Coastguard Worker * Index [NanBandIndex.NAN_BAND_5GHZ] = <i>variable</i> 58*4d7e907cSAndroid Build Coastguard Worker * uint8_t hopCountMax = <b>2</b> 59*4d7e907cSAndroid Build Coastguard Worker * NanConfigRequest configParams 60*4d7e907cSAndroid Build Coastguard Worker * uint8_t masterPref = <i>variable</i> 61*4d7e907cSAndroid Build Coastguard Worker * bool disableDiscoveryAddressChangeIndication = <i>variable</i> 62*4d7e907cSAndroid Build Coastguard Worker * bool disableStartedClusterIndication = <i>variable</i> 63*4d7e907cSAndroid Build Coastguard Worker * bool disableJoinedClusterIndication = <i>variable</i> 64*4d7e907cSAndroid Build Coastguard Worker * bool includePublishServiceIdsInBeacon = <b>true</b> 65*4d7e907cSAndroid Build Coastguard Worker * uint8_t numberOfPublishServiceIdsInBeacon = <b>0</b> 66*4d7e907cSAndroid Build Coastguard Worker * bool includeSubscribeServiceIdsInBeacon = <b>true</b> 67*4d7e907cSAndroid Build Coastguard Worker * uint8_t numberOfSubscribeServiceIdsInBeacon = <b>0</b> 68*4d7e907cSAndroid Build Coastguard Worker * uint16_t rssiWindowSize = <b>8</b> 69*4d7e907cSAndroid Build Coastguard Worker * uint32_t macAddressRandomizationIntervalSec = <i>variable</i> 70*4d7e907cSAndroid Build Coastguard Worker * Normal run-time: set to <b>1800</b> (30 minutes) 71*4d7e907cSAndroid Build Coastguard Worker * Tests: set to <b>120</b> (2 minutes) 72*4d7e907cSAndroid Build Coastguard Worker * NanBandSpecificConfig[2] bandSpecificConfig 73*4d7e907cSAndroid Build Coastguard Worker * Index [NanBandIndex.NAN_BAND_24GHZ] 74*4d7e907cSAndroid Build Coastguard Worker * uint8_t rssiClose = <b>60</b> 75*4d7e907cSAndroid Build Coastguard Worker * uint8_t rssiMiddle = <b>70</b> 76*4d7e907cSAndroid Build Coastguard Worker * uint8_t rssiCloseProximity = <b>60</b> 77*4d7e907cSAndroid Build Coastguard Worker * uint8_t dwellTimeMs = <b>200</b> 78*4d7e907cSAndroid Build Coastguard Worker * uint16_t scanPeriodSec = <b>20</b> 79*4d7e907cSAndroid Build Coastguard Worker * bool validDiscoveryWindowIntervalVal = <i>variable</i> 80*4d7e907cSAndroid Build Coastguard Worker * uint8_t discoveryWindowIntervalVal = <i>variable</i> 81*4d7e907cSAndroid Build Coastguard Worker * Index [NanBandIndex.NAN_BAND_5GHZ] 82*4d7e907cSAndroid Build Coastguard Worker * uint8_t rssiClose = <b>60</b> 83*4d7e907cSAndroid Build Coastguard Worker * uint8_t rssiMiddle = <b>75</b> 84*4d7e907cSAndroid Build Coastguard Worker * uint8_t rssiCloseProximity = <b>60</b> 85*4d7e907cSAndroid Build Coastguard Worker * uint8_t dwellTimeMs = <b>200</b> 86*4d7e907cSAndroid Build Coastguard Worker * uint16_t scanPeriodSec = <b>20</b> 87*4d7e907cSAndroid Build Coastguard Worker * bool validDiscoveryWindowIntervalVal = <i>variable</i> 88*4d7e907cSAndroid Build Coastguard Worker * uint8_t discoveryWindowIntervalVal = <i>variable</i> 89*4d7e907cSAndroid Build Coastguard Worker * NanDebugConfig debugConfigs 90*4d7e907cSAndroid Build Coastguard Worker * bool validClusterIdVals = <b>true</b> 91*4d7e907cSAndroid Build Coastguard Worker * uint16_t clusterIdBottomRangeVal = <i>variable</i> 92*4d7e907cSAndroid Build Coastguard Worker * uint16_t clusterIdTopRangeVal = <i>variable</i> 93*4d7e907cSAndroid Build Coastguard Worker * bool validIntfAddrVal = <b>false</b> 94*4d7e907cSAndroid Build Coastguard Worker * MacAddress intfAddrVal = <i>N/A</i> 95*4d7e907cSAndroid Build Coastguard Worker * bool validOuiVal = <b>false</b> 96*4d7e907cSAndroid Build Coastguard Worker * uint32_t ouiVal = <i>N/A</i> 97*4d7e907cSAndroid Build Coastguard Worker * bool validRandomFactorForceVal = <b>false</b> 98*4d7e907cSAndroid Build Coastguard Worker * uint8_t randomFactorForceVal = <i>N/A</i> 99*4d7e907cSAndroid Build Coastguard Worker * bool validHopCountForceVal = <b>false</b> 100*4d7e907cSAndroid Build Coastguard Worker * uint8_t hopCountForceVal = <i>N/A</i> 101*4d7e907cSAndroid Build Coastguard Worker * bool validDiscoveryChannelVal = <b>false</b> 102*4d7e907cSAndroid Build Coastguard Worker * WifiChannelInMhz[2] discoveryChannelMhzVal = <i>N/A</i> 103*4d7e907cSAndroid Build Coastguard Worker * bool validUseBeaconsInBandVal = <b>false</b> 104*4d7e907cSAndroid Build Coastguard Worker * bool[2] useBeaconsInBandVal = <i>N/A</i> 105*4d7e907cSAndroid Build Coastguard Worker * bool validUseSdfInBandVal = <b>false</b> 106*4d7e907cSAndroid Build Coastguard Worker * bool[2] useSdfInBandVal = <i>N/A</i> 107*4d7e907cSAndroid Build Coastguard Worker* configRequest 108*4d7e907cSAndroid Build Coastguard Worker * NanConfigRequest: same as for <i>enableRequest</i> 109*4d7e907cSAndroid Build Coastguard Worker* disableRequest 110*4d7e907cSAndroid Build Coastguard Worker* startPublishRequest 111*4d7e907cSAndroid Build Coastguard Worker * NanPublishRequest 112*4d7e907cSAndroid Build Coastguard Worker * NanDiscoveryCommonConfig baseConfigs 113*4d7e907cSAndroid Build Coastguard Worker * uint8_t sessionId = <i>variable</i> 114*4d7e907cSAndroid Build Coastguard Worker * uint16_t ttlSec = <i>variable</i> 115*4d7e907cSAndroid Build Coastguard Worker * uint16_t discoveryWindowPeriod = <b>1</b> 116*4d7e907cSAndroid Build Coastguard Worker * uint8_t discoveryCount = <b>0</b> 117*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> serviceName = <i>variable</i> 118*4d7e907cSAndroid Build Coastguard Worker * NanMatchAlg discoveryMatchIndicator = <b>NanMatchAlg.MATCH_NEVER</b> 119*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> serviceSpecificInfo = <i>variable</i> 120*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> extendedServiceSpecificInfo = <i>N/A</i> 121*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> rxMatchFilter = <i>variable</i> 122*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> txMatchFilter = <i>variable</i> 123*4d7e907cSAndroid Build Coastguard Worker * bool useRssiThreshold = <b>false</b> 124*4d7e907cSAndroid Build Coastguard Worker * bool disableDiscoveryTerminationIndication = <i>variable</i> 125*4d7e907cSAndroid Build Coastguard Worker * bool disableMatchExpirationIndication = <b>true</b> 126*4d7e907cSAndroid Build Coastguard Worker * bool disableFollowupReceivedIndication = <b>false</b> 127*4d7e907cSAndroid Build Coastguard Worker * NanDataPathSecurityConfig securityConfig = <b>NanDataPathSecurityType.OPEN</b> 128*4d7e907cSAndroid Build Coastguard Worker * bool rangingRequired = <b>false</b> 129*4d7e907cSAndroid Build Coastguard Worker * uint32_t rangingIntervalMsec = <i>N/A</i> 130*4d7e907cSAndroid Build Coastguard Worker * bitfield<NanRangingIndication> configRangingIndications = <i>N/A</i> 131*4d7e907cSAndroid Build Coastguard Worker * uint16_t distanceIngressCm = <i>N/A</i> 132*4d7e907cSAndroid Build Coastguard Worker * uint16_t distanceEgressCm = <i>N/A</i> 133*4d7e907cSAndroid Build Coastguard Worker * NanPublishType publishType = <i>variable</i> 134*4d7e907cSAndroid Build Coastguard Worker * NanTxType txType = <b>NanTxType.BROADCAST</b> 135*4d7e907cSAndroid Build Coastguard Worker * bool autoAcceptDataPathRequests = <b>false</b> 136*4d7e907cSAndroid Build Coastguard Worker* stopPublishRequest 137*4d7e907cSAndroid Build Coastguard Worker* startSubscribeRequest 138*4d7e907cSAndroid Build Coastguard Worker * NanSubscribeRequest 139*4d7e907cSAndroid Build Coastguard Worker * NanDiscoveryCommonConfig baseConfigs 140*4d7e907cSAndroid Build Coastguard Worker * Mostly same as <i>publish</i> above except: 141*4d7e907cSAndroid Build Coastguard Worker * NanMatchAlg discoveryMatchIndicator = <b>NanMatchAlg.MATCH_ONCE</b> 142*4d7e907cSAndroid Build Coastguard Worker * NanSubscribeType subscribeType = <i>variable</i> 143*4d7e907cSAndroid Build Coastguard Worker * NanSrfType srfType = <i>N/A</i> 144*4d7e907cSAndroid Build Coastguard Worker * bool srfRespondIfInAddressSet = <i>N/A</i> 145*4d7e907cSAndroid Build Coastguard Worker * bool shouldUseSrf = <i>N/A</i> 146*4d7e907cSAndroid Build Coastguard Worker * bool isSsiRequiredForMatch = <i>N/A</i> 147*4d7e907cSAndroid Build Coastguard Worker * vec<MacAddress> intfAddr = <i>N/A</i> 148*4d7e907cSAndroid Build Coastguard Worker* stopSubscribeRequest 149*4d7e907cSAndroid Build Coastguard Worker* transmitFollowupRequest 150*4d7e907cSAndroid Build Coastguard Worker * NanTransmitFollowupRequest 151*4d7e907cSAndroid Build Coastguard Worker * uint8_t discoverySessionId = <i>variable</i> 152*4d7e907cSAndroid Build Coastguard Worker * uint32_t peerId = <i>variable</i> 153*4d7e907cSAndroid Build Coastguard Worker * MacAddress addr = <i>variable</i> 154*4d7e907cSAndroid Build Coastguard Worker * bool isHighPriority = <b>false</b> 155*4d7e907cSAndroid Build Coastguard Worker * bool shouldUseDiscoveryWindow = <b>true</b> 156*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> serviceSpecificInfo = <i>variable</i> 157*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> extendedServiceSpecificInfo = <i>N/A</i> 158*4d7e907cSAndroid Build Coastguard Worker * bool disableFollowupResultIndication = <b>false</b> 159*4d7e907cSAndroid Build Coastguard Worker* createDataInterfaceRequest 160*4d7e907cSAndroid Build Coastguard Worker* deleteDataInterfaceRequest 161*4d7e907cSAndroid Build Coastguard Worker* initiateDataPathRequest 162*4d7e907cSAndroid Build Coastguard Worker * NanInitiateDataPathRequest 163*4d7e907cSAndroid Build Coastguard Worker * uint32_t peerId = <i>variable</i> 164*4d7e907cSAndroid Build Coastguard Worker * MacAddress peerDiscMacAddr = <i>variable</i> 165*4d7e907cSAndroid Build Coastguard Worker * NanDataPathChannelCfg channelRequestType = 166*4d7e907cSAndroid Build Coastguard Worker <i>NanDataPathChannelCfg.CHANNEL_NOT_REQUESTED</i> 167*4d7e907cSAndroid Build Coastguard Worker * WifiChannelInMhz channel = <b>2437</b> (note that should be ignored though - 168*4d7e907cSAndroid Build Coastguard Worker CHANNEL_NOT_REQUESTED!) 169*4d7e907cSAndroid Build Coastguard Worker * string ifaceName = <i>variable</i> 170*4d7e907cSAndroid Build Coastguard Worker * NanDataPathSecurityConfig securityConfig = <i>variable</i> 171*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> appInfo = <i>N/A</i> 172*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> serviceNameOutOfBand = <i>variable</i> 173*4d7e907cSAndroid Build Coastguard Worker* respondToDataPathIndicationRequest 174*4d7e907cSAndroid Build Coastguard Worker * NanRespondToDataPathIndicationRequest 175*4d7e907cSAndroid Build Coastguard Worker * bool acceptRequest = <i>variable</i> 176*4d7e907cSAndroid Build Coastguard Worker * uint32_t ndpInstanceId = <i>variable</i> 177*4d7e907cSAndroid Build Coastguard Worker * string ifaceName = <i>variable</i> 178*4d7e907cSAndroid Build Coastguard Worker * NanDataPathSecurityConfig securityConfig = <i>variable</i> 179*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> appInfo = <i>N/A</i> 180*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> serviceNameOutOfBand = <i>variable</i> 181*4d7e907cSAndroid Build Coastguard Worker* terminateDataPathRequest 182*4d7e907cSAndroid Build Coastguard Worker 183*4d7e907cSAndroid Build Coastguard Worker## IWifiNanIfaceEventCallback 184*4d7e907cSAndroid Build Coastguard Worker 185*4d7e907cSAndroid Build Coastguard WorkerFormat: 186*4d7e907cSAndroid Build Coastguard Worker* Parameters whose values are <i>ignored</i> will be flagged, otherwise the parameter value is used 187*4d7e907cSAndroid Build Coastguard Workerby the framework. 188*4d7e907cSAndroid Build Coastguard Worker 189*4d7e907cSAndroid Build Coastguard WorkerAPI: 190*4d7e907cSAndroid Build Coastguard Worker 191*4d7e907cSAndroid Build Coastguard Worker* notifyXxxResponse: all callbacks are used by framework 192*4d7e907cSAndroid Build Coastguard Worker* eventClusterEvent 193*4d7e907cSAndroid Build Coastguard Worker* eventDisabled 194*4d7e907cSAndroid Build Coastguard Worker* eventPublishTerminated 195*4d7e907cSAndroid Build Coastguard Worker* eventSubscribeTerminated 196*4d7e907cSAndroid Build Coastguard Worker* eventMatch 197*4d7e907cSAndroid Build Coastguard Worker * NanMatchInd (all parameters are used except those listed below) 198*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> extendedServiceSpecificInfo: <i>ignored</i> 199*4d7e907cSAndroid Build Coastguard Worker * bool matchOccuredInBeaconFlag: <i>ignored</i> 200*4d7e907cSAndroid Build Coastguard Worker * bool outOfResourceFlag: <i>ignored</i> 201*4d7e907cSAndroid Build Coastguard Worker * uint8_t rssiValue: <i>ignored</i> 202*4d7e907cSAndroid Build Coastguard Worker * NanCipherSuiteType peerCipherType: <i>ignored</i> 203*4d7e907cSAndroid Build Coastguard Worker * bool peerRequiresSecurityEnabledInNdp: <i>ignored</i> 204*4d7e907cSAndroid Build Coastguard Worker * bool peerRequiresRanging: <i>ignored</i> 205*4d7e907cSAndroid Build Coastguard Worker * uint32_t rangingMeasurementInCm: <i>ignored</i> 206*4d7e907cSAndroid Build Coastguard Worker * bitfield<NanRangingIndication> rangingIndicationType: <i>ignored</i> 207*4d7e907cSAndroid Build Coastguard Worker* eventMatchExpired: <i>ignored</i> 208*4d7e907cSAndroid Build Coastguard Worker* eventFollowupReceived 209*4d7e907cSAndroid Build Coastguard Worker * NanFollowupReceivedInd (all parameters are used except those listed below) 210*4d7e907cSAndroid Build Coastguard Worker * bool receivedInFaw: <i>ignored</i> 211*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> extendedServiceSpecificInfo: <i>ignored</i> 212*4d7e907cSAndroid Build Coastguard Worker* eventTransmitFollowup 213*4d7e907cSAndroid Build Coastguard Worker* eventDataPathRequest 214*4d7e907cSAndroid Build Coastguard Worker * NanDataPathRequestInd (all parameters are used except those listed below) 215*4d7e907cSAndroid Build Coastguard Worker * bool securityRequired: <i>ignored</i> 216*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> appInfo: <i>ignored</i> 217*4d7e907cSAndroid Build Coastguard Worker* eventDataPathConfirm 218*4d7e907cSAndroid Build Coastguard Worker * NanDataPathConfirmInd (all parameters are used except those listed below) 219*4d7e907cSAndroid Build Coastguard Worker * vec<uint8_t> appInfo: <i>ignored</i> 220*4d7e907cSAndroid Build Coastguard Worker* eventDataPathTerminated 221*4d7e907cSAndroid Build Coastguard Worker 222