Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(195)

Side by Side Diff: device/bluetooth/bluetooth_adapter_mac.mm

Issue 12929003: Implemented BluetoothAdapterMac::AddDevices(). (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reverted BluetoothDevice interface. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "device/bluetooth/bluetooth_adapter_mac.h" 5 #include "device/bluetooth/bluetooth_adapter_mac.h"
6 6
7 #include <IOBluetooth/objc/IOBluetoothHostController.h> 7 #import <IOBluetooth/objc/IOBluetoothDevice.h>
8 #import <IOBluetooth/objc/IOBluetoothHostController.h>
8 9
9 #include <string> 10 #include <string>
10 11
11 #include "base/bind.h" 12 #include "base/bind.h"
12 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
14 #include "base/hash_tables.h"
13 #include "base/location.h" 15 #include "base/location.h"
14 #include "base/sequenced_task_runner.h" 16 #include "base/sequenced_task_runner.h"
15 #include "base/single_thread_task_runner.h" 17 #include "base/single_thread_task_runner.h"
16 #include "base/thread_task_runner_handle.h" 18 #include "base/thread_task_runner_handle.h"
17 #include "base/time.h" 19 #include "base/time.h"
18 #include "base/strings/sys_string_conversions.h" 20 #include "base/strings/sys_string_conversions.h"
21 #include "device/bluetooth/bluetooth_device_mac.h"
19 22
20 // Replicate specific 10.7 SDK declarations for building with prior SDKs. 23 // Replicate specific 10.7 SDK declarations for building with prior SDKs.
21 #if !defined(MAC_OS_X_VERSION_10_7) || \ 24 #if !defined(MAC_OS_X_VERSION_10_7) || \
22 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7 25 MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_7
23 26
24 @interface IOBluetoothHostController (LionSDKDeclarations) 27 @interface IOBluetoothHostController (LionSDKDeclarations)
25 - (NSString *)nameAsString; 28 - (NSString*)nameAsString;
26 - (BluetoothHCIPowerState)powerState; 29 - (BluetoothHCIPowerState)powerState;
27 @end 30 @end
28 31
32 @interface IOBluetoothDevice (LionSDKDeclarations)
33 - (NSString*)addressString;
34 @end
35
29 #endif // MAC_OS_X_VERSION_10_7 36 #endif // MAC_OS_X_VERSION_10_7
30 37
31 namespace { 38 namespace {
32 39
33 const int kPollIntervalMs = 500; 40 const int kPollIntervalMs = 500;
34 41
35 } // namespace 42 } // namespace
36 43
37 namespace device { 44 namespace device {
38 45
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 if (was_present != is_present) { 133 if (was_present != is_present) {
127 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, 134 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
128 AdapterPresentChanged(this, is_present)); 135 AdapterPresentChanged(this, is_present));
129 } 136 }
130 if (powered_ != powered) { 137 if (powered_ != powered) {
131 powered_ = powered; 138 powered_ = powered;
132 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, 139 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
133 AdapterPoweredChanged(this, powered_)); 140 AdapterPoweredChanged(this, powered_));
134 } 141 }
135 142
143 NSArray* paired_devices = [IOBluetoothDevice pairedDevices];
144 AddDevices(paired_devices);
145 RemoveUnpairedDevices(paired_devices);
146
136 ui_task_runner_->PostDelayedTask( 147 ui_task_runner_->PostDelayedTask(
137 FROM_HERE, 148 FROM_HERE,
138 base::Bind(&BluetoothAdapterMac::PollAdapter, 149 base::Bind(&BluetoothAdapterMac::PollAdapter,
139 weak_ptr_factory_.GetWeakPtr()), 150 weak_ptr_factory_.GetWeakPtr()),
140 base::TimeDelta::FromMilliseconds(kPollIntervalMs)); 151 base::TimeDelta::FromMilliseconds(kPollIntervalMs));
141 } 152 }
142 153
154 void BluetoothAdapterMac::AddDevices(NSArray* devices) {
155 for (IOBluetoothDevice* device in devices) {
156 std::string device_address =
157 base::SysNSStringToUTF8([device addressString]);
158 DevicesMap::iterator found_device_iter = devices_.find(device_address);
159
160 if (found_device_iter == devices_.end()) {
161 devices_[device_address] = new BluetoothDeviceMac(device);
162 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
163 DeviceAdded(this, devices_[device_address]));
164 continue;
165 }
166 BluetoothDeviceMac* device_mac =
167 static_cast<BluetoothDeviceMac*>(found_device_iter->second);
168 if (device_mac->device_fingerprint() !=
169 BluetoothDeviceMac::ComputeDeviceFingerprint(device)) {
170 devices_[device_address] = new BluetoothDeviceMac(device);
171 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
172 DeviceChanged(this, devices_[device_address]));
173 delete device_mac;
174 }
175 }
176 }
177
178 void BluetoothAdapterMac::RemoveUnpairedDevices(NSArray* paired_devices) {
179 base::hash_set<std::string> paired_device_address_list;
180 for (IOBluetoothDevice* device in paired_devices) {
181 paired_device_address_list.insert(
182 base::SysNSStringToUTF8([device addressString]));
183 }
184
185 DevicesMap::iterator iter = devices_.begin();
186 while (iter != devices_.end()) {
187 DevicesMap::iterator device_iter = iter;
188 ++iter;
189
190 if (paired_device_address_list.find(device_iter->first) !=
191 paired_device_address_list.end())
192 continue;
193
194 if (device_iter->second->IsPaired()) {
195 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_,
196 DeviceRemoved(this, device_iter->second));
197 delete device_iter->second;
198 devices_.erase(device_iter);
199 }
200 }
201 }
202
143 } // namespace device 203 } // namespace device
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698