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

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

Issue 1165053003: Adding support for Low Energy device discovery to BluetoothAdapterMac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: removing references to CBCentralManager Created 5 years, 6 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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_low_energy_discovery_manager_mac.h" 5 #include "device/bluetooth/bluetooth_low_energy_discovery_manager_mac.h"
6 6
7 #include "base/mac/mac_util.h" 7 #include "base/mac/mac_util.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "base/strings/sys_string_conversions.h" 9 #include "base/strings/sys_string_conversions.h"
10 #include "device/bluetooth/bluetooth_low_energy_device_mac.h" 10 #include "device/bluetooth/bluetooth_low_energy_device_mac.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 72
73 - (void)centralManagerDidUpdateState:(CBCentralManager*)central { 73 - (void)centralManagerDidUpdateState:(CBCentralManager*)central {
74 // Notifies when the powered state of the central manager changed. 74 // Notifies when the powered state of the central manager changed.
75 delegate_->TryStartDiscovery(); 75 delegate_->TryStartDiscovery();
76 } 76 }
77 77
78 @end 78 @end
79 79
80 BluetoothLowEnergyDiscoveryManagerMac:: 80 BluetoothLowEnergyDiscoveryManagerMac::
81 ~BluetoothLowEnergyDiscoveryManagerMac() { 81 ~BluetoothLowEnergyDiscoveryManagerMac() {
82 ClearDevices();
83 } 82 }
84 83
85 bool BluetoothLowEnergyDiscoveryManagerMac::IsDiscovering() const { 84 bool BluetoothLowEnergyDiscoveryManagerMac::IsDiscovering() const {
86 return discovering_; 85 return discovering_;
87 } 86 }
88 87
89 void BluetoothLowEnergyDiscoveryManagerMac::StartDiscovery( 88 void BluetoothLowEnergyDiscoveryManagerMac::StartDiscovery(
90 BluetoothDevice::UUIDList services_uuids) { 89 BluetoothDevice::UUIDList services_uuids) {
91 ClearDevices();
92 discovering_ = true; 90 discovering_ = true;
93 pending_ = true; 91 pending_ = true;
94 services_uuids_ = services_uuids; 92 services_uuids_ = services_uuids;
95 TryStartDiscovery(); 93 TryStartDiscovery();
96 } 94 }
97 95
98 void BluetoothLowEnergyDiscoveryManagerMac::TryStartDiscovery() { 96 void BluetoothLowEnergyDiscoveryManagerMac::TryStartDiscovery() {
99 if (!discovering_) { 97 if (!discovering_) {
100 return; 98 return;
101 } 99 }
(...skipping 28 matching lines...) Expand all
130 if (discovering_ && !pending_) { 128 if (discovering_ && !pending_) {
131 [manager_ stopScan]; 129 [manager_ stopScan];
132 } 130 }
133 discovering_ = false; 131 discovering_ = false;
134 } 132 }
135 133
136 void BluetoothLowEnergyDiscoveryManagerMac::DiscoveredPeripheral( 134 void BluetoothLowEnergyDiscoveryManagerMac::DiscoveredPeripheral(
137 CBPeripheral* peripheral, 135 CBPeripheral* peripheral,
138 NSDictionary* advertisementData, 136 NSDictionary* advertisementData,
139 int rssi) { 137 int rssi) {
140 // Look for existing device. 138 observer_->LowEnergyDeviceUpdated(peripheral, advertisementData, rssi);
141 auto iter = devices_.find( 139 }
142 BluetoothLowEnergyDeviceMac::GetPeripheralIdentifier(peripheral)); 140
143 if (iter == devices_.end()) { 141 void BluetoothLowEnergyDiscoveryManagerMac::SetManager(
144 // A device has been added. 142 CBCentralManager* manager) {
145 BluetoothLowEnergyDeviceMac* device = 143 // This method should not be called on OS X < 10.7.
scheib 2015/06/17 16:55:08 How about, "setDelegate is only available in OSX 1
krstnmnlsn 2015/06/17 20:18:41 Done.
146 new BluetoothLowEnergyDeviceMac(peripheral, advertisementData, rssi); 144 if (base::mac::IsOSLionOrLater()) {
147 devices_.insert(devices_.begin(), 145 SEL selector = NSSelectorFromString(@"setDelegate:");
148 std::make_pair(device->GetIdentifier(), device)); 146 [manager performSelector:selector withObject:bridge_];
149 observer_->DeviceFound(device); 147 manager_.reset(manager);
150 return;
151 } 148 }
scheib 2015/06/17 16:55:08 Either return a bool indicating if this was succes
krstnmnlsn 2015/06/17 20:18:41 I like the CHECK idea.
152
153 // A device has an update.
154 BluetoothLowEnergyDeviceMac* old_device = iter->second;
155 old_device->Update(peripheral, advertisementData, rssi);
156 observer_->DeviceUpdated(old_device);
157 } 149 }
158 150
159 BluetoothLowEnergyDiscoveryManagerMac* 151 BluetoothLowEnergyDiscoveryManagerMac*
160 BluetoothLowEnergyDiscoveryManagerMac::Create(Observer* observer) { 152 BluetoothLowEnergyDiscoveryManagerMac::Create(Observer* observer) {
161 return new BluetoothLowEnergyDiscoveryManagerMac(observer); 153 return new BluetoothLowEnergyDiscoveryManagerMac(observer);
162 } 154 }
163 155
164 BluetoothLowEnergyDiscoveryManagerMac::BluetoothLowEnergyDiscoveryManagerMac( 156 BluetoothLowEnergyDiscoveryManagerMac::BluetoothLowEnergyDiscoveryManagerMac(
165 Observer* observer) 157 Observer* observer)
166 : observer_(observer) { 158 : observer_(observer) {
167 bridge_.reset([[BluetoothLowEnergyDiscoveryManagerMacBridge alloc] 159 bridge_.reset([[BluetoothLowEnergyDiscoveryManagerMacBridge alloc]
168 initWithManager:this]); 160 initWithManager:this]);
169 // Since CoreBluetooth is only available on OS X 10.7 or later, we 161 // Since CoreBluetooth is only available on OS X 10.7 or later, we
170 // instantiate CBCentralManager only for OS X >= 10.7. 162 // instantiate CBCentralManager only for OS X >= 10.7.
171 if (base::mac::IsOSLionOrLater()) { 163 if (base::mac::IsOSLionOrLater()) {
172 Class aClass = NSClassFromString(@"CBCentralManager"); 164 Class aClass = NSClassFromString(@"CBCentralManager");
173 manager_.reset( 165 manager_.reset(
174 [[aClass alloc] initWithDelegate:bridge_ 166 [[aClass alloc] initWithDelegate:bridge_
175 queue:dispatch_get_main_queue()]); 167 queue:dispatch_get_main_queue()]);
176 } 168 }
177 discovering_ = false; 169 discovering_ = false;
178 } 170 }
179
180 void BluetoothLowEnergyDiscoveryManagerMac::ClearDevices() {
181 STLDeleteValues(&devices_);
182 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698