| // |
| // Copyright (C) 2015 Google, Inc. |
| // |
| // 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. |
| // |
| |
| #pragma once |
| |
| #include <base/time/time.h> |
| |
| namespace bluetooth { |
| |
| // ScanSettings encapsulates Bluetooth LE device scan parameters. This is the |
| // native equivalent of the Android framework class defined in |
| // frameworks/base/core/java/android/bluetooth/le/ScanSettings.java. |
| class ScanSettings { |
| public: |
| // A scan mode describes the power consumption involved in LE scans. |
| enum Mode { |
| // A special Bluetooth LE scan mode. Applications using this scan mode will |
| // passively listen for other scan results without starting BLE scans |
| // themselves. |
| MODE_OPPORTUNISTIC = -1, |
| |
| // Perform Bluetooth LE scan in low power mode. This is the default scan |
| // mode as it consumes the least power. |
| MODE_LOW_POWER = 0, |
| |
| // Perform Bluetooth LE scan in balanced power mode. Scan results are |
| // returned at a rate that provides a good trade-off between scan frequency |
| // and power consumption. |
| MODE_BALANCED = 1, |
| |
| // Scan using the highest duty cycle. It's recommended to only use this mode |
| // when the application is running in the foreground. |
| MODE_LOW_LATENCY = 2, |
| }; |
| |
| // A callback type describes how scan results will be reported to applications |
| // in asynchronous callbacks. |
| enum CallbackType { |
| // Trigger a callback for every Bluetooth advertisement found that matches |
| // the filter criteria. If no filter is active, all advertisement packets |
| // are reported. |
| CALLBACK_TYPE_ALL_MATCHES = 1, |
| |
| // A result callback is only triggered for the first advertisement packet |
| // received that matches the filter criteria. This requires that the |
| // hardware support the offloaded filtering feature. |
| CALLBACK_TYPE_FIRST_MATCH = 2, |
| |
| // Receive a callback when advertisements are no longer received from a |
| // device that has been previously reported by a first match callback. This |
| // requires that the hardware support the offloaded filtering feature. |
| CALLBACK_TYPE_MATCH_LOST = 4, |
| }; |
| using CallbackTypeBitField = int; |
| |
| // Determines how many advertisements to match per filter. |
| enum MatchCount { |
| // Match one advertisement per filter. |
| MATCH_COUNT_ONE_ADVERTISEMENT = 1, |
| |
| // Match few advertisements per filter depending on the current capability |
| // and availability of hardware resources. |
| MATCH_COUNT_FEW_ADVERTISEMENTS = 2, |
| |
| // Match as many advertisements per filter as the underlying hardware can |
| // allow, depending on the current capability and availability of hardware |
| // resources. |
| MATCH_COUNT_MAX_ADVERTISEMENTS = 3, |
| }; |
| |
| // Hardware filter match mode. |
| enum MatchMode { |
| // In aggressive mode the hardware will determine a match sooner even with |
| // feeble signal strength and a low number of sightings in a duration. |
| MATCH_MODE_AGGRESSIVE = 1, |
| |
| // In sticky mode a higher threshold of signal strength and sightings is |
| // required before a scan result is reported by the hardware. |
| MATCH_MODE_STICKY = 2, |
| }; |
| |
| // Scan result type describes the contents of each scan result. |
| enum ResultType { |
| // Request full scan results which contain the device name, RSSI, |
| // advertising data, scan response data, and the scan timestamp. |
| RESULT_TYPE_FULL = 0, |
| |
| // Request abbreviated scan results which contain the device name, RSSI, and |
| // scan timestamp. |
| // Note: It is possible for an application to get more scan results than it |
| // asked for, if there are multiple apps using this type. |
| RESULT_TYPE_ABBREVIATED = 1, |
| }; |
| |
| // The default constructor sets all fields to defaults: |
| // mode: MODE_LOW_POWER |
| // callback_type: CALLBACK_TYPE_ALL_MATCHES |
| // result_type: RESULT_TYPE_FULL |
| // report_delay_ms: 0 |
| // match_mode: MATCH_MODE_AGGRESSIVE |
| // match_count_per_filter: MATCH_COUNT_MAX_ADVERTISEMENTS |
| ScanSettings(); |
| ScanSettings(Mode mode, CallbackTypeBitField callback_type, |
| ResultType result_type, base::TimeDelta report_delay_ms, |
| MatchMode match_mode, MatchCount match_count_per_filter); |
| virtual ~ScanSettings() = default; |
| |
| // Returns the scan mode. |
| Mode mode() const { return mode_; } |
| void set_mode(Mode mode) { mode_ = mode; } |
| |
| // Returns the callback type. |
| CallbackTypeBitField callback_type() const { return callback_type_; } |
| void set_callback_type(CallbackTypeBitField type) { callback_type_ = type; } |
| |
| // Returns the scan result type. |
| ResultType result_type() const { return result_type_; } |
| void set_result_type(ResultType type) { result_type_ = type; } |
| |
| // Returns the report delay value in milliseconds. |
| const base::TimeDelta& report_delay() const { return report_delay_ms_; } |
| void set_report_delay(const base::TimeDelta& delay) { |
| report_delay_ms_ = delay; |
| } |
| |
| // Returns the hardware filter match mode. |
| MatchMode match_mode() const { return match_mode_; } |
| void set_match_mode(MatchMode mode) { match_mode_ = mode; } |
| |
| // Returns the count of advertisements to match per filter. |
| MatchCount match_count_per_filter() const { return match_count_per_filter_; } |
| void set_match_count_per_filter(MatchCount count) { |
| match_count_per_filter_ = count; |
| } |
| |
| // Comparison operator. |
| bool operator==(const ScanSettings& rhs) const; |
| |
| protected: |
| Mode mode_; |
| CallbackTypeBitField callback_type_; |
| ResultType result_type_; |
| base::TimeDelta report_delay_ms_; |
| MatchMode match_mode_; |
| MatchCount match_count_per_filter_; |
| }; |
| |
| } // namespace bluetooth |