| 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 "chromeos/dbus/bluetooth_device_client.h" | 5 #include "chromeos/dbus/bluetooth_device_client.h" | 
| 6 | 6 | 
| 7 #include <map> | 7 #include <map> | 
| 8 #include <utility> | 8 #include <utility> | 
| 9 | 9 | 
| 10 #include "base/bind.h" | 10 #include "base/bind.h" | 
| 11 #include "base/logging.h" | 11 #include "base/logging.h" | 
| 12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" | 
| 13 #include "chromeos/dbus/bluetooth_adapter_client.h" | 13 #include "chromeos/dbus/bluetooth_adapter_client.h" | 
| 14 #include "chromeos/dbus/bluetooth_property.h" | 14 #include "chromeos/dbus/bluetooth_property.h" | 
| 15 #include "dbus/bus.h" | 15 #include "dbus/bus.h" | 
| 16 #include "dbus/message.h" | 16 #include "dbus/message.h" | 
| 17 #include "dbus/object_path.h" | 17 #include "dbus/object_path.h" | 
| 18 #include "dbus/object_proxy.h" | 18 #include "dbus/object_proxy.h" | 
| 19 #include "third_party/cros_system_api/dbus/service_constants.h" | 19 #include "third_party/cros_system_api/dbus/service_constants.h" | 
| 20 | 20 | 
| 21 namespace chromeos { | 21 namespace chromeos { | 
| 22 | 22 | 
| 23 BluetoothDeviceClient::Properties::Properties(dbus::ObjectProxy* object_proxy, | 23 BluetoothDeviceClient::Properties::Properties( | 
| 24                                               PropertyChangedCallback callback) | 24     dbus::ObjectProxy* object_proxy, | 
|  | 25     const PropertyChangedCallback& callback) | 
| 25     : BluetoothPropertySet(object_proxy, | 26     : BluetoothPropertySet(object_proxy, | 
| 26                            bluetooth_device::kBluetoothDeviceInterface, | 27                            bluetooth_device::kBluetoothDeviceInterface, | 
| 27                            callback) { | 28                            callback) { | 
| 28   RegisterProperty(bluetooth_device::kAddressProperty, &address); | 29   RegisterProperty(bluetooth_device::kAddressProperty, &address); | 
| 29   RegisterProperty(bluetooth_device::kNameProperty, &name); | 30   RegisterProperty(bluetooth_device::kNameProperty, &name); | 
| 30   RegisterProperty(bluetooth_device::kVendorProperty, &vendor); | 31   RegisterProperty(bluetooth_device::kVendorProperty, &vendor); | 
| 31   RegisterProperty(bluetooth_device::kProductProperty, &product); | 32   RegisterProperty(bluetooth_device::kProductProperty, &product); | 
| 32   RegisterProperty(bluetooth_device::kVersionProperty, &version); | 33   RegisterProperty(bluetooth_device::kVersionProperty, &version); | 
| 33   RegisterProperty(bluetooth_device::kIconProperty, &icon); | 34   RegisterProperty(bluetooth_device::kIconProperty, &icon); | 
| 34   RegisterProperty(bluetooth_device::kClassProperty, &bluetooth_class); | 35   RegisterProperty(bluetooth_device::kClassProperty, &bluetooth_class); | 
| (...skipping 422 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 457   // List of observers interested in event notifications from us. | 458   // List of observers interested in event notifications from us. | 
| 458   ObserverList<BluetoothDeviceClient::Observer> observers_; | 459   ObserverList<BluetoothDeviceClient::Observer> observers_; | 
| 459 | 460 | 
| 460   DISALLOW_COPY_AND_ASSIGN(BluetoothDeviceClientImpl); | 461   DISALLOW_COPY_AND_ASSIGN(BluetoothDeviceClientImpl); | 
| 461 }; | 462 }; | 
| 462 | 463 | 
| 463 // The BluetoothDeviceClient implementation used on Linux desktop, which does | 464 // The BluetoothDeviceClient implementation used on Linux desktop, which does | 
| 464 // nothing. | 465 // nothing. | 
| 465 class BluetoothDeviceClientStubImpl : public BluetoothDeviceClient { | 466 class BluetoothDeviceClientStubImpl : public BluetoothDeviceClient { | 
| 466  public: | 467  public: | 
|  | 468   struct Properties : public BluetoothDeviceClient::Properties { | 
|  | 469     explicit Properties(const PropertyChangedCallback& callback) | 
|  | 470         : BluetoothDeviceClient::Properties(NULL, callback) { | 
|  | 471     } | 
|  | 472 | 
|  | 473     virtual ~Properties() { | 
|  | 474     } | 
|  | 475 | 
|  | 476     virtual void Get(dbus::PropertyBase* property, | 
|  | 477                      dbus::PropertySet::GetCallback callback) OVERRIDE { | 
|  | 478       VLOG(1) << "Get " << property->name(); | 
|  | 479       callback.Run(false); | 
|  | 480     } | 
|  | 481 | 
|  | 482     virtual void GetAll() OVERRIDE { | 
|  | 483       VLOG(1) << "GetAll"; | 
|  | 484     } | 
|  | 485 | 
|  | 486     virtual void Set(dbus::PropertyBase *property, | 
|  | 487                      dbus::PropertySet::SetCallback callback) OVERRIDE { | 
|  | 488       VLOG(1) << "Set " << property->name(); | 
|  | 489       callback.Run(false); | 
|  | 490     } | 
|  | 491   }; | 
|  | 492 | 
|  | 493   BluetoothDeviceClientStubImpl() { | 
|  | 494     dbus::ObjectPath dev0("/fake/hci0/dev0"); | 
|  | 495 | 
|  | 496     Properties* properties = new Properties(base::Bind( | 
|  | 497         &BluetoothDeviceClientStubImpl::OnPropertyChanged, | 
|  | 498         base::Unretained(this), | 
|  | 499         dev0)); | 
|  | 500     properties->address.ReplaceValue("00:11:22:33:44:55"); | 
|  | 501     properties->name.ReplaceValue("Fake Device"); | 
|  | 502     properties->paired.ReplaceValue(true); | 
|  | 503     properties->trusted.ReplaceValue(true); | 
|  | 504 | 
|  | 505     properties_map_[dev0] = properties; | 
|  | 506   } | 
|  | 507 | 
|  | 508   virtual ~BluetoothDeviceClientStubImpl() { | 
|  | 509     // Clean up Properties structures | 
|  | 510     STLDeleteValues(&properties_map_); | 
|  | 511   } | 
|  | 512 | 
| 467   // BluetoothDeviceClient override. | 513   // BluetoothDeviceClient override. | 
| 468   virtual void AddObserver(Observer* observer) OVERRIDE { | 514   virtual void AddObserver(Observer* observer) OVERRIDE { | 
|  | 515     observers_.AddObserver(observer); | 
| 469   } | 516   } | 
| 470 | 517 | 
| 471   // BluetoothDeviceClient override. | 518   // BluetoothDeviceClient override. | 
| 472   virtual void RemoveObserver(Observer* observer) OVERRIDE { | 519   virtual void RemoveObserver(Observer* observer) OVERRIDE { | 
|  | 520     observers_.RemoveObserver(observer); | 
| 473   } | 521   } | 
| 474 | 522 | 
| 475   // BluetoothDeviceClient override. | 523   // BluetoothDeviceClient override. | 
| 476   virtual Properties* GetProperties(const dbus::ObjectPath& object_path) | 524   virtual Properties* GetProperties(const dbus::ObjectPath& object_path) | 
| 477       OVERRIDE { | 525       OVERRIDE { | 
| 478     VLOG(1) << "GetProperties: " << object_path.value(); | 526     VLOG(1) << "GetProperties: " << object_path.value(); | 
|  | 527     PropertiesMap::iterator iter = properties_map_.find(object_path); | 
|  | 528     if (iter != properties_map_.end()) | 
|  | 529       return iter->second; | 
| 479     return NULL; | 530     return NULL; | 
| 480   } | 531   } | 
| 481 | 532 | 
| 482   // BluetoothDeviceClient override. | 533   // BluetoothDeviceClient override. | 
| 483   virtual void DiscoverServices(const dbus::ObjectPath& object_path, | 534   virtual void DiscoverServices(const dbus::ObjectPath& object_path, | 
| 484                                 const std::string& pattern, | 535                                 const std::string& pattern, | 
| 485                                 const ServicesCallback& callback) OVERRIDE { | 536                                 const ServicesCallback& callback) OVERRIDE { | 
| 486     VLOG(1) << "DiscoverServices: " << object_path.value() << " " << pattern; | 537     VLOG(1) << "DiscoverServices: " << object_path.value() << " " << pattern; | 
| 487 | 538 | 
| 488     ServiceMap services; | 539     ServiceMap services; | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 512   } | 563   } | 
| 513 | 564 | 
| 514   // BluetoothDeviceClient override. | 565   // BluetoothDeviceClient override. | 
| 515   virtual void RemoveNode(const dbus::ObjectPath& object_path, | 566   virtual void RemoveNode(const dbus::ObjectPath& object_path, | 
| 516                           const dbus::ObjectPath& node_path, | 567                           const dbus::ObjectPath& node_path, | 
| 517                           const DeviceCallback& callback) OVERRIDE { | 568                           const DeviceCallback& callback) OVERRIDE { | 
| 518     VLOG(1) << "RemoveNode: " << object_path.value() | 569     VLOG(1) << "RemoveNode: " << object_path.value() | 
| 519             << " " << node_path.value(); | 570             << " " << node_path.value(); | 
| 520     callback.Run(object_path, false); | 571     callback.Run(object_path, false); | 
| 521   } | 572   } | 
|  | 573 | 
|  | 574  private: | 
|  | 575   void OnPropertyChanged(dbus::ObjectPath object_path, | 
|  | 576                          const std::string& property_name) { | 
|  | 577     FOR_EACH_OBSERVER(BluetoothDeviceClient::Observer, observers_, | 
|  | 578                       DevicePropertyChanged(object_path, property_name)); | 
|  | 579   } | 
|  | 580 | 
|  | 581   // List of observers interested in event notifications from us. | 
|  | 582   ObserverList<Observer> observers_; | 
|  | 583 | 
|  | 584   // Static properties we typedef. | 
|  | 585   typedef std::map<const dbus::ObjectPath, Properties *> PropertiesMap; | 
|  | 586   PropertiesMap properties_map_; | 
| 522 }; | 587 }; | 
| 523 | 588 | 
| 524 BluetoothDeviceClient::BluetoothDeviceClient() { | 589 BluetoothDeviceClient::BluetoothDeviceClient() { | 
| 525 } | 590 } | 
| 526 | 591 | 
| 527 BluetoothDeviceClient::~BluetoothDeviceClient() { | 592 BluetoothDeviceClient::~BluetoothDeviceClient() { | 
| 528 } | 593 } | 
| 529 | 594 | 
| 530 BluetoothDeviceClient* BluetoothDeviceClient::Create( | 595 BluetoothDeviceClient* BluetoothDeviceClient::Create( | 
| 531     DBusClientImplementationType type, | 596     DBusClientImplementationType type, | 
| 532     dbus::Bus* bus, | 597     dbus::Bus* bus, | 
| 533     BluetoothAdapterClient* adapter_client) { | 598     BluetoothAdapterClient* adapter_client) { | 
| 534   if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 599   if (type == REAL_DBUS_CLIENT_IMPLEMENTATION) | 
| 535     return new BluetoothDeviceClientImpl(bus, adapter_client); | 600     return new BluetoothDeviceClientImpl(bus, adapter_client); | 
| 536   DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 601   DCHECK_EQ(STUB_DBUS_CLIENT_IMPLEMENTATION, type); | 
| 537   return new BluetoothDeviceClientStubImpl(); | 602   return new BluetoothDeviceClientStubImpl(); | 
| 538 } | 603 } | 
| 539 | 604 | 
| 540 }  // namespace chromeos | 605 }  // namespace chromeos | 
| OLD | NEW | 
|---|