xref: /aosp_15_r20/hardware/interfaces/wifi/1.0/README-NAN.md (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
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