blob: 650f37b059987b8b22842b4402b37db0baf729e3 [file] [log] [blame]
// 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
};
// NFC protocols that a tag can support. A tag will usually support only one
// of these.
enum Protocol {
kProtocolFelica,
kProtocolIsoDep,
kProtocolJewel,
kProtocolMifare,
kProtocolNfcDep
};
// Interface for observing changes from NFC tags.
class Observer {
public:
virtual ~Observer() {}
// This method will be called when an NDEF message |message|, stored on the
// NFC tag |tag| has been read. Although NDEF is the most common record
// storage format for NFC tags, not all tags support it. This method won't
// be called if there are no records on an NDEF compliant tag or if the tag
// doesn't support NDEF.
virtual void RecordsReceived(NfcTag* tag, const NfcNdefMessage& message) {}
};
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;
protected:
NfcTag();
private:
DISALLOW_COPY_AND_ASSIGN(NfcTag);
};
} // namespace device
#endif // DEVICE_NFC_NFC_TAG_H_