| // 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 DEVICE_NFC_NFC_TAG_H_ |
| #define DEVICE_NFC_NFC_TAG_H_ |
| |
| #include "device/nfc/nfc_tag_technology.h" |
| |
| namespace device { |
| |
| // NfcTag represents a remote NFC tag. An NFC tag is a passive NFC device, |
| // powered by the NFC field of the local adapter while it is in range. Tags |
| // can come in many forms, such as stickers, key fobs, or even embedded in a |
| // more sofisticated device. |
| // |
| // Tags can have a wide range of capabilities. Simple tags just offer |
| // read/write semantics, and contain some one time programmable areas to make |
| // read-only. More complex tags offer math operations and per-sector access |
| // control and authentication. The most sophisticated tags contain operating |
| // environments allowing complex interactions with the code executing on the |
| // tag. |
| // |
| // The NfcTag class facilitates possible interactions with a tag. The most |
| // common usage of a tag is to exchange NDEF messages, but different kinds of |
| // I/O can be performed using the NfcTagTechnology classes. |
| class NfcTag { |
| public: |
| // NFC tag types. |
| enum TagType { |
| kTagType1, |
| kTagType2, |
| kTagType3, |
| kTagType4, |
| kTagTypeUnknown, |
| }; |
| |
| // NFC protocols that a tag can support. A tag will usually support only one |
| // of these. |
| enum Protocol { |
| kProtocolFelica, |
| kProtocolIsoDep, |
| kProtocolJewel, |
| kProtocolMifare, |
| kProtocolNfcDep, |
| kProtocolUnknown |
| }; |
| |
| // Interface for observing changes from NFC tags. |
| class Observer { |
| public: |
| virtual ~Observer() {} |
| |
| // Called when the tag type has been determined. |
| virtual void TagTypeChanged(NfcTag* tag, TagType type) {} |
| |
| // Called when the write access to the tag has been determined or changed. |
| virtual void TagWritePermissionChanged(NfcTag* tag, bool read_only) {} |
| |
| // Called when the underlying NFC protocol has been determined. |
| virtual void TagSupportedProtocolChanged(NfcTag* tag, Protocol protocol) {} |
| |
| // Called when all initial values of the tag properties have been received |
| // from the remote tag and |tag| is ready to use. |
| virtual void TagReady(NfcTag* tag) {} |
| }; |
| |
| virtual ~NfcTag(); |
| |
| // Adds and removes observers for events on this NFC tag. If monitoring |
| // multiple tags, check the |tag| parameter of observer methods to determine |
| // which tag is issuing the event. |
| virtual void AddObserver(Observer* observer) = 0; |
| virtual void RemoveObserver(Observer* observer) = 0; |
| |
| // Returns the unique identifier assigned to this tag. |
| virtual std::string GetIdentifier() const = 0; |
| |
| // Returns the current tag's NFC forum specified "type". |
| virtual TagType GetType() const = 0; |
| |
| // Returns true, if this tag is read-only and cannot be written to. |
| virtual bool IsReadOnly() const = 0; |
| |
| // Returns the current tag's supported NFC protocol. |
| virtual Protocol GetSupportedProtocol() const = 0; |
| |
| // Returns a bitmask of the tag I/O technologies supported by this tag. |
| virtual NfcTagTechnology::TechnologyTypeMask |
| GetSupportedTechnologies() const = 0; |
| |
| // Returns true, if all tag properties have been received from the remote tag |
| // and this object is ready to use. |
| virtual bool IsReady() const = 0; |
| |
| // Returns a pointer to the NDEF technology object that allows I/O on NDEF |
| // records. If NDEF is not supported by this tag, operations that are |
| // performed on the returned instance may not succeed. Users can determine |
| // support by calling NfcTagTechnology::IsSupportedByTag. The returned |
| // instance is owned by this tag. |
| virtual NfcNdefTagTechnology* GetNdefTagTechnology() = 0; |
| |
| protected: |
| NfcTag(); |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(NfcTag); |
| }; |
| |
| } // namespace device |
| |
| #endif // DEVICE_NFC_NFC_TAG_H_ |