You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
5.9 KiB
162 lines
5.9 KiB
//
|
|
// Copyright 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
|