| OLD | NEW |
| (Empty) |
| 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 #ifndef DEVICE_NFC_NFC_TAG_H_ | |
| 6 #define DEVICE_NFC_NFC_TAG_H_ | |
| 7 | |
| 8 #include "base/macros.h" | |
| 9 #include "device/nfc/nfc_tag_technology.h" | |
| 10 | |
| 11 namespace device { | |
| 12 | |
| 13 // NfcTag represents a remote NFC tag. An NFC tag is a passive NFC device, | |
| 14 // powered by the NFC field of the local adapter while it is in range. Tags | |
| 15 // can come in many forms, such as stickers, key fobs, or even embedded in a | |
| 16 // more sofisticated device. | |
| 17 // | |
| 18 // Tags can have a wide range of capabilities. Simple tags just offer | |
| 19 // read/write semantics, and contain some one time programmable areas to make | |
| 20 // read-only. More complex tags offer math operations and per-sector access | |
| 21 // control and authentication. The most sophisticated tags contain operating | |
| 22 // environments allowing complex interactions with the code executing on the | |
| 23 // tag. | |
| 24 // | |
| 25 // The NfcTag class facilitates possible interactions with a tag. The most | |
| 26 // common usage of a tag is to exchange NDEF messages, but different kinds of | |
| 27 // I/O can be performed using the NfcTagTechnology classes. | |
| 28 class NfcTag { | |
| 29 public: | |
| 30 // NFC tag types. | |
| 31 enum TagType { | |
| 32 kTagType1, | |
| 33 kTagType2, | |
| 34 kTagType3, | |
| 35 kTagType4, | |
| 36 kTagTypeUnknown, | |
| 37 }; | |
| 38 | |
| 39 // NFC protocols that a tag can support. A tag will usually support only one | |
| 40 // of these. | |
| 41 enum Protocol { | |
| 42 kProtocolFelica, | |
| 43 kProtocolIsoDep, | |
| 44 kProtocolJewel, | |
| 45 kProtocolMifare, | |
| 46 kProtocolNfcDep, | |
| 47 kProtocolUnknown | |
| 48 }; | |
| 49 | |
| 50 // Interface for observing changes from NFC tags. | |
| 51 class Observer { | |
| 52 public: | |
| 53 virtual ~Observer() {} | |
| 54 | |
| 55 // Called when the tag type has been determined. | |
| 56 virtual void TagTypeChanged(NfcTag* tag, TagType type) {} | |
| 57 | |
| 58 // Called when the write access to the tag has been determined or changed. | |
| 59 virtual void TagWritePermissionChanged(NfcTag* tag, bool read_only) {} | |
| 60 | |
| 61 // Called when the underlying NFC protocol has been determined. | |
| 62 virtual void TagSupportedProtocolChanged(NfcTag* tag, Protocol protocol) {} | |
| 63 | |
| 64 // Called when all initial values of the tag properties have been received | |
| 65 // from the remote tag and |tag| is ready to use. | |
| 66 virtual void TagReady(NfcTag* tag) {} | |
| 67 }; | |
| 68 | |
| 69 virtual ~NfcTag(); | |
| 70 | |
| 71 // Adds and removes observers for events on this NFC tag. If monitoring | |
| 72 // multiple tags, check the |tag| parameter of observer methods to determine | |
| 73 // which tag is issuing the event. | |
| 74 virtual void AddObserver(Observer* observer) = 0; | |
| 75 virtual void RemoveObserver(Observer* observer) = 0; | |
| 76 | |
| 77 // Returns the unique identifier assigned to this tag. | |
| 78 virtual std::string GetIdentifier() const = 0; | |
| 79 | |
| 80 // Returns the current tag's NFC forum specified "type". | |
| 81 virtual TagType GetType() const = 0; | |
| 82 | |
| 83 // Returns true, if this tag is read-only and cannot be written to. | |
| 84 virtual bool IsReadOnly() const = 0; | |
| 85 | |
| 86 // Returns the current tag's supported NFC protocol. | |
| 87 virtual Protocol GetSupportedProtocol() const = 0; | |
| 88 | |
| 89 // Returns a bitmask of the tag I/O technologies supported by this tag. | |
| 90 virtual NfcTagTechnology::TechnologyTypeMask | |
| 91 GetSupportedTechnologies() const = 0; | |
| 92 | |
| 93 // Returns true, if all tag properties have been received from the remote tag | |
| 94 // and this object is ready to use. | |
| 95 virtual bool IsReady() const = 0; | |
| 96 | |
| 97 // Returns a pointer to the NDEF technology object that allows I/O on NDEF | |
| 98 // records. If NDEF is not supported by this tag, operations that are | |
| 99 // performed on the returned instance may not succeed. Users can determine | |
| 100 // support by calling NfcTagTechnology::IsSupportedByTag. The returned | |
| 101 // instance is owned by this tag. | |
| 102 virtual NfcNdefTagTechnology* GetNdefTagTechnology() = 0; | |
| 103 | |
| 104 protected: | |
| 105 NfcTag(); | |
| 106 | |
| 107 private: | |
| 108 DISALLOW_COPY_AND_ASSIGN(NfcTag); | |
| 109 }; | |
| 110 | |
| 111 } // namespace device | |
| 112 | |
| 113 #endif // DEVICE_NFC_NFC_TAG_H_ | |
| OLD | NEW |