1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chromeos/dbus/nfc_property_set.h" 6 7 #include "base/bind.h" 8 #include "third_party/cros_system_api/dbus/service_constants.h" 9 10 namespace chromeos { 11 12 NfcPropertySet::NfcPropertySet(dbus::ObjectProxy* object_proxy, 13 const std::string& interface, 14 const PropertyChangedCallback& callback) 15 : dbus::PropertySet(object_proxy, interface, callback) { 16 } 17 18 NfcPropertySet::~NfcPropertySet() { 19 } 20 21 void NfcPropertySet::ConnectSignals() { 22 object_proxy()->ConnectToSignal( 23 interface(), 24 nfc_common::kPropertyChangedSignal, 25 base::Bind(&dbus::PropertySet::ChangedReceived, GetWeakPtr()), 26 base::Bind(&dbus::PropertySet::ChangedConnected, GetWeakPtr())); 27 } 28 29 void NfcPropertySet::SetAllPropertiesReceivedCallback( 30 const base::Closure& callback) { 31 on_get_all_callback_ = callback; 32 } 33 34 void NfcPropertySet::Get(dbus::PropertyBase* property, 35 GetCallback callback) { 36 NOTREACHED() << "neard does not implement Get for properties."; 37 } 38 39 void NfcPropertySet::GetAll() { 40 dbus::MethodCall method_call( 41 interface(), nfc_common::kGetProperties); 42 object_proxy()->CallMethod(&method_call, 43 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 44 base::Bind(&dbus::PropertySet::OnGetAll, 45 GetWeakPtr())); 46 } 47 48 void NfcPropertySet::OnGetAll(dbus::Response* response) { 49 // First invoke the superclass implementation. If the call to GetAll was 50 // successful, this will invoke the PropertyChangedCallback passed to the 51 // constructor for each individual property received through the call and 52 // make sure that the values of the properties have been cached. This way, 53 // all received properties will be available when |on_get_all_callback_| is 54 // run. 55 dbus::PropertySet::OnGetAll(response); 56 if (response) { 57 VLOG(2) << "NfcPropertySet::GetAll returned successfully."; 58 if (!on_get_all_callback_.is_null()) 59 on_get_all_callback_.Run(); 60 } 61 } 62 63 void NfcPropertySet::Set(dbus::PropertyBase* property, 64 SetCallback callback) { 65 dbus::MethodCall method_call( 66 interface(), nfc_common::kSetProperty); 67 dbus::MessageWriter writer(&method_call); 68 writer.AppendString(property->name()); 69 property->AppendSetValueToWriter(&writer); 70 object_proxy()->CallMethod(&method_call, 71 dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 72 base::Bind(&dbus::PropertySet::OnSet, 73 GetWeakPtr(), 74 property, 75 callback)); 76 } 77 78 void NfcPropertySet::ChangedReceived(dbus::Signal* signal) { 79 DCHECK(signal); 80 dbus::MessageReader reader(signal); 81 UpdatePropertyFromReader(&reader); 82 } 83 84 } // namespace chromeos 85