| Copyright 2018 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. |
| |
| # Wi-Fi Aware (NAN) HAL API Usage |
| |
| The Wi-Fi Aware (NAN) HAL API is defined in (<i>hardware/interfaces/wifi/1.0/</i> and |
| <i>hardware/interfaces/wifi/1.2/</i>): |
| |
| * IWifiNanIface.hal |
| * IWifiNanIfaceEventCallback.hal |
| * types.hal (structure definitions) |
| |
| Note that the <i>1.2</i> HAL is supplemental to the <i>1.0</i> HAL - not a replacement. |
| |
| The Wi-Fi Aware (NAN) HAL API surface is very large - only a subset is used from the framework. |
| |
| Understanding of the HAL API subset which is actively used by the Android framework can be deduced |
| by reviewing framework code, specifically (<i>frameworks/opt/net/wifi/</i>): |
| |
| * WifiAwareNativeApi.java |
| * WifiAwareNativeCallback.java |
| |
| The above framework files determine the API usage - and should be consulted as the authoritative |
| reference. Please consult the primary HAL file for documentation - they will not be replicated |
| in this document. APIs which are in the HAL but are not listed in this README file are not used by |
| the framework. |
| |
| Note: the HAL API is translated to the legacy HAL API (<i>wifi_nan.h</i>). This README file covers |
| the new HAL API only. To understand the mapping between new and legacy HALs please consult |
| <i>hardware/interfaces/wifi/\<version\>/default/hidl_struct_util.cpp</i>. |
| |
| ## IWifiNanIface |
| |
| Format: |
| * Hard-coded values are in <b>bold</b>, e.g. <b>true</b> or <b>5</b> |
| * Assigned but not fixed values are specified using the <i>variable</i> keyword, possibly with some |
| details/constraints |
| * Unassigned values are specified using the <i>N/A</i> keyword. Unassigned usually means initialized |
| to 0. |
| |
| APIs: |
| |
| * registerEventCallback_1_2(IWifiNanIfaceEventCallback_1_2 callback) |
| * getCapabilitiesRequest |
| * enableRequest_1_2 |
| * NanEnableRequest |
| * bool[2] operateInBand |
| * Index [NanBandIndex.NAN_BAND_24GHZ] = <b>true</b> |
| * Index [NanBandIndex.NAN_BAND_5GHZ] = <i>variable</i> |
| * uint8_t hopCountMax = <b>2</b> |
| * NanConfigRequest configParams |
| * uint8_t masterPref = <i>variable</i> |
| * bool disableDiscoveryAddressChangeIndication = <i>variable</i> |
| * bool disableStartedClusterIndication = <i>variable</i> |
| * bool disableJoinedClusterIndication = <i>variable</i> |
| * bool includePublishServiceIdsInBeacon = <b>true</b> |
| * uint8_t numberOfPublishServiceIdsInBeacon = <b>0</b> |
| * bool includeSubscribeServiceIdsInBeacon = <b>true</b> |
| * uint8_t numberOfSubscribeServiceIdsInBeacon = <b>0</b> |
| * uint16_t rssiWindowSize = <b>8</b> |
| * uint32_t macAddressRandomizationIntervalSec = <i>variable</i> |
| * Normal run-time: set to <b>1800</b> (30 minutes) |
| * Tests: set to <b>120</b> (2 minutes) |
| * NanBandSpecificConfig[2] bandSpecificConfig |
| * Index [NanBandIndex.NAN_BAND_24GHZ] |
| * uint8_t rssiClose = <b>60</b> |
| * uint8_t rssiMiddle = <b>70</b> |
| * uint8_t rssiCloseProximity = <b>60</b> |
| * uint8_t dwellTimeMs = <b>200</b> |
| * uint16_t scanPeriodSec = <b>20</b> |
| * bool validDiscoveryWindowIntervalVal = <i>variable</i> |
| * uint8_t discoveryWindowIntervalVal = <i>variable</i> |
| * Index [NanBandIndex.NAN_BAND_5GHZ] |
| * uint8_t rssiClose = <b>60</b> |
| * uint8_t rssiMiddle = <b>75</b> |
| * uint8_t rssiCloseProximity = <b>60</b> |
| * uint8_t dwellTimeMs = <b>200</b> |
| * uint16_t scanPeriodSec = <b>20</b> |
| * bool validDiscoveryWindowIntervalVal = <i>variable</i> |
| * uint8_t discoveryWindowIntervalVal = <i>variable</i> |
| * NanDebugConfig debugConfigs |
| * bool validClusterIdVals = <b>true</b> |
| * uint16_t clusterIdBottomRangeVal = <i>variable</i> |
| * uint16_t clusterIdTopRangeVal = <i>variable</i> |
| * bool validIntfAddrVal = <b>false</b> |
| * MacAddress intfAddrVal = <i>N/A</i> |
| * bool validOuiVal = <b>false</b> |
| * uint32_t ouiVal = <i>N/A</i> |
| * bool validRandomFactorForceVal = <b>false</b> |
| * uint8_t randomFactorForceVal = <i>N/A</i> |
| * bool validHopCountForceVal = <b>false</b> |
| * uint8_t hopCountForceVal = <i>N/A</i> |
| * bool validDiscoveryChannelVal = <b>false</b> |
| * WifiChannelInMhz[2] discoveryChannelMhzVal = <i>N/A</i> |
| * bool validUseBeaconsInBandVal = <b>false</b> |
| * bool[2] useBeaconsInBandVal = <i>N/A</i> |
| * bool validUseSdfInBandVal = <b>false</b> |
| * bool[2] useSdfInBandVal = <i>N/A</i> |
| * NanConfigRequestSupplemental |
| * uint32_t discoveryBeaconIntervalMs = <b>0</b> |
| * uint32_t numberOfSpatialStreamsInDiscovery = <b>0</b> |
| * bool enableDiscoveryWindowEarlyTermination = <b>false</b> |
| * bool enableRanging = <b>true</b> |
| * configRequest_1_2 |
| * NanConfigRequest: same as for <i>enableRequest_1_2</i> |
| * disableRequest |
| * startPublishRequest |
| * NanPublishRequest |
| * NanDiscoveryCommonConfig baseConfigs |
| * uint8_t sessionId = <i>variable</i> |
| * uint16_t ttlSec = <i>variable</i> |
| * uint16_t discoveryWindowPeriod = <b>1</b> |
| * uint8_t discoveryCount = <b>0</b> |
| * vec<uint8_t> serviceName = <i>variable</i> |
| * NanMatchAlg discoveryMatchIndicator = <b>NanMatchAlg.MATCH_NEVER</b> |
| * vec<uint8_t> serviceSpecificInfo = <i>variable</i> |
| * vec<uint8_t> extendedServiceSpecificInfo = <i>N/A</i> |
| e vec<uint8_t> rxMatchFilter = <i>variable</i> |
| * vec<uint8_t> txMatchFilter = <i>variable</i> |
| * bool useRssiThreshold = <b>false</b> |
| * bool disableDiscoveryTerminationIndication = <i>variable</i> |
| * bool disableMatchExpirationIndication = <b>true</b> |
| * bool disableFollowupReceivedIndication = <b>false</b> |
| * NanDataPathSecurityConfig securityConfig = <b>NanDataPathSecurityType.OPEN</b> |
| * bool rangingRequired = <b>false</b> |
| * uint32_t rangingIntervalMsec = <i>N/A</i> |
| * bitfield<NanRangingIndication> configRangingIndications = <i>N/A</i> |
| * uint16_t distanceIngressCm = <i>N/A</i> |
| * uint16_t distanceEgressCm = <i>N/A</i> |
| * NanPublishType publishType = <i>variable</i> |
| * NanTxType txType = <b>NanTxType.BROADCAST</b> |
| * bool autoAcceptDataPathRequests = <b>false</b> |
| * stopPublishRequest |
| * startSubscribeRequest |
| * NanSubscribeRequest |
| * NanDiscoveryCommonConfig baseConfigs |
| * Mostly same as <i>publish</i> above except: |
| * NanMatchAlg discoveryMatchIndicator = <b>NanMatchAlg.MATCH_ONCE</b> |
| * NanSubscribeType subscribeType = <i>variable</i> |
| * NanSrfType srfType = <i>N/A</i> |
| * bool srfRespondIfInAddressSet = <i>N/A</i> |
| * bool shouldUseSrf = <i>N/A</i> |
| * bool isSsiRequiredForMatch = <i>N/A</i> |
| * vec<MacAddress> intfAddr = <i>N/A</i> |
| * stopSubscribeRequest |
| * transmitFollowupRequest |
| * NanTransmitFollowupRequest |
| * uint8_t discoverySessionId = <i>variable</i> |
| * uint32_t peerId = <i>variable</i> |
| * MacAddress addr = <i>variable</i> |
| * bool isHighPriority = <b>false</b> |
| * bool shouldUseDiscoveryWindow = <b>true</b> |
| * vec<uint8_t> serviceSpecificInfo = <i>variable</i> |
| * vec<uint8_t> extendedServiceSpecificInfo = <i>N/A</i> |
| * bool disableFollowupResultIndication = <b>false</b> |
| * createDataInterfaceRequest |
| * deleteDataInterfaceRequest |
| * initiateDataPathRequest |
| * NanInitiateDataPathRequest |
| * uint32_t peerId = <i>variable</i> |
| * MacAddress peerDiscMacAddr = <i>variable</i> |
| * NanDataPathChannelCfg channelRequestType = |
| <i>NanDataPathChannelCfg.CHANNEL_NOT_REQUESTED</i> |
| * WifiChannelInMhz channel = <b>2437</b> (note that should be ignored though - |
| CHANNEL_NOT_REQUESTED!) |
| * string ifaceName = <i>variable</i> |
| * NanDataPathSecurityConfig securityConfig = <i>variable</i> |
| * vec<uint8_t> appInfo = <i>N/A</i> |
| * vec<uint8_t> serviceNameOutOfBand = <i>variable</i> |
| * respondToDataPathIndicationRequest |
| * NanRespondToDataPathIndicationRequest |
| * bool acceptRequest = <i>variable</i> |
| * uint32_t ndpInstanceId = <i>variable</i> |
| * string ifaceName = <i>variable</i> |
| * NanDataPathSecurityConfig securityConfig = <i>variable</i> |
| * vec<uint8_t> appInfo = <i>N/A</i> |
| * vec<uint8_t> serviceNameOutOfBand = <i>variable</i> |
| * terminateDataPathRequest |
| |
| ## IWifiNanIfaceEventCallback_1_2 |
| |
| Format: |
| * Parameters whose values are <i>ignored</i> will be flagged, otherwise the parameter value is used |
| by the framework. |
| |
| API: |
| |
| * notifyXxxResponse: all callbacks are used by framework |
| * eventClusterEvent |
| * eventDisabled |
| * eventPublishTerminated |
| * eventSubscribeTerminated |
| * eventMatch |
| * NanMatchInd (all parameters are used except those listed below) |
| * vec<uint8_t> extendedServiceSpecificInfo: <i>ignored</i> |
| * bool matchOccuredInBeaconFlag: <i>ignored</i> |
| * bool outOfResourceFlag: <i>ignored</i> |
| * uint8_t rssiValue: <i>ignored</i> |
| * NanCipherSuiteType peerCipherType: <i>ignored</i> |
| * bool peerRequiresSecurityEnabledInNdp: <i>ignored</i> |
| * bool peerRequiresRanging: <i>ignored</i> |
| * uint32_t rangingMeasurementInCm: <i>ignored</i> |
| * bitfield<NanRangingIndication> rangingIndicationType: <i>ignored</i> |
| * eventMatchExpired: <i>ignored</i> |
| * eventFollowupReceived |
| * NanFollowupReceivedInd (all parameters are used except those listed below) |
| * bool receivedInFaw: <i>ignored</i> |
| * vec<uint8_t> extendedServiceSpecificInfo: <i>ignored</i> |
| * eventTransmitFollowup |
| * eventDataPathRequest |
| * NanDataPathRequestInd (all parameters are used except those listed below) |
| * bool securityRequired: <i>ignored</i> |
| * vec<uint8_t> appInfo: <i>ignored</i> |
| * eventDataPathConfirm |
| * NanDataPathConfirmInd (all parameters are used except those listed below) |
| * vec<uint8_t> appInfo: <i>ignored</i> |
| * eventDataPathScheduleUpdate |
| * NanDataPathScheduleUpdateInd |
| * eventDataPathTerminated |
| |