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