| /* |
| * Copyright 2017 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.offload@1.0; |
| |
| /** |
| * Defines a bitmap of security modes |
| */ |
| enum SecurityMode : uint8_t { |
| OPEN = 0x1 << 1, |
| WEP = 0x1 << 2, |
| PSK = 0x1 << 3, |
| EAP = 0x1 << 4, |
| }; |
| |
| /** |
| * SSID of the Access Point, maximum 32 characters |
| */ |
| typedef vec<uint8_t> Ssid; |
| |
| /** |
| * Preferred network information |
| * SSID and associated security mode(s) |
| */ |
| struct NetworkInfo { |
| Ssid ssid; |
| /* SecurityMode flags that are associated with this SSID |
| * More than one security mode can be supported, see SecurityMode */ |
| bitfield<SecurityMode> flags; |
| }; |
| |
| /** |
| * This is a bit mask describing the capabilities of a BSS. |
| * See IEEE Std 802.11: 8.4.1.4 |
| */ |
| enum Capability : uint16_t { |
| ESS = 1 << 0, |
| IBSS = 1 << 1, |
| CF_POLLABLE = 1 << 2, |
| CF_PLL_REQ = 1 << 3, |
| PRIVACY = 1 << 4, |
| SHORT_PREAMBLE = 1 << 5, |
| PBCC = 1 << 6, |
| CHANNEL_AGILITY = 1 << 7, |
| SPECTURM_MGMT = 1 << 8, |
| QOS = 1 << 9, |
| SHORT_SLOT_TIME = 1 << 10, |
| APSD = 1 << 11, |
| RADIO_MEASUREMENT = 1 << 12, |
| DSSS_OFDM = 1 << 13, |
| DELAYED_BLOCK_ACK = 1 << 14, |
| IMMEDIATE_BLOCK_ACK = 1 << 15, |
| }; |
| |
| /** |
| * Scan Results returned by the offload Hal |
| */ |
| struct ScanResult { |
| /* Information about this BSS |
| * SSID and security modes supported */ |
| NetworkInfo networkInfo; |
| /* BSSID of the BSS */ |
| uint8_t[6] bssid; |
| /* Can have multiple bits set, see Capability */ |
| bitfield<Capability> capability; |
| /* Frequency scanned, in mHz */ |
| uint32_t frequency; |
| /* Signal strength in dBm */ |
| int8_t rssi; |
| /* TSF found in beacon/probe response */ |
| uint64_t tsf; |
| }; |
| |
| |
| /** |
| * Parameters for performing offload scans |
| */ |
| struct ScanParam { |
| /* Specify a list of SSIDs to scan, an empty list implies no preferred |
| * networks to scan */ |
| vec<Ssid> ssidList; |
| /* Frequencies to scan, in mHz, an empty frequency list implies a full scan */ |
| vec<uint32_t> frequencyList; |
| /* Periodicity of the scans to be performed by the offload module |
| * A value of zero indicates disable periodic scans. For this revision, |
| * where offload module is performing scans in disconnected mode, this value |
| * should not be zero. In future versions, periodic scans can be eliminated */ |
| uint32_t disconnectedModeScanIntervalMs; |
| }; |
| |
| /** |
| * Instruction on how to filter the scan result before performing network |
| * selection and waking up the AP to connect |
| */ |
| struct ScanFilter { |
| /* Preferred network List of SSIDs and their security mode of interest |
| * The filter will drop the remaining scan results in the scan event. |
| * An empty list implies no filtering of scan result based on SSID and |
| * security mode. */ |
| vec<NetworkInfo> preferredNetworkInfoList; |
| /* Minimum qualifying RSSI to be considered for network selection (dBm) */ |
| int8_t rssiThreshold; |
| }; |
| |
| struct ScanRecord { |
| /* Amount of time spent scanning */ |
| uint64_t durationMs; |
| /* Number of channels scanned */ |
| uint32_t numChannelsScanned; |
| /* Number of entries aggregated into this record */ |
| uint32_t numEntriesAggregated; |
| }; |
| |
| /** |
| * Enumerates the type of log that is recorded |
| */ |
| enum RecordName : uint32_t { |
| CMD_BASE = 0x00001000, |
| /* Record name corresponding to initialization */ |
| CMD_INT = CMD_BASE + 0, |
| /* Record name corresponding to configureScans() API */ |
| CMD_CONFIG_SCANS = CMD_BASE + 1, |
| /* Record name corresponding to subscribeScanResults() API */ |
| CMD_SUBSCRIBE_SCAN_RESULTS = CMD_BASE + 2, |
| /* Record name corresponding to unsubscribeScanResults() API */ |
| CMD_UNSUBSCRIBE_SCAN_RESULTS = CMD_BASE + 3, |
| /* Record name corresponding to getScanStats() API */ |
| CMD_GET_SCAN_STATS = CMD_BASE + 4, |
| /* Record name corresponding to a reset*/ |
| CMD_RESET = CMD_BASE + 5, |
| /* Add new commands here */ |
| EVENT_RECVD_BASE = 0x00002000, |
| /* Record name corresponding to scan monitor event*/ |
| EVENT_RECVD_SCAN_RESULT_ASYNC = EVENT_RECVD_BASE + 0, |
| /* Record name corresponding to scan response event */ |
| EVENT_RECVD_SCAN_RESULT = EVENT_RECVD_BASE + 1, |
| /* Add new events received here */ |
| EVENT_SENT_BASE = 0x00003000, |
| /* Record name corresponding to scan event sent */ |
| EVENT_SENT_SCAN_RESULT = EVENT_SENT_BASE + 0, |
| /* Record name corresponding to abort event sent */ |
| EVENT_SENT_ABORT = EVENT_SENT_BASE + 1, |
| /* Record name corresponding to error event sent */ |
| EVENT_SENT_ERROR = EVENT_SENT_BASE + 2, |
| /* Add new events sent here */ |
| REQ_BASE = 0x00004000, |
| /* Record name corresponding to scan request sent*/ |
| REQ_SCAN = REQ_BASE + 0, |
| /* Add new requests here */ |
| }; |
| |
| /** |
| * Defines the structure of each log record |
| */ |
| struct LogRecord { |
| /* Indicates the log recorded */ |
| RecordName recordName; |
| /* Platform reference time in milliseconds when the log is recorded */ |
| uint64_t logTimeMs; |
| }; |
| |
| /** |
| * Defines the scan statistics to be returned to the framework |
| */ |
| struct ScanStats { |
| /* Incremented everytime a new scan is requested */ |
| uint32_t numScansRequestedByWifi; |
| /* Incremented everytime the scan is serviced by performing a scan*/ |
| uint32_t numScansServicedByWifi; |
| /* Incremented everytime the scan is serviced by the scan cache */ |
| uint32_t numScansServicedbyCache; |
| /* The last (CHRE reference) time this data structure is updated */ |
| uint64_t lastUpdated; |
| /* The last (CHRE reference) time this data structure is read */ |
| uint64_t lastRead; |
| /* The total time when the Offload module could be performing scans (T2 - T1) |
| * T1 - time when the framework subscribes for scan result (includes delayMs) |
| * T2 - min (time when the framework unsubscribes for scan result, |
| * currentTime) */ |
| uint64_t subscriptionDurationMs; |
| /* Histograms of the channels scanned, 802.11 and with an 8 bit |
| * representation, only 256 channels are available */ |
| uint8_t[256] histogramChannelsScanned; |
| /* Scan Record for this subscribe duration */ |
| vec<ScanRecord> scanRecord; |
| /* Vector of the logRecord entries */ |
| vec<LogRecord> logRecord; |
| }; |
| |
| /** |
| * Defines a list of return codes to indicate status of Offload HAL |
| */ |
| enum OffloadStatusCode : uint32_t { |
| /* No error */ |
| OK, |
| /* No Connection to underlying implementation */ |
| NO_CONNECTION, |
| /* Operation timeout */ |
| TIMEOUT, |
| /* Other errors */ |
| ERROR |
| }; |
| |
| /** |
| * Generic structures to return the status of an operation |
| */ |
| struct OffloadStatus { |
| OffloadStatusCode code; |
| /* Error message */ |
| string description; |
| }; |
| |
| |
| |