/* * Copyright 2019 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. */ package android.hardware.wifi@1.4; import @1.0::MacAddress; import @1.0::NanBandIndex; import @1.0::NanBandSpecificConfig; import @1.0::Rssi; import @1.0::RttBw; import @1.0::RttConfig; import @1.0::RttPeerType; import @1.0::RttPreamble; import @1.0::RttStatus; import @1.0::RttType; import @1.0::TimeSpanInPs; import @1.0::TimeStampInUs; import @1.0::WifiBand; import @1.0::WifiChannelInfo; import @1.0::WifiChannelInMhz; import @1.0::WifiChannelWidthInMhz; import @1.0::WifiInformationElement; import @1.0::WifiRateNss; import @1.0::WifiRatePreamble; /** * Wifi bands defined in 80211 spec. */ enum WifiBand : @1.0::WifiBand { /** * 6 GHz. */ BAND_6GHZ = 8, /** * 5 GHz no DFS + 6 GHz. */ BAND_5GHZ_6GHZ = 10, /** * 2.4 GHz + 5 GHz no DFS + 6 GHz. */ BAND_24GHZ_5GHZ_6GHZ = 11, /** * 2.4 GHz + 5 GHz with DFS + 6 GHz. */ BAND_24GHZ_5GHZ_WITH_DFS_6GHZ = 15, }; /** * The discovery bands supported by NAN. */ enum NanBandIndex : @1.0::NanBandIndex { /** * Index for 6 GHz band. */ NAN_BAND_6GHZ = 2, }; /** * Wifi Rate Preamble */ enum WifiRatePreamble : @1.0::WifiRatePreamble { /** * Preamble type for 11ax */ HE = 5, }; /** * RTT Measurement Preamble. */ enum RttPreamble : @1.0::RttPreamble { /** * Preamble type for 11ax */ HE = 0x8, }; /** * Debug configuration parameters. Many of these allow non-standard-compliant operation and are * not intended for normal operational mode. */ struct NanDebugConfig { /** * Specification of the lower 2 bytes of the cluster ID. The cluster ID is 50-60-9a-01-00-00 to * 50-60-9a-01-FF-FF. Configuration of the bottom and top values of the range (which defaults to * 0x0000 and 0xFFFF respectively). * Configuration is only used if |validClusterIdVals| is set to true. */ bool validClusterIdVals; uint16_t clusterIdBottomRangeVal; uint16_t clusterIdTopRangeVal; /** * NAN management interface address, if specified (|validIntfAddrVal| is true) then overrides any * other configuration (specifically the default randomization configured by * |NanConfigRequest.macAddressRandomizationIntervalSec|). */ bool validIntfAddrVal; MacAddress intfAddrVal; /** * Combination of the 24 bit Organizationally Unique ID (OUI) and the 8 bit OUI Type. * Used if |validOuiVal| is set to true. */ bool validOuiVal; uint32_t ouiVal; /** * Force the Random Factor to the specified value for all transmitted Sync/Discovery beacons. * Used if |validRandomFactorForceVal| is set to true. * NAN Spec: Master Indication Attribute / Random Factor */ bool validRandomFactorForceVal; uint8_t randomFactorForceVal; /** * Forces the hop-count for all transmitted Sync and Discovery Beacons NO matter the real * hop-count being received over the air. Used if the |validHopCountForceVal}| flag is set to * true. * NAN Spec: Cluster Attribute / Anchor Master Information / Hop Count to Anchor Master */ bool validHopCountForceVal; uint8_t hopCountForceVal; /** * Frequency in MHz to of the discovery channel in the specified band. Indexed by |NanBandIndex|. * Used if the |validDiscoveryChannelVal| is set to true. */ bool validDiscoveryChannelVal; WifiChannelInMhz[3] discoveryChannelMhzVal; /** * Specifies whether sync/discovery beacons are transmitted in the specified band. Indexed by * |NanBandIndex|. Used if the |validUseBeaconsInBandVal| is set to true. */ bool validUseBeaconsInBandVal; bool[3] useBeaconsInBandVal; /** * Specifies whether SDF (service discovery frames) are transmitted in the specified band. Indexed * by |NanBandIndex|. Used if the |validUseSdfInBandVal| is set to true. */ bool validUseSdfInBandVal; bool[3] useSdfInBandVal; }; /** * Configuration parameters of NAN: used when enabling and re-configuring a NAN cluster. */ struct NanConfigRequest { /** * Master preference of this device. * NAN Spec: Master Indication Attribute / Master Preference */ uint8_t masterPref; /** * Controls whether or not the |IWifiNanIfaceEventCallback.eventClusterEvent| will be delivered * for |NanClusterEventType.DISCOVERY_MAC_ADDRESS_CHANGED|. */ bool disableDiscoveryAddressChangeIndication; /** * Controls whether or not the |IWifiNanIfaceEventCallback.eventClusterEvent| will be delivered * for |NanClusterEventType.STARTED_CLUSTER|. */ bool disableStartedClusterIndication; /** * Controls whether or not the |IWifiNanIfaceEventCallback.eventClusterEvent| will be delivered * for |NanClusterEventType.JOINED_CLUSTER|. */ bool disableJoinedClusterIndication; /** * Control whether publish service IDs are included in Sync/Discovery beacons. * NAN Spec: Service ID List Attribute */ bool includePublishServiceIdsInBeacon; /** * If |includePublishServiceIdsInBeacon| is true then specifies the number of publish service IDs * to include in the Sync/Discovery beacons: * Value = 0: include as many service IDs as will fit into the maximum allowed beacon frame size. * Value must fit within 7 bits - i.e. <= 127. */ uint8_t numberOfPublishServiceIdsInBeacon; /** * Control whether subscribe service IDs are included in Sync/Discovery beacons. * Spec: Subscribe Service ID List Attribute */ bool includeSubscribeServiceIdsInBeacon; /** * If |includeSubscribeServiceIdsInBeacon| is true then specifies the number of subscribe service * IDs to include in the Sync/Discovery beacons: * Value = 0: include as many service IDs as will fit into the maximum allowed beacon frame size. * Value must fit within 7 bits - i.e. <= 127. */ uint8_t numberOfSubscribeServiceIdsInBeacon; /** * Number of samples used to calculate RSSI. */ uint16_t rssiWindowSize; /** * Specifies the interval in seconds that the NAN management interface MAC address is randomized. * A value of 0 is used to disable the MAC address randomization */ uint32_t macAddressRandomizationIntervalSec; /** * Additional configuration provided per band: indexed by |NanBandIndex|. */ NanBandSpecificConfig[3] bandSpecificConfig; }; /** * Enable requests for NAN: start-up configuration |IWifiNanIface.enableRequest|. */ struct NanEnableRequest { /** * Enable operation in a specific band: indexed by |NanBandIndex|. */ bool[3] operateInBand; /** * Specify extent of cluster by specifying the max hop count. */ uint8_t hopCountMax; /** * Configurations of NAN cluster operation. Can also be modified at run-time using * |IWifiNanIface.configRequest|. */ NanConfigRequest configParams; /** * Non-standard configurations of NAN cluster operation - useful for debugging operations. */ NanDebugConfig debugConfigs; }; /** * RTT configuration. */ struct RttConfig { /** * Peer device mac address. */ MacAddress addr; /** * 1-sided or 2-sided RTT. */ RttType type; /** * Optional - peer device hint (STA, P2P, AP). */ RttPeerType peer; /** * Required for STA-AP mode, optional for P2P, NBD etc. */ WifiChannelInfo channel; /** * Time interval between bursts (units: 100 ms). * Applies to 1-sided and 2-sided RTT multi-burst requests. * Range: 0-31, 0: no preference by initiator (2-sided RTT). */ uint32_t burstPeriod; /** * Total number of RTT bursts to be executed. It will be * specified in the same way as the parameter "Number of * Burst Exponent" found in the FTM frame format. It * applies to both: 1-sided RTT and 2-sided RTT. Valid * values are 0 to 15 as defined in 802.11mc std. * 0 means single shot * The implication of this parameter on the maximum * number of RTT results is the following: * for 1-sided RTT: max num of RTT results = (2^num_burst)*(num_frames_per_burst) * for 2-sided RTT: max num of RTT results = (2^num_burst)*(num_frames_per_burst - 1) */ uint32_t numBurst; /** * Num of frames per burst. * Minimum value = 1, Maximum value = 31 * For 2-sided this equals the number of FTM frames * to be attempted in a single burst. This also * equals the number of FTM frames that the * initiator will request that the responder send * in a single frame. */ uint32_t numFramesPerBurst; /** * Number of retries for a failed RTT frame. * Applies to 1-sided RTT only. Minimum value = 0, Maximum value = 3 */ uint32_t numRetriesPerRttFrame; /** * Following fields are only valid for 2-side RTT. * * * Maximum number of retries that the initiator can * retry an FTMR frame. * Minimum value = 0, Maximum value = 3 */ uint32_t numRetriesPerFtmr; /** * Whether to request location civic info or not. */ bool mustRequestLci; /** * Whether to request location civic records or not. */ bool mustRequestLcr; /** * Applies to 1-sided and 2-sided RTT. Valid values will * be 2-11 and 15 as specified by the 802.11mc std for * the FTM parameter burst duration. In a multi-burst * request, if responder overrides with larger value, * the initiator will return failure. In a single-burst * request if responder overrides with larger value, * the initiator will sent TMR_STOP to terminate RTT * at the end of the burst_duration it requested. */ uint32_t burstDuration; /** * RTT preamble to be used in the RTT frames. */ RttPreamble preamble; /** * RTT BW to be used in the RTT frames. */ RttBw bw; }; /** * RTT Capabilities. */ struct RttCapabilities { /** * if 1-sided rtt data collection is supported. */ bool rttOneSidedSupported; /** * if ftm rtt data collection is supported. */ bool rttFtmSupported; /** * if initiator supports LCI request. Applies to 2-sided RTT. */ bool lciSupported; /** * if initiator supports LCR request. Applies to 2-sided RTT. */ bool lcrSupported; /** * if 11mc responder mode is supported. */ bool responderSupported; /** * Bit mask indicates what preamble is supported by initiator. * Combination of |RttPreamble| values. */ bitfield preambleSupport; /** * Bit mask indicates what BW is supported by initiator. * Combination of |RttBw| values. */ bitfield bwSupport; /** * Draft 11mc spec version supported by chip. * For instance, version 4.0 must be 40 and version 4.3 must be 43 etc. */ uint8_t mcVersion; }; /** * RTT Responder information */ struct RttResponder { WifiChannelInfo channel; RttPreamble preamble; }; /** * Wifi rate info. */ struct WifiRateInfo { /** * Preamble used for RTT measurements. */ WifiRatePreamble preamble; /** * Number of spatial streams. */ WifiRateNss nss; /** * Bandwidth of channel. */ WifiChannelWidthInMhz bw; /** * OFDM/CCK rate code would be as per ieee std in the units of 0.5mbps. * HT/VHT/HE it would be mcs index. */ uint8_t rateMcsIdx; /** * Bitrate in units of 100 Kbps. */ uint32_t bitRateInKbps; }; /** * RTT results. */ struct RttResult { /** * Peer device mac address. */ MacAddress addr; /** * Burst number in a multi-burst request. */ uint32_t burstNum; /** * Total RTT measurement frames attempted. */ uint32_t measurementNumber; /** * Total successful RTT measurement frames. */ uint32_t successNumber; /** * Maximum number of "FTM frames per burst" supported by * the responder STA. Applies to 2-sided RTT only. * If reponder overrides with larger value: * - for single-burst request initiator will truncate the * larger value and send a TMR_STOP after receiving as * many frames as originally requested. * - for multi-burst request, initiator will return * failure right away. */ uint8_t numberPerBurstPeer; /** * Ranging status. */ RttStatus status; /** * When status == RTT_STATUS_FAIL_BUSY_TRY_LATER, * this will be the time provided by the responder as to * when the request can be tried again. Applies to 2-sided * RTT only. In sec, 1-31sec. */ uint8_t retryAfterDuration; /** * RTT type. */ RttType type; /** * Average rssi in 0.5 dB steps e.g. 143 implies -71.5 dB. */ Rssi rssi; /** * Rssi spread in 0.5 dB steps e.g. 5 implies 2.5 dB spread (optional). */ Rssi rssiSpread; /** * 1-sided RTT: TX rate of RTT frame. * 2-sided RTT: TX rate of initiator's Ack in response to FTM frame. */ WifiRateInfo txRate; /** * 1-sided RTT: TX rate of Ack from other side. * 2-sided RTT: TX rate of FTM frame coming from responder. */ WifiRateInfo rxRate; /** * Round trip time in picoseconds */ TimeSpanInPs rtt; /** * Rtt standard deviation in picoseconds. */ TimeSpanInPs rttSd; /** * Difference between max and min rtt times recorded in picoseconds. */ TimeSpanInPs rttSpread; /** * Distance in mm (optional). */ int32_t distanceInMm; /** * Standard deviation in mm (optional). */ int32_t distanceSdInMm; /** * Difference between max and min distance recorded in mm (optional). */ int32_t distanceSpreadInMm; /** * Time of the measurement (in microseconds since boot). */ TimeStampInUs timeStampInUs; /** * in ms, actual time taken by the FW to finish one burst * measurement. Applies to 1-sided and 2-sided RTT. */ uint32_t burstDurationInMs; /** * Number of bursts allowed by the responder. Applies * to 2-sided RTT only. */ uint32_t negotiatedBurstNum; /** * for 11mc only. */ WifiInformationElement lci; /** * for 11mc only. */ WifiInformationElement lcr; };