11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file. 41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "chromeos/dbus/nfc_property_set.h" 61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/bind.h" 81e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "third_party/cros_system_api/dbus/service_constants.h" 91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 101e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace chromeos { 111e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 121e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)NfcPropertySet::NfcPropertySet(dbus::ObjectProxy* object_proxy, 131e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const std::string& interface, 141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) const PropertyChangedCallback& callback) 151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) : dbus::PropertySet(object_proxy, interface, callback) { 161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 18a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)NfcPropertySet::~NfcPropertySet() { 19a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 20a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void NfcPropertySet::ConnectSignals() { 221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) object_proxy()->ConnectToSignal( 231e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) interface(), 241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) nfc_common::kPropertyChangedSignal, 251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(&dbus::PropertySet::ChangedReceived, GetWeakPtr()), 261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(&dbus::PropertySet::ChangedConnected, GetWeakPtr())); 271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 29a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void NfcPropertySet::SetAllPropertiesReceivedCallback( 30a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const base::Closure& callback) { 31a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) on_get_all_callback_ = callback; 32a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 33a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void NfcPropertySet::Get(dbus::PropertyBase* property, 351e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetCallback callback) { 361e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) NOTREACHED() << "neard does not implement Get for properties."; 371e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 381e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 391e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void NfcPropertySet::GetAll() { 401e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) dbus::MethodCall method_call( 411e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) interface(), nfc_common::kGetProperties); 421e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) object_proxy()->CallMethod(&method_call, 431e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 441e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(&dbus::PropertySet::OnGetAll, 451e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetWeakPtr())); 461e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 471e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 48a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)void NfcPropertySet::OnGetAll(dbus::Response* response) { 49a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // First invoke the superclass implementation. If the call to GetAll was 50a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // successful, this will invoke the PropertyChangedCallback passed to the 51a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // constructor for each individual property received through the call and 52a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // make sure that the values of the properties have been cached. This way, 53a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // all received properties will be available when |on_get_all_callback_| is 54a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // run. 55a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) dbus::PropertySet::OnGetAll(response); 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (response) { 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) VLOG(2) << "NfcPropertySet::GetAll returned successfully."; 58a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) if (!on_get_all_callback_.is_null()) 59a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) on_get_all_callback_.Run(); 60a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) } 61a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 62a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 631e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void NfcPropertySet::Set(dbus::PropertyBase* property, 641e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) SetCallback callback) { 651e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) dbus::MethodCall method_call( 661e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) interface(), nfc_common::kSetProperty); 67a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) dbus::MessageWriter writer(&method_call); 68a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) writer.AppendString(property->name()); 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) property->AppendSetValueToWriter(&writer); 701e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) object_proxy()->CallMethod(&method_call, 711e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) dbus::ObjectProxy::TIMEOUT_USE_DEFAULT, 721e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) base::Bind(&dbus::PropertySet::OnSet, 731e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) GetWeakPtr(), 741e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) property, 751e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) callback)); 761e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 771e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 781e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)void NfcPropertySet::ChangedReceived(dbus::Signal* signal) { 791e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) DCHECK(signal); 801e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) dbus::MessageReader reader(signal); 811e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) UpdatePropertyFromReader(&reader); 821e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} 831e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) 841e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)} // namespace chromeos 85