summaryrefslogtreecommitdiffstats
path: root/chromeos/dbus/nfc_device_client.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromeos/dbus/nfc_device_client.h')
-rw-r--r--chromeos/dbus/nfc_device_client.h119
1 files changed, 119 insertions, 0 deletions
diff --git a/chromeos/dbus/nfc_device_client.h b/chromeos/dbus/nfc_device_client.h
new file mode 100644
index 0000000..bbabf7e
--- /dev/null
+++ b/chromeos/dbus/nfc_device_client.h
@@ -0,0 +1,119 @@
+// 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.
+
+#ifndef CHROMEOS_DBUS_NFC_DEVICE_CLIENT_H_
+#define CHROMEOS_DBUS_NFC_DEVICE_CLIENT_H_
+
+#include <map>
+#include <string>
+#include <vector>
+
+#include "chromeos/chromeos_export.h"
+#include "chromeos/dbus/dbus_client.h"
+#include "chromeos/dbus/dbus_client_implementation_type.h"
+#include "chromeos/dbus/nfc_client_helpers.h"
+#include "chromeos/dbus/nfc_property_set.h"
+#include "dbus/object_path.h"
+#include "dbus/object_proxy.h"
+#include "dbus/property.h"
+
+namespace chromeos {
+
+class NfcAdapterClient;
+
+// NfcDeviceClient is used to communicate with objects representing remote NFC
+// adapters that can be communicated with.
+class CHROMEOS_EXPORT NfcDeviceClient : public DBusClient {
+ public:
+ // Structure of properties associated with an NFC device.
+ struct Properties : public NfcPropertySet {
+ // List of object paths for NDEF records associated with the NFC device.
+ dbus::Property<std::vector<dbus::ObjectPath> > records;
+
+ Properties(dbus::ObjectProxy* object_proxy,
+ const PropertyChangedCallback& callback);
+ virtual ~Properties();
+ };
+
+ // Interface for observing changes from a remote NFC device.
+ class Observer {
+ public:
+ virtual ~Observer() {}
+
+ // Called when a remote NFC device with the object |object_path| is added
+ // to the set of known devices associated with the adapter with object path
+ // |adapter_path|.
+ virtual void DeviceFound(const dbus::ObjectPath& object_path,
+ const dbus::ObjectPath& adapter_path) {}
+
+ // Called when a remote NFC device with the object path |object_path| is
+ // removed from the set of known devices associated with the adapter with
+ // object path |adapter_path|.
+ virtual void DeviceLost(const dbus::ObjectPath& object_path,
+ const dbus::ObjectPath& adapter_path) {}
+
+ // Called when the device property with the name |property_name| on device
+ // with object path |object_path| has acquired a new value.
+ virtual void DevicePropertyChanged(const dbus::ObjectPath& object_path,
+ const std::string& property_name) {}
+ };
+
+ // TODO(armansito): Move this typedef to the NFC Record client, once
+ // implemented.
+ typedef std::map<std::string, std::string> RecordAttributes;
+
+ virtual ~NfcDeviceClient();
+
+ // Adds and removes observers for events on all remote NFC devices. Check the
+ // |object_path| parameter of observer methods to determine which device is
+ // issuing the event.
+ virtual void AddObserver(Observer* observer) = 0;
+ virtual void RemoveObserver(Observer* observer) = 0;
+
+ // Obtain the properties for the NFC device with object path |object_path|;
+ // any values should be copied if needed.
+ virtual Properties* GetProperties(const dbus::ObjectPath& object_path) = 0;
+
+ // Creates an NDEF record for the NFC device with object path |object_path|
+ // using the parameters in |attributes|. |attributes| is a dictionary,
+ // containing the NFC Record properties which will be assigned to the
+ // resulting record object and pushed to the device. The properties are
+ // defined by the NFC Record interface (see namespace "nfc_record" in
+ // third_party/cros_system_api/dbus/service_constants.h and
+ // NfcRecordClient::Properties). |attributes| should at least contain a
+ // "Type" plus any other properties associated with that type. For example:
+ //
+ // {
+ // "Type": "Text",
+ // "Encoding": "UTF-8",
+ // "Language": "en",
+ // "Representation": "Chrome OS rulez!"
+ // },
+ // {
+ // "Type": "URI",
+ // "URI": "http://www.chromium.org"
+ // },
+ // etc.
+ virtual void Push(
+ const dbus::ObjectPath& object_path,
+ const RecordAttributes& attributes,
+ const base::Closure& callback,
+ const nfc_client_helpers::ErrorCallback& error_callback) = 0;
+
+ // Creates the instance.
+ static NfcDeviceClient* Create(DBusClientImplementationType type,
+ NfcAdapterClient* adapter_client);
+
+ protected:
+ friend class NfcClientTest;
+
+ NfcDeviceClient();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(NfcDeviceClient);
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_DBUS_NFC_DEVICE_CLIENT_H_