Index: device/nfc/nfc_adapter_chromeos.cc |
diff --git a/device/nfc/nfc_adapter_chromeos.cc b/device/nfc/nfc_adapter_chromeos.cc |
deleted file mode 100644 |
index 374e8ac83e94901efc4e87b28e7899f58c846e73..0000000000000000000000000000000000000000 |
--- a/device/nfc/nfc_adapter_chromeos.cc |
+++ /dev/null |
@@ -1,396 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "device/nfc/nfc_adapter_chromeos.h" |
- |
-#include <vector> |
- |
-#include "base/callback.h" |
-#include "base/logging.h" |
-#include "chromeos/dbus/dbus_thread_manager.h" |
-#include "device/nfc/nfc_peer_chromeos.h" |
-#include "device/nfc/nfc_tag_chromeos.h" |
-#include "third_party/cros_system_api/dbus/service_constants.h" |
- |
-namespace chromeos { |
- |
-namespace { |
- |
-typedef std::vector<dbus::ObjectPath> ObjectPathVector; |
- |
-} // namespace |
- |
-NfcAdapterChromeOS::NfcAdapterChromeOS() |
- : weak_ptr_factory_(this) { |
- DBusThreadManager::Get()->GetNfcAdapterClient()->AddObserver(this); |
- DBusThreadManager::Get()->GetNfcDeviceClient()->AddObserver(this); |
- DBusThreadManager::Get()->GetNfcTagClient()->AddObserver(this); |
- |
- const ObjectPathVector& object_paths = |
- DBusThreadManager::Get()->GetNfcAdapterClient()->GetAdapters(); |
- if (!object_paths.empty()) { |
- VLOG(1) << object_paths.size() << " NFC adapter(s) available."; |
- SetAdapter(object_paths[0]); |
- } |
-} |
- |
-NfcAdapterChromeOS::~NfcAdapterChromeOS() { |
- DBusThreadManager::Get()->GetNfcAdapterClient()->RemoveObserver(this); |
- DBusThreadManager::Get()->GetNfcDeviceClient()->RemoveObserver(this); |
- DBusThreadManager::Get()->GetNfcTagClient()->RemoveObserver(this); |
-} |
- |
-void NfcAdapterChromeOS::AddObserver(NfcAdapter::Observer* observer) { |
- DCHECK(observer); |
- observers_.AddObserver(observer); |
-} |
- |
-void NfcAdapterChromeOS::RemoveObserver(NfcAdapter::Observer* observer) { |
- DCHECK(observer); |
- observers_.RemoveObserver(observer); |
-} |
- |
-bool NfcAdapterChromeOS::IsPresent() const { |
- return !object_path_.value().empty(); |
-} |
- |
-bool NfcAdapterChromeOS::IsPowered() const { |
- if (!IsPresent()) |
- return false; |
- return DBusThreadManager::Get()->GetNfcAdapterClient()-> |
- GetProperties(object_path_)->powered.value(); |
-} |
- |
-bool NfcAdapterChromeOS::IsPolling() const { |
- if (!IsPresent()) |
- return false; |
- return DBusThreadManager::Get()->GetNfcAdapterClient()-> |
- GetProperties(object_path_)->polling.value(); |
-} |
- |
-bool NfcAdapterChromeOS::IsInitialized() const { |
- return true; |
-} |
- |
-void NfcAdapterChromeOS::SetPowered(bool powered, |
- const base::Closure& callback, |
- const ErrorCallback& error_callback) { |
- if (!IsPresent()) { |
- LOG(WARNING) << "Adapter not present. Cannot power up the antenna."; |
- error_callback.Run(); |
- return; |
- } |
- DBusThreadManager::Get()->GetNfcAdapterClient()-> |
- GetProperties(object_path_)->powered.Set( |
- powered, |
- base::Bind(&NfcAdapterChromeOS::OnSetPowered, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback, |
- error_callback)); |
-} |
- |
-void NfcAdapterChromeOS::StartPolling(const base::Closure& callback, |
- const ErrorCallback& error_callback) { |
- // Always poll in "Initiator" mode. |
- DBusThreadManager::Get()->GetNfcAdapterClient()-> |
- StartPollLoop(object_path_, |
- nfc_adapter::kModeInitiator, |
- base::Bind(&NfcAdapterChromeOS::OnStartPolling, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback), |
- base::Bind(&NfcAdapterChromeOS::OnStartPollingError, |
- weak_ptr_factory_.GetWeakPtr(), |
- error_callback)); |
-} |
- |
-void NfcAdapterChromeOS::StopPolling(const base::Closure& callback, |
- const ErrorCallback& error_callback) { |
- DBusThreadManager::Get()->GetNfcAdapterClient()-> |
- StopPollLoop(object_path_, |
- base::Bind(&NfcAdapterChromeOS::OnStopPolling, |
- weak_ptr_factory_.GetWeakPtr(), |
- callback), |
- base::Bind(&NfcAdapterChromeOS::OnStopPollingError, |
- weak_ptr_factory_.GetWeakPtr(), |
- error_callback)); |
-} |
- |
-void NfcAdapterChromeOS::AdapterAdded(const dbus::ObjectPath& object_path) { |
- // Set the adapter to the newly added adapter only if no adapter is present. |
- if (!IsPresent()) |
- SetAdapter(object_path); |
-} |
- |
-void NfcAdapterChromeOS::AdapterRemoved(const dbus::ObjectPath& object_path) { |
- if (object_path != object_path_) |
- return; |
- |
- // The current adapter was removed, so mark us as not present and clean up |
- // peers and tags. |
- RemoveAdapter(); |
- |
- // There may still be other adapters present on the system. Set the next |
- // available adapter as the current one. |
- const ObjectPathVector& object_paths = |
- DBusThreadManager::Get()->GetNfcAdapterClient()->GetAdapters(); |
- for (ObjectPathVector::const_iterator iter = |
- object_paths.begin(); |
- iter != object_paths.end(); ++iter) { |
- // The removed object will still be available until the call to |
- // AdapterRemoved returns. Make sure that we are not re-adding the |
- // removed adapter. |
- if (*iter == object_path) |
- continue; |
- SetAdapter(*iter); |
- } |
-} |
- |
-void NfcAdapterChromeOS::AdapterPropertyChanged( |
- const dbus::ObjectPath& object_path, |
- const std::string& property_name) { |
- if (object_path != object_path_) |
- return; |
- NfcAdapterClient::Properties* properties = |
- DBusThreadManager::Get()->GetNfcAdapterClient()-> |
- GetProperties(object_path_); |
- if (property_name == properties->powered.name()) |
- PoweredChanged(properties->powered.value()); |
- else if (property_name == properties->polling.name()) |
- PollingChanged(properties->polling.value()); |
-} |
- |
-void NfcAdapterChromeOS::DeviceAdded(const dbus::ObjectPath& object_path) { |
- if (!IsPresent()) |
- return; |
- |
- if (GetPeer(object_path.value())) |
- return; |
- |
- VLOG(1) << "NFC device found: " << object_path.value(); |
- |
- // Check to see if the device belongs to this adapter. |
- const ObjectPathVector& devices = |
- DBusThreadManager::Get()->GetNfcDeviceClient()-> |
- GetDevicesForAdapter(object_path_); |
- bool device_found = false; |
- for (ObjectPathVector::const_iterator iter = devices.begin(); |
- iter != devices.end(); ++iter) { |
- if (*iter == object_path) { |
- device_found = true; |
- break; |
- } |
- } |
- if (!device_found) { |
- VLOG(1) << "Found peer device does not belong to the current adapter."; |
- return; |
- } |
- |
- // Create the peer object. |
- NfcPeerChromeOS* peer_chromeos = new NfcPeerChromeOS(object_path); |
- SetPeer(object_path.value(), peer_chromeos); |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, |
- PeerFound(this, peer_chromeos)); |
-} |
- |
-void NfcAdapterChromeOS::DeviceRemoved(const dbus::ObjectPath& object_path) { |
- VLOG(1) << "NFC device lost: " << object_path.value(); |
- device::NfcPeer* peer = RemovePeer(object_path.value()); |
- if (!peer) { |
- VLOG(1) << "Removed peer device does not belong to the current adapter."; |
- return; |
- } |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, PeerLost(this, peer)); |
- delete peer; |
-} |
- |
-void NfcAdapterChromeOS::TagAdded(const dbus::ObjectPath& object_path) { |
- if (!IsPresent()) |
- return; |
- |
- if (GetTag(object_path.value())) |
- return; |
- |
- VLOG(1) << "NFC tag found: " << object_path.value(); |
- |
- // Check to see if the tag belongs to this adapter. |
- const std::vector<dbus::ObjectPath>& tags = |
- DBusThreadManager::Get()->GetNfcTagClient()-> |
- GetTagsForAdapter(object_path_); |
- bool tag_found = false; |
- for (std::vector<dbus::ObjectPath>::const_iterator iter = tags.begin(); |
- iter != tags.end(); ++iter) { |
- if (*iter == object_path) { |
- tag_found = true; |
- break; |
- } |
- } |
- if (!tag_found) { |
- VLOG(1) << "Found tag does not belong to the current adapter."; |
- return; |
- } |
- |
- // Create the tag object. |
- NfcTagChromeOS* tag_chromeos = new NfcTagChromeOS(object_path); |
- SetTag(object_path.value(), tag_chromeos); |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, |
- TagFound(this, tag_chromeos)); |
-} |
- |
-void NfcAdapterChromeOS::TagRemoved(const dbus::ObjectPath& object_path) { |
- VLOG(1) << "NFC tag lost : " << object_path.value(); |
- device::NfcTag* tag = RemoveTag(object_path.value()); |
- if (!tag) { |
- VLOG(1) << "Removed tag does not belong to the current adapter."; |
- return; |
- } |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, TagLost(this, tag)); |
- delete tag; |
-} |
- |
-void NfcAdapterChromeOS::SetAdapter(const dbus::ObjectPath& object_path) { |
- DCHECK(!IsPresent()); |
- object_path_ = object_path; |
- VLOG(1) << "Using NFC adapter: " << object_path.value(); |
- |
- NfcAdapterClient::Properties* properties = |
- DBusThreadManager::Get()->GetNfcAdapterClient()-> |
- GetProperties(object_path_); |
- PresentChanged(true); |
- if (properties->powered.value()) |
- PoweredChanged(true); |
- if (properties->polling.value()) |
- PollingChanged(true); |
- |
- // Create peer objects for peers that were added before the adapter was set. |
- const ObjectPathVector& devices = |
- DBusThreadManager::Get()->GetNfcDeviceClient()-> |
- GetDevicesForAdapter(object_path_); |
- for (ObjectPathVector::const_iterator iter = devices.begin(); |
- iter != devices.end(); ++iter) { |
- const dbus::ObjectPath& object_path = *iter; |
- if (GetPeer(object_path.value())) |
- continue; |
- NfcPeerChromeOS* peer_chromeos = new NfcPeerChromeOS(object_path); |
- SetPeer(object_path.value(), peer_chromeos); |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, |
- PeerFound(this, peer_chromeos)); |
- } |
- |
- // Create tag objects for tags that were added before the adapter was set. |
- const std::vector<dbus::ObjectPath>& tags = |
- DBusThreadManager::Get()->GetNfcTagClient()-> |
- GetTagsForAdapter(object_path_); |
- for (std::vector<dbus::ObjectPath>::const_iterator iter = tags.begin(); |
- iter != tags.end(); ++iter) { |
- const dbus::ObjectPath& object_path = *iter; |
- if (GetTag(object_path.value())) |
- continue; |
- NfcTagChromeOS* tag_chromeos = new NfcTagChromeOS(object_path); |
- SetTag(object_path.value(), tag_chromeos); |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, |
- TagFound(this, tag_chromeos)); |
- } |
-} |
- |
-void NfcAdapterChromeOS::RemoveAdapter() { |
- DCHECK(IsPresent()); |
- VLOG(1) << "NFC adapter removed: " << object_path_.value(); |
- |
- NfcAdapterClient::Properties* properties = |
- DBusThreadManager::Get()->GetNfcAdapterClient()-> |
- GetProperties(object_path_); |
- if (properties->powered.value()) |
- PoweredChanged(false); |
- if (properties->polling.value()) |
- PollingChanged(false); |
- |
- // Copy the tags and peers here and clear the original containers so that |
- // GetPeers and GetTags return no values during the *Removed observer calls. |
- PeerList peers; |
- TagList tags; |
- GetPeers(&peers); |
- GetTags(&tags); |
- ClearPeers(); |
- ClearTags(); |
- |
- for (PeerList::iterator iter = peers.begin(); |
- iter != peers.end(); ++iter) { |
- device::NfcPeer* peer = *iter; |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, |
- PeerLost(this, peer)); |
- delete peer; |
- } |
- for (TagList::iterator iter = tags.begin(); |
- iter != tags.end(); ++iter) { |
- device::NfcTag* tag = *iter; |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, |
- TagLost(this, tag)); |
- delete tag; |
- } |
- |
- object_path_ = dbus::ObjectPath(""); |
- PresentChanged(false); |
-} |
- |
-void NfcAdapterChromeOS::PoweredChanged(bool powered) { |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, |
- AdapterPoweredChanged(this, powered)); |
-} |
- |
-void NfcAdapterChromeOS::PollingChanged(bool polling) { |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, |
- AdapterPollingChanged(this, polling)); |
-} |
- |
-void NfcAdapterChromeOS::PresentChanged(bool present) { |
- FOR_EACH_OBSERVER(NfcAdapter::Observer, observers_, |
- AdapterPresentChanged(this, present)); |
-} |
- |
-void NfcAdapterChromeOS::OnSetPowered(const base::Closure& callback, |
- const ErrorCallback& error_callback, |
- bool success) { |
- VLOG(1) << "NfcAdapterChromeOS::OnSetPowered result: " << success; |
- if (success) { |
- // TODO(armansito): There is a bug in neard 0.13 that causes it not to emit |
- // a signal when the "Powered" property changes. Sync the properties here, |
- // but remove it in neard 0.14. |
- if (IsPresent()) { |
- DBusThreadManager::Get()->GetNfcAdapterClient()-> |
- GetProperties(object_path_)->GetAll(); |
- } |
- callback.Run(); |
- } else { |
- LOG(ERROR) << "Failed to power up the NFC antenna radio."; |
- error_callback.Run(); |
- } |
-} |
- |
-void NfcAdapterChromeOS::OnStartPolling(const base::Closure& callback) { |
- callback.Run(); |
-} |
- |
-void NfcAdapterChromeOS::OnStartPollingError( |
- const ErrorCallback& error_callback, |
- const std::string& error_name, |
- const std::string& error_message) { |
- LOG(ERROR) << object_path_.value() << ": Failed to start polling: " |
- << error_name << ": " << error_message; |
- error_callback.Run(); |
-} |
- |
-void NfcAdapterChromeOS::OnStopPolling(const base::Closure& callback) { |
- callback.Run(); |
-} |
- |
-void NfcAdapterChromeOS::OnStopPollingError( |
- const ErrorCallback& error_callback, |
- const std::string& error_name, |
- const std::string& error_message) { |
- LOG(ERROR) << object_path_.value() << ": Failed to stop polling: " |
- << error_name << ": " << error_message; |
- error_callback.Run(); |
-} |
- |
-} // namespace chromeos |