public class BrickletNFCRFID extends Device
Modifier and Type | Class and Description |
---|---|
class |
BrickletNFCRFID.State |
static interface |
BrickletNFCRFID.StateChangedListener
This listener is called if the state of the NFC/RFID Bricklet changes.
|
class |
BrickletNFCRFID.TagID |
Device.Identity
Constructor and Description |
---|
BrickletNFCRFID(String uid,
IPConnection ipcon)
Creates an object with the unique device ID \c uid.
|
Modifier and Type | Method and Description |
---|---|
void |
addStateChangedListener(BrickletNFCRFID.StateChangedListener listener)
Adds a StateChanged listener.
|
void |
authenticateMifareClassicPage(int page,
short keyNumber,
short[] key)
Mifare Classic tags use authentication.
|
Device.Identity |
getIdentity()
Returns the UID, the UID where the Bricklet is connected to,
the position, the hardware and firmware version as well as the
device identifier.
|
short[] |
getPage()
Returns 16 bytes of data from an internal buffer.
|
BrickletNFCRFID.State |
getState()
Returns the current state of the NFC/RFID Bricklet.
|
BrickletNFCRFID.TagID |
getTagID()
Returns the tag type, tag ID and the length of the tag ID
(4 or 7 bytes are possible length).
|
void |
removeStateChangedListener(BrickletNFCRFID.StateChangedListener listener)
Removes a StateChanged listener.
|
void |
requestPage(int page)
Reads 16 bytes starting from the given page and stores them into a buffer.
|
void |
requestTagID(short tagType)
To read or write a tag that is in proximity of the NFC/RFID Bricklet you
first have to call this function with the expected tag type as parameter.
|
void |
writePage(int page,
short[] data)
Writes 16 bytes starting from the given page.
|
getAPIVersion, getResponseExpected, setResponseExpected, setResponseExpectedAll
public static final int DEVICE_IDENTIFIER
public static final String DEVICE_DISPLAY_NAME
public static final byte FUNCTION_REQUEST_TAG_ID
public static final byte FUNCTION_GET_TAG_ID
public static final byte FUNCTION_GET_STATE
public static final byte FUNCTION_AUTHENTICATE_MIFARE_CLASSIC_PAGE
public static final byte FUNCTION_WRITE_PAGE
public static final byte FUNCTION_REQUEST_PAGE
public static final byte FUNCTION_GET_PAGE
public static final byte FUNCTION_GET_IDENTITY
public static final short TAG_TYPE_MIFARE_CLASSIC
public static final short TAG_TYPE_TYPE1
public static final short TAG_TYPE_TYPE2
public static final short STATE_INITIALIZATION
public static final short STATE_IDLE
public static final short STATE_ERROR
public static final short STATE_REQUEST_TAG_ID
public static final short STATE_REQUEST_TAG_ID_READY
public static final short STATE_REQUEST_TAG_ID_ERROR
public static final short STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE
public static final short STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE_READY
public static final short STATE_AUTHENTICATING_MIFARE_CLASSIC_PAGE_ERROR
public static final short STATE_WRITE_PAGE
public static final short STATE_WRITE_PAGE_READY
public static final short STATE_WRITE_PAGE_ERROR
public static final short STATE_REQUEST_PAGE
public static final short STATE_REQUEST_PAGE_READY
public static final short STATE_REQUEST_PAGE_ERROR
public static final short KEY_A
public static final short KEY_B
public BrickletNFCRFID(String uid, IPConnection ipcon)
public void requestTagID(short tagType) throws TinkerforgeException
requestTagID(short)
the NFC/RFID Bricklet will try to read
the tag ID from the tag. After this process is done the state will change.
You can either register the BrickletNFCRFID.StateChangedListener
listener or you can poll
getState()
to find out about the state change.
If the state changes to *RequestTagIDError* it means that either there was
no tag present or that the tag is of an incompatible type. If the state
changes to *RequestTagIDReady* it means that a compatible tag was found
and that the tag ID could be read out. You can now get the tag ID by
calling getTagID()
.
If two tags are in the proximity of the NFC/RFID Bricklet, this
function will cycle through the tags. To select a specific tag you have
to call requestTagID(short)
until the correct tag id is found.
In case of any *Error* state the selection is lost and you have to
start again by calling requestTagID(short)
.TinkerforgeException
public BrickletNFCRFID.TagID getTagID() throws TinkerforgeException
requestTagID(short)
.
To get the tag ID of a tag the approach is as follows:
1. Call requestTagID(short)
2. Wait for state to change to *RequestTagIDReady* (see getState()
or
BrickletNFCRFID.StateChangedListener
listener)
3. Call getTagID()
TinkerforgeException
public BrickletNFCRFID.State getState() throws TinkerforgeException
requestPage(int)
, the state will change to
*RequestPage* until the reading of the page is finished. Then it will change
to either *RequestPageReady* if it worked or to *RequestPageError* if it
didn't. If the request worked you can get the page by calling getPage()
.
The same approach is used analogously for the other API functions.TinkerforgeException
public void authenticateMifareClassicPage(int page, short keyNumber, short[] key) throws TinkerforgeException
requestTagID(short)
2. Wait for state to change to *RequestTagIDReady* (see getState()
or BrickletNFCRFID.StateChangedListener
listener)
3. If looking for a specific tag then call getTagID()
and check if the
expected tag was found, if it was not found go back to step 1
4. Call authenticateMifareClassicPage(int, short, short[])
with page and key for the page
5. Wait for state to change to *AuthenticatingMifareClassicPageReady* (see
getState()
or BrickletNFCRFID.StateChangedListener
listener)
6. Call requestPage(int)
or writePage(int, short[])
to read/write pageTinkerforgeException
public void writePage(int page, short[] data) throws TinkerforgeException
requestTagID(short)
2. Wait for state to change to *RequestTagIDReady* (see getState()
or
BrickletNFCRFID.StateChangedListener
listener)
3. If looking for a specific tag then call getTagID()
and check if the
expected tag was found, if it was not found got back to step 1
4. Call writePage(int, short[])
with page number and data
5. Wait for state to change to *WritePageReady* (see getState()
or
BrickletNFCRFID.StateChangedListener
listener)
If you use a Mifare Classic tag you have to authenticate a page before you
can write to it. See authenticateMifareClassicPage(int, short, short[])
.TinkerforgeException
public void requestPage(int page) throws TinkerforgeException
getPage()
.
How many pages are read depends on the tag type. The page sizes are
as follows:
* Mifare Classic page size: 16 byte (one page is read)
* NFC Forum Type 1 page size: 8 byte (two pages are read)
* NFC Forum Type 2 page size: 4 byte (four pages are read)
The general approach for reading a tag is as follows:
1. Call requestTagID(short)
2. Wait for state to change to *RequestTagIDReady* (see getState()
or BrickletNFCRFID.StateChangedListener
listener)
3. If looking for a specific tag then call getTagID()
and check if the
expected tag was found, if it was not found got back to step 1
4. Call requestPage(int)
with page number
5. Wait for state to change to *RequestPageReady* (see getState()
or BrickletNFCRFID.StateChangedListener
listener)
6. Call getPage()
to retrieve the page from the buffer
If you use a Mifare Classic tag you have to authenticate a page before you
can read it. See authenticateMifareClassicPage(int, short, short[])
.TinkerforgeException
public short[] getPage() throws TinkerforgeException
requestPage(int)
beforehand.TinkerforgeException
public Device.Identity getIdentity() throws TinkerforgeException
getIdentity
in class Device
TinkerforgeException
public void addStateChangedListener(BrickletNFCRFID.StateChangedListener listener)
public void removeStateChangedListener(BrickletNFCRFID.StateChangedListener listener)
Copyright © 2022 Tinkerforge GmbH. All rights reserved.