OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_chromeos.h" | 5 #include "device/bluetooth/bluetooth_adapter_chromeos.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
58 DCHECK(observer); | 58 DCHECK(observer); |
59 observers_.AddObserver(observer); | 59 observers_.AddObserver(observer); |
60 } | 60 } |
61 | 61 |
62 void BluetoothAdapterChromeOS::RemoveObserver( | 62 void BluetoothAdapterChromeOS::RemoveObserver( |
63 BluetoothAdapter::Observer* observer) { | 63 BluetoothAdapter::Observer* observer) { |
64 DCHECK(observer); | 64 DCHECK(observer); |
65 observers_.RemoveObserver(observer); | 65 observers_.RemoveObserver(observer); |
66 } | 66 } |
67 | 67 |
68 std::string BluetoothAdapterChromeOS::address() const { | 68 std::string BluetoothAdapterChromeOS::GetAddress() const { |
69 return address_; | 69 return address_; |
70 } | 70 } |
71 | 71 |
72 std::string BluetoothAdapterChromeOS::name() const { | 72 std::string BluetoothAdapterChromeOS::GetName() const { |
73 return name_; | 73 return name_; |
74 } | 74 } |
75 | 75 |
76 // TODO(youngki) Return true when object path and properties of the adapter are | 76 // TODO(youngki) Return true when object path and properties of the adapter are |
77 // initialized. | 77 // initialized. |
78 bool BluetoothAdapterChromeOS::IsInitialized() const { | 78 bool BluetoothAdapterChromeOS::IsInitialized() const { |
79 return true; | 79 return true; |
80 } | 80 } |
81 | 81 |
82 bool BluetoothAdapterChromeOS::IsPresent() const { | 82 bool BluetoothAdapterChromeOS::IsPresent() const { |
(...skipping 269 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
352 DevicesMap::iterator iter = devices_.find(address); | 352 DevicesMap::iterator iter = devices_.find(address); |
353 BluetoothDeviceChromeOS* device; | 353 BluetoothDeviceChromeOS* device; |
354 const bool update_device = (iter != devices_.end()); | 354 const bool update_device = (iter != devices_.end()); |
355 if (update_device) { | 355 if (update_device) { |
356 device = static_cast<BluetoothDeviceChromeOS*>(iter->second); | 356 device = static_cast<BluetoothDeviceChromeOS*>(iter->second); |
357 } else { | 357 } else { |
358 device = BluetoothDeviceChromeOS::Create(this); | 358 device = BluetoothDeviceChromeOS::Create(this); |
359 devices_[address] = device; | 359 devices_[address] = device; |
360 } | 360 } |
361 | 361 |
362 const bool was_paired = device->IsPaired(); | 362 if (!device->HasObjectPath()) { |
363 if (!was_paired) { | |
364 VLOG(1) << "Assigned object path " << device_path.value() << " to device " | 363 VLOG(1) << "Assigned object path " << device_path.value() << " to device " |
365 << address; | 364 << address; |
366 device->SetObjectPath(device_path); | 365 device->SetObjectPath(device_path); |
367 } | 366 } |
368 device->Update(properties, true); | 367 device->Update(properties, true); |
369 | 368 |
370 if (update_device) { | 369 if (update_device) { |
371 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 370 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
372 DeviceChanged(this, device)); | 371 DeviceChanged(this, device)); |
373 } else { | 372 } else { |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
410 static_cast<BluetoothDeviceChromeOS*>(iter->second); | 409 static_cast<BluetoothDeviceChromeOS*>(iter->second); |
411 DevicesMap::iterator temp = iter; | 410 DevicesMap::iterator temp = iter; |
412 ++iter; | 411 ++iter; |
413 | 412 |
414 if (device->object_path_ != device_path) | 413 if (device->object_path_ != device_path) |
415 continue; | 414 continue; |
416 | 415 |
417 // DeviceRemoved can also be called to indicate a device that is visible | 416 // DeviceRemoved can also be called to indicate a device that is visible |
418 // during discovery has disconnected, but it is still visible to the | 417 // during discovery has disconnected, but it is still visible to the |
419 // adapter, so don't remove in that case and only clear the object path. | 418 // adapter, so don't remove in that case and only clear the object path. |
420 if (!device->IsVisible()) { | 419 if (!device->WasDiscovered()) { |
421 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 420 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
422 DeviceRemoved(this, device)); | 421 DeviceRemoved(this, device)); |
423 | 422 |
424 VLOG(1) << "Removed device " << device->address(); | 423 VLOG(1) << "Removed device " << device->GetAddress(); |
425 | 424 |
426 delete device; | 425 delete device; |
427 devices_.erase(temp); | 426 devices_.erase(temp); |
428 } else { | 427 } else { |
429 VLOG(1) << "Removed object path from device " << device->address(); | 428 VLOG(1) << "Removed object path from device " << device->GetAddress(); |
430 device->RemoveObjectPath(); | 429 device->RemoveObjectPath(); |
431 | 430 |
432 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 431 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
433 DeviceChanged(this, device)); | 432 DeviceChanged(this, device)); |
434 } | 433 } |
435 } | 434 } |
436 } | 435 } |
437 | 436 |
438 void BluetoothAdapterChromeOS::DevicesChanged( | 437 void BluetoothAdapterChromeOS::DevicesChanged( |
439 const std::vector<dbus::ObjectPath>& devices) { | 438 const std::vector<dbus::ObjectPath>& devices) { |
440 for (std::vector<dbus::ObjectPath>::const_iterator iter = | 439 for (std::vector<dbus::ObjectPath>::const_iterator iter = |
441 devices.begin(); iter != devices.end(); ++iter) | 440 devices.begin(); iter != devices.end(); ++iter) |
442 UpdateDevice(*iter); | 441 UpdateDevice(*iter); |
443 } | 442 } |
444 | 443 |
445 void BluetoothAdapterChromeOS::ClearDiscoveredDevices() { | 444 void BluetoothAdapterChromeOS::ClearDiscoveredDevices() { |
446 DevicesMap::iterator iter = devices_.begin(); | 445 DevicesMap::iterator iter = devices_.begin(); |
447 while (iter != devices_.end()) { | 446 while (iter != devices_.end()) { |
448 BluetoothDevice* device = iter->second; | 447 BluetoothDeviceChromeOS* device = |
| 448 static_cast<BluetoothDeviceChromeOS*>(iter->second); |
449 DevicesMap::iterator temp = iter; | 449 DevicesMap::iterator temp = iter; |
450 ++iter; | 450 ++iter; |
451 | 451 |
452 if (!device->IsPaired()) { | 452 if (!device->HasObjectPath()) { |
453 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 453 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
454 DeviceRemoved(this, device)); | 454 DeviceRemoved(this, device)); |
455 | 455 |
456 delete device; | 456 delete device; |
457 devices_.erase(temp); | 457 devices_.erase(temp); |
458 } | 458 |
| 459 } else |
| 460 device->SetDiscovered(false); |
459 } | 461 } |
460 } | 462 } |
461 | 463 |
462 void BluetoothAdapterChromeOS::DeviceFound( | 464 void BluetoothAdapterChromeOS::DeviceFound( |
463 const dbus::ObjectPath& adapter_path, | 465 const dbus::ObjectPath& adapter_path, |
464 const std::string& address, | 466 const std::string& address, |
465 const BluetoothDeviceClient::Properties& properties) { | 467 const BluetoothDeviceClient::Properties& properties) { |
466 if (adapter_path != object_path_) | 468 if (adapter_path != object_path_) |
467 return; | 469 return; |
468 | 470 |
469 // DeviceFound can also be called to indicate that a device we've | 471 // DeviceFound can also be called to indicate that a device we've |
470 // paired with is now visible to the adapter during discovery, in which | 472 // paired with is now visible to the adapter during discovery, in which |
471 // case we want to update the existing object, not create a new one. | 473 // case we want to update the existing object, not create a new one. |
472 BluetoothDeviceChromeOS* device; | 474 BluetoothDeviceChromeOS* device; |
473 DevicesMap::iterator iter = devices_.find(address); | 475 DevicesMap::iterator iter = devices_.find(address); |
474 const bool update_device = (iter != devices_.end()); | 476 const bool update_device = (iter != devices_.end()); |
475 if (update_device) { | 477 if (update_device) { |
476 device = static_cast<BluetoothDeviceChromeOS*>(iter->second); | 478 device = static_cast<BluetoothDeviceChromeOS*>(iter->second); |
477 } else { | 479 } else { |
478 device = BluetoothDeviceChromeOS::Create(this); | 480 device = BluetoothDeviceChromeOS::Create(this); |
479 devices_[address] = device; | 481 devices_[address] = device; |
480 } | 482 } |
481 | 483 |
482 VLOG(1) << "Device " << address << " is visible to the adapter"; | 484 VLOG(1) << "Device " << address << " is visible to the adapter"; |
483 device->SetVisible(true); | 485 device->SetDiscovered(true); |
484 device->Update(&properties, false); | 486 device->Update(&properties, false); |
485 | 487 |
486 if (update_device) { | 488 if (update_device) { |
487 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 489 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
488 DeviceChanged(this, device)); | 490 DeviceChanged(this, device)); |
489 } else { | 491 } else { |
490 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 492 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
491 DeviceAdded(this, device)); | 493 DeviceAdded(this, device)); |
492 } | 494 } |
493 } | 495 } |
494 | 496 |
495 void BluetoothAdapterChromeOS::DeviceDisappeared( | 497 void BluetoothAdapterChromeOS::DeviceDisappeared( |
496 const dbus::ObjectPath& adapter_path, | 498 const dbus::ObjectPath& adapter_path, |
497 const std::string& address) { | 499 const std::string& address) { |
498 if (adapter_path != object_path_) | 500 if (adapter_path != object_path_) |
499 return; | 501 return; |
500 | 502 |
501 DevicesMap::iterator iter = devices_.find(address); | 503 DevicesMap::iterator iter = devices_.find(address); |
502 if (iter == devices_.end()) | 504 if (iter == devices_.end()) |
503 return; | 505 return; |
504 | 506 |
505 BluetoothDeviceChromeOS* device = | 507 BluetoothDeviceChromeOS* device = |
506 static_cast<BluetoothDeviceChromeOS*>(iter->second); | 508 static_cast<BluetoothDeviceChromeOS*>(iter->second); |
507 | 509 |
508 // DeviceDisappeared can also be called to indicate that a device we've | 510 // DeviceDisappeared can also be called to indicate that a device we've |
509 // paired with is no longer visible to the adapter, so don't remove | 511 // paired with is no longer visible to the adapter, so don't remove |
510 // in that case and only clear the visible flag. | 512 // in that case and only clear the visible flag. |
511 if (!device->IsPaired()) { | 513 if (!device->HasObjectPath()) { |
512 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 514 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
513 DeviceRemoved(this, device)); | 515 DeviceRemoved(this, device)); |
514 | 516 |
515 VLOG(1) << "Discovered device " << device->address() | 517 VLOG(1) << "Discovered device " << device->GetAddress() |
516 << " is no longer visible to the adapter"; | 518 << " is no longer visible to the adapter"; |
517 | 519 |
518 delete device; | 520 delete device; |
519 devices_.erase(iter); | 521 devices_.erase(iter); |
520 } else { | 522 } else { |
521 VLOG(1) << "Paired device " << device->address() | 523 VLOG(1) << "Paired device " << device->GetAddress() |
522 << " is no longer visible to the adapter"; | 524 << " is no longer visible to the adapter"; |
523 device->SetVisible(false); | 525 device->SetDiscovered(false); |
524 | 526 |
525 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, | 527 FOR_EACH_OBSERVER(BluetoothAdapter::Observer, observers_, |
526 DeviceChanged(this, device)); | 528 DeviceChanged(this, device)); |
527 } | 529 } |
528 } | 530 } |
529 | 531 |
530 } // namespace chromeos | 532 } // namespace chromeos |
OLD | NEW |