summaryrefslogtreecommitdiffstats
path: root/chromeos/dbus/nfc_tag_client.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromeos/dbus/nfc_tag_client.h')
-rw-r--r--chromeos/dbus/nfc_tag_client.h130
1 files changed, 130 insertions, 0 deletions
diff --git a/chromeos/dbus/nfc_tag_client.h b/chromeos/dbus/nfc_tag_client.h
new file mode 100644
index 0000000..5d7e1e0
--- /dev/null
+++ b/chromeos/dbus/nfc_tag_client.h
@@ -0,0 +1,130 @@
+// 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_TAG_CLIENT_H_
+#define CHROMEOS_DBUS_NFC_TAG_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;
+
+// NfcTagClient is used to communicate with objects representing remote NFC
+// tags.
+class CHROMEOS_EXPORT NfcTagClient : public DBusClient {
+ public:
+ // Structure of properties associated with an NFC tag.
+ struct Properties : public NfcPropertySet {
+ // The NFC tag type. Possible values are "Type 1", "Type 2", "Type 3",
+ // and "Type 4".
+ dbus::Property<std::string> type;
+
+ // The NFC tag radio protocol. Possible values are "Felica", "MIFARE",
+ // "Jewel", "ISO-DEP", and "NFC-DEP".
+ dbus::Property<std::string> protocol;
+
+ // List of object paths for NDEF Records associated with the NFC tag.
+ dbus::Property<std::vector<dbus::ObjectPath> > records;
+
+ // The current status of the tag's read mode.
+ dbus::Property<bool> read_only;
+
+ Properties(dbus::ObjectProxy* object_proxy,
+ const PropertyChangedCallback& callback);
+ virtual ~Properties();
+ };
+
+ // Interface for observing changes from a remote NFC tag.
+ class Observer {
+ public:
+ virtual ~Observer() {}
+
+ // Called when a remote NFC tag with the object path |object_path| is added
+ // to the set of known tags associated with the adapter with object path
+ // |adapter_path|.
+ virtual void TagFound(const dbus::ObjectPath& object_path,
+ const dbus::ObjectPath& adapter_path) {}
+
+ // Called when a remote NFC tag with the object path |object_path| is
+ // removed from the set of known tags associated with the adapter with the
+ // object path |adapter_path|.
+ virtual void TagLost(const dbus::ObjectPath& object_path,
+ const dbus::ObjectPath& adapter_path) {}
+
+ // Called when the tag property with the name |property_name| on tag with
+ // object path |object_path| has acquired a new value.
+ virtual void TagPropertyChanged(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 ~NfcTagClient();
+
+ // Adds and removes observers for events on all remote NFC tags. Check the
+ // |object_path| parameter of observer methods to determine which tag is
+ // issuing the event.
+ virtual void AddObserver(Observer* observer) = 0;
+ virtual void RemoveObserver(Observer* observer) = 0;
+
+ // Obtain the properties for the NFC tag 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 tag 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 written to the tag. 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 Write(
+ const dbus::ObjectPath& object_path,
+ const RecordAttributes& attributes,
+ const base::Closure& callback,
+ const nfc_client_helpers::ErrorCallback& error_callback) = 0;
+
+ // Creates the instance.
+ static NfcTagClient* Create(DBusClientImplementationType type,
+ NfcAdapterClient* adapter_client);
+
+ protected:
+ friend class NfcClientTest;
+
+ NfcTagClient();
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(NfcTagClient);
+};
+
+} // namespace chromeos
+
+#endif // CHROMEOS_DBUS_NFC_TAG_CLIENT_H_