Index: device/bluetooth/bluetooth_task_manager_win.h |
diff --git a/device/bluetooth/bluetooth_task_manager_win.h b/device/bluetooth/bluetooth_task_manager_win.h |
index 7f6c98878b8d5763eb7c4203ac29390d0a3da577..be8b90ce950195689ffca7c47d17a8b791b94146 100644 |
--- a/device/bluetooth/bluetooth_task_manager_win.h |
+++ b/device/bluetooth/bluetooth_task_manager_win.h |
@@ -46,9 +46,9 @@ class BluetoothTaskManagerWin |
struct ServiceRecordState { |
ServiceRecordState(); |
~ServiceRecordState(); |
- // Properties common to Bluetooth Radio and LE devices. |
+ // Properties common to Bluetooth Classic and LE devices. |
std::string name; |
- // Properties specific to Bluetooth Radio devices. |
+ // Properties specific to Bluetooth Classic devices. |
std::vector<uint8> sdp_bytes; |
// Properties specific to Bluetooth LE devices. |
BluetoothUUID gatt_uuid; |
@@ -57,14 +57,17 @@ class BluetoothTaskManagerWin |
struct DeviceState { |
DeviceState(); |
~DeviceState(); |
- // Properties common to Bluetooth Radio and LE devices. |
- std::string name; |
- std::string address; |
+ |
+ bool is_bluetooth_classic() const { return path.empty(); } |
+ |
+ // Properties common to Bluetooth Classic and LE devices. |
+ std::string address; // This uniquely identifies the device. |
+ std::string name; // Friendly name |
bool visible; |
bool connected; |
bool authenticated; |
ScopedVector<ServiceRecordState> service_record_states; |
- // Properties specific to Bluetooth Radio devices. |
+ // Properties specific to Bluetooth Classic devices. |
uint32 bluetooth_class; |
// Properties specific to Bluetooth LE devices. |
base::FilePath path; |
@@ -77,8 +80,14 @@ class BluetoothTaskManagerWin |
virtual void AdapterStateChanged(const AdapterState& state) {} |
virtual void DiscoveryStarted(bool success) {} |
virtual void DiscoveryStopped() {} |
- virtual void DevicesUpdated(const ScopedVector<DeviceState>& devices) {} |
- virtual void DevicesDiscovered(const ScopedVector<DeviceState>& devices) {} |
+ // Called when the adapter has just been polled for the list of *all* known |
+ // devices. This includes devices previously paired, devices paired using |
+ // the underlying Operating System UI, and devices discovered recently due |
+ // to an active discovery session. Note that for a given device (address), |
+ // the associated state can change over time. For example, during a |
+ // discovery session, the "friendly" name may initially be "unknown" before |
+ // the actual name is retrieved in subsequent poll events. |
+ virtual void DevicesPolled(const ScopedVector<DeviceState>& devices) {} |
}; |
explicit BluetoothTaskManagerWin( |
@@ -107,13 +116,16 @@ class BluetoothTaskManagerWin |
virtual ~BluetoothTaskManagerWin(); |
+ // Logs Win32 errors occuring during polling on the worker thread. The method |
+ // may discards messages to avoid logging being too verbose. |
+ void LogPollingError(const char* message, int win32_error); |
+ |
// Notify all Observers of updated AdapterState. Should only be called on the |
// UI thread. |
void OnAdapterStateChanged(const AdapterState* state); |
void OnDiscoveryStarted(bool success); |
void OnDiscoveryStopped(); |
- void OnDevicesUpdated(const ScopedVector<DeviceState>* devices); |
- void OnDevicesDiscovered(const ScopedVector<DeviceState>* devices); |
+ void OnDevicesPolled(const ScopedVector<DeviceState>* devices); |
// Called on BluetoothTaskRunner. |
void StartPolling(); |
@@ -130,23 +142,47 @@ class BluetoothTaskManagerWin |
void StartDiscovery(); |
void StopDiscovery(); |
- // Issues a device inquiry that runs for |timeout| * 1.28 seconds. |
- // This posts itself again with |timeout| + 1 until |timeout| reaches the |
- // maximum value or stop discovery call is received. |
- void DiscoverDevices(int timeout); |
+ // Issues a device inquiry that runs for |timeout_multiplier| * 1.28 seconds. |
+ // This posts itself again with |timeout_multiplier| + 1 until |
+ // |timeout_multiplier| reaches the maximum value or stop discovery call is |
+ // received. |
+ void DiscoverDevices(int timeout_multiplier); |
// Fetch already known device information. Similar to |StartDiscovery|, except |
// this function does not issue a discovery inquiry. Instead it gets the |
// device info cached in the adapter. |
void GetKnownDevices(); |
- // Sends a device search API call to the adapter. |
- void SearchDevices(int timeout, |
+ // Looks for Bluetooth Classic and Low Energy devices, as well as the services |
+ // exposed by those devices. |
+ bool SearchDevices(int timeout_multiplier, |
bool search_cached_devices_only, |
ScopedVector<DeviceState>* device_list); |
+ // Sends a device search API call to the adapter to look for Bluetooth Classic |
+ // devices. |
+ bool SearchClassicDevices(int timeout_multiplier, |
+ bool search_cached_devices_only, |
+ ScopedVector<DeviceState>* device_list); |
+ |
+ // Enumerate Bluetooth Low Energy devices. |
+ bool SearchLowEnergyDevices(ScopedVector<DeviceState>* device_list); |
+ |
// Discover services for the devices in |device_list|. |
- void DiscoverServices(ScopedVector<DeviceState>* device_list); |
+ bool DiscoverServices(ScopedVector<DeviceState>* device_list, |
+ bool search_cached_services_only); |
+ |
+ // Discover Bluetooth Classic services for the given |device_address|. |
+ bool DiscoverClassicDeviceServices( |
+ const std::string& device_address, |
+ const GUID& protocol_uuid, |
+ bool search_cached_services_only, |
+ ScopedVector<ServiceRecordState>* service_record_states); |
+ |
+ // Discover Bluetooth Low Energy services for the given |device_path|. |
+ bool DiscoverLowEnergyDeviceServices( |
+ const base::FilePath& device_path, |
+ ScopedVector<ServiceRecordState>* service_record_states); |
// UI task runner reference. |
scoped_refptr<base::SequencedTaskRunner> ui_task_runner_; |
@@ -163,6 +199,10 @@ class BluetoothTaskManagerWin |
// indicates whether the adapter is in discovery mode or not. |
bool discovering_; |
+ // Use for discarding too many log messages. |
+ base::TimeTicks current_logging_batch_ticks_; |
+ int current_logging_batch_count_; |
+ |
DISALLOW_COPY_AND_ASSIGN(BluetoothTaskManagerWin); |
}; |