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

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

Issue 1538173003: Implementing GATT connection/disconnect on OS X. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixing patch Created 4 years, 10 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_device_mac.h" 5 #include "device/bluetooth/bluetooth_low_energy_device_mac.h"
6 6
7 #import <CoreFoundation/CoreFoundation.h> 7 #import <CoreFoundation/CoreFoundation.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include "base/mac/mac_util.h" 10 #include "base/mac/mac_util.h"
(...skipping 25 matching lines...) Expand all
36 NSDictionary* advertisement_data, 36 NSDictionary* advertisement_data,
37 int rssi) 37 int rssi)
38 : BluetoothDeviceMac(adapter) { 38 : BluetoothDeviceMac(adapter) {
39 DCHECK(BluetoothAdapterMac::IsLowEnergyAvailable()); 39 DCHECK(BluetoothAdapterMac::IsLowEnergyAvailable());
40 identifier_ = GetPeripheralIdentifier(peripheral); 40 identifier_ = GetPeripheralIdentifier(peripheral);
41 hash_address_ = GetPeripheralHashAddress(peripheral); 41 hash_address_ = GetPeripheralHashAddress(peripheral);
42 Update(peripheral, advertisement_data, rssi); 42 Update(peripheral, advertisement_data, rssi);
43 } 43 }
44 44
45 BluetoothLowEnergyDeviceMac::~BluetoothLowEnergyDeviceMac() { 45 BluetoothLowEnergyDeviceMac::~BluetoothLowEnergyDeviceMac() {
46 if (IsGattConnected()) {
47 GetMacAdapter()->DisconnectGatt(this);
48 }
46 } 49 }
47 50
48 void BluetoothLowEnergyDeviceMac::Update(CBPeripheral* peripheral, 51 void BluetoothLowEnergyDeviceMac::Update(CBPeripheral* peripheral,
49 NSDictionary* advertisement_data, 52 NSDictionary* advertisement_data,
50 int rssi) { 53 int rssi) {
51 last_update_time_.reset([[NSDate date] retain]); 54 last_update_time_.reset([[NSDate date] retain]);
52 peripheral_.reset([peripheral retain]); 55 peripheral_.reset([peripheral retain]);
53 rssi_ = rssi; 56 rssi_ = rssi;
54 NSNumber* connectable = 57 NSNumber* connectable =
55 [advertisement_data objectForKey:CBAdvertisementDataIsConnectable]; 58 [advertisement_data objectForKey:CBAdvertisementDataIsConnectable];
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 123
121 bool BluetoothLowEnergyDeviceMac::IsGattConnected() const { 124 bool BluetoothLowEnergyDeviceMac::IsGattConnected() const {
122 return (GetPeripheralState() == CBPeripheralStateConnected); 125 return (GetPeripheralState() == CBPeripheralStateConnected);
123 } 126 }
124 127
125 bool BluetoothLowEnergyDeviceMac::IsConnectable() const { 128 bool BluetoothLowEnergyDeviceMac::IsConnectable() const {
126 return connectable_; 129 return connectable_;
127 } 130 }
128 131
129 bool BluetoothLowEnergyDeviceMac::IsConnecting() const { 132 bool BluetoothLowEnergyDeviceMac::IsConnecting() const {
130 return false; 133 return (GetPeripheralState() == CBPeripheralStateConnecting);
131 } 134 }
132 135
133 BluetoothDevice::UUIDList BluetoothLowEnergyDeviceMac::GetUUIDs() const { 136 BluetoothDevice::UUIDList BluetoothLowEnergyDeviceMac::GetUUIDs() const {
134 return BluetoothDevice::UUIDList(advertised_uuids_.begin(), 137 return BluetoothDevice::UUIDList(advertised_uuids_.begin(),
135 advertised_uuids_.end()); 138 advertised_uuids_.end());
136 } 139 }
137 140
138 int16_t BluetoothLowEnergyDeviceMac::GetInquiryRSSI() const { 141 int16_t BluetoothLowEnergyDeviceMac::GetInquiryRSSI() const {
139 return kUnknownPower; 142 return kUnknownPower;
140 } 143 }
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 NOTIMPLEMENTED(); 209 NOTIMPLEMENTED();
207 } 210 }
208 211
209 void BluetoothLowEnergyDeviceMac::ConnectToServiceInsecurely( 212 void BluetoothLowEnergyDeviceMac::ConnectToServiceInsecurely(
210 const device::BluetoothUUID& uuid, 213 const device::BluetoothUUID& uuid,
211 const ConnectToServiceCallback& callback, 214 const ConnectToServiceCallback& callback,
212 const ConnectToServiceErrorCallback& error_callback) { 215 const ConnectToServiceErrorCallback& error_callback) {
213 NOTIMPLEMENTED(); 216 NOTIMPLEMENTED();
214 } 217 }
215 218
216 void BluetoothLowEnergyDeviceMac::CreateGattConnection(
217 const GattConnectionCallback& callback,
218 const ConnectErrorCallback& error_callback) {
219 NOTIMPLEMENTED();
220 }
221
222 NSDate* BluetoothLowEnergyDeviceMac::GetLastUpdateTime() const { 219 NSDate* BluetoothLowEnergyDeviceMac::GetLastUpdateTime() const {
223 return last_update_time_.get(); 220 return last_update_time_.get();
224 } 221 }
225 222
226 std::string BluetoothLowEnergyDeviceMac::GetDeviceName() const { 223 std::string BluetoothLowEnergyDeviceMac::GetDeviceName() const {
227 return base::SysNSStringToUTF8([peripheral_ name]); 224 return base::SysNSStringToUTF8([peripheral_ name]);
228 } 225 }
229 226
230 void BluetoothLowEnergyDeviceMac::CreateGattConnectionImpl() { 227 void BluetoothLowEnergyDeviceMac::CreateGattConnectionImpl() {
231 // Mac implementation does not yet use the default CreateGattConnection 228 if (!IsGattConnected()) {
232 // implementation. http://crbug.com/520774 229 GetMacAdapter()->CreateGattConnection(this);
233 NOTIMPLEMENTED(); 230 }
234 } 231 }
235 232
236 void BluetoothLowEnergyDeviceMac::DisconnectGatt() { 233 void BluetoothLowEnergyDeviceMac::DisconnectGatt() {
237 // Mac implementation does not yet use the default CreateGattConnection 234 GetMacAdapter()->DisconnectGatt(this);
238 // implementation. http://crbug.com/520774
239 NOTIMPLEMENTED();
240 } 235 }
241 236
242 // static 237 // static
243 std::string BluetoothLowEnergyDeviceMac::GetPeripheralIdentifier( 238 std::string BluetoothLowEnergyDeviceMac::GetPeripheralIdentifier(
244 CBPeripheral* peripheral) { 239 CBPeripheral* peripheral) {
245 DCHECK(BluetoothAdapterMac::IsLowEnergyAvailable()); 240 DCHECK(BluetoothAdapterMac::IsLowEnergyAvailable());
246 NSUUID* uuid = [peripheral identifier]; 241 NSUUID* uuid = [peripheral identifier];
247 NSString* uuidString = [uuid UUIDString]; 242 NSString* uuidString = [uuid UUIDString];
248 return base::SysNSStringToUTF8(uuidString); 243 return base::SysNSStringToUTF8(uuidString);
249 } 244 }
250 245
251 // static 246 // static
252 std::string BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress( 247 std::string BluetoothLowEnergyDeviceMac::GetPeripheralHashAddress(
253 CBPeripheral* peripheral) { 248 CBPeripheral* peripheral) {
254 const size_t kCanonicalAddressNumberOfBytes = 6; 249 const size_t kCanonicalAddressNumberOfBytes = 6;
255 char raw[kCanonicalAddressNumberOfBytes]; 250 char raw[kCanonicalAddressNumberOfBytes];
256 crypto::SHA256HashString(GetPeripheralIdentifier(peripheral), raw, 251 crypto::SHA256HashString(GetPeripheralIdentifier(peripheral), raw,
257 sizeof(raw)); 252 sizeof(raw));
258 std::string hash = base::HexEncode(raw, sizeof(raw)); 253 std::string hash = base::HexEncode(raw, sizeof(raw));
259 return BluetoothDevice::CanonicalizeAddress(hash); 254 return BluetoothDevice::CanonicalizeAddress(hash);
260 } 255 }
261 256
257 device::BluetoothAdapterMac* BluetoothLowEnergyDeviceMac::GetMacAdapter() {
258 return static_cast<BluetoothAdapterMac*>(this->adapter_);
259 }
260
261 CBPeripheral* BluetoothLowEnergyDeviceMac::GetPeripheral() {
262 return peripheral_;
263 }
264
265 void BluetoothLowEnergyDeviceMac::DidDisconnectPeripheral() {
266 if (create_gatt_connection_error_callbacks_.empty()) {
267 DidDisconnectGatt();
268 } else {
269 DidFailToConnectGatt(ERROR_FAILED);
270 }
271 }
272
273 void BluetoothLowEnergyDeviceMac::GattConnected() {
msarda 2016/02/11 10:55:39 This is a private method and I do not see where it
jlebel 2016/02/19 11:02:35 Done.
274 DidConnectGatt();
275 }
276
262 CBPeripheralState BluetoothLowEnergyDeviceMac::GetPeripheralState() const { 277 CBPeripheralState BluetoothLowEnergyDeviceMac::GetPeripheralState() const {
263 Class peripheral_class = NSClassFromString(@"CBPeripheral"); 278 Class peripheral_class = NSClassFromString(@"CBPeripheral");
264 base::scoped_nsobject<NSMethodSignature> signature([[peripheral_class 279 base::scoped_nsobject<NSMethodSignature> signature([[peripheral_class
265 instanceMethodSignatureForSelector:@selector(state)] retain]); 280 instanceMethodSignatureForSelector:@selector(state)] retain]);
266 base::scoped_nsobject<NSInvocation> invocation( 281 base::scoped_nsobject<NSInvocation> invocation(
267 [[NSInvocation invocationWithMethodSignature:signature] retain]); 282 [[NSInvocation invocationWithMethodSignature:signature] retain]);
268 [invocation setTarget:peripheral_]; 283 [invocation setTarget:peripheral_];
269 [invocation setSelector:@selector(state)]; 284 [invocation setSelector:@selector(state)];
270 [invocation invoke]; 285 [invocation invoke];
271 CBPeripheralState state = CBPeripheralStateDisconnected; 286 CBPeripheralState state = CBPeripheralStateDisconnected;
272 [invocation getReturnValue:&state]; 287 [invocation getReturnValue:&state];
273 return state; 288 return state;
274 } 289 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698