TagTechnology.java revision f003e26df96067b4b136f0859012cb7ec3ed930f
16be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton/*
26be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * Copyright (C) 2010 The Android Open Source Project
36be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton *
46be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * Licensed under the Apache License, Version 2.0 (the "License");
56be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * you may not use this file except in compliance with the License.
66be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * You may obtain a copy of the License at
76be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton *
86be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton *      http://www.apache.org/licenses/LICENSE-2.0
96be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton *
106be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * Unless required by applicable law or agreed to in writing, software
116be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * distributed under the License is distributed on an "AS IS" BASIS,
126be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * See the License for the specific language governing permissions and
146be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton * limitations under the License.
156be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton */
166be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
174e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamiltonpackage android.nfc.tech;
186be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
196be655c768a82716612c00fdd156254d8dc00f42Jeff Hamiltonimport android.nfc.Tag;
206be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
213fcedf77286a078ebd7ac8c082365bd80703dfdcNick Pellyimport java.io.Closeable;
226be655c768a82716612c00fdd156254d8dc00f42Jeff Hamiltonimport java.io.IOException;
236be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
243fcedf77286a078ebd7ac8c082365bd80703dfdcNick Pellypublic interface TagTechnology extends Closeable {
256be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
26ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * This technology is an instance of {@link NfcA}.
27ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>Support for this technology type is mandatory.
284e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton     * @hide
296be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
306be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    public static final int NFC_A = 1;
316be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
326be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
33ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * This technology is an instance of {@link NfcB}.
34ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>Support for this technology type is mandatory.
354e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton     * @hide
366be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
376be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    public static final int NFC_B = 2;
386be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
396be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
40ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * This technology is an instance of {@link IsoDep}.
41ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>Support for this technology type is mandatory.
424e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton     * @hide
436be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
446be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    public static final int ISO_DEP = 3;
456be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
466be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
47ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * This technology is an instance of {@link NfcF}.
48ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>Support for this technology type is mandatory.
494e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton     * @hide
506be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
51641dd62155fd2eeddd93b2036154b13c05b70ba2Jeff Hamilton    public static final int NFC_F = 4;
526be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
536be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
54ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * This technology is an instance of {@link NfcV}.
55ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>Support for this technology type is mandatory.
564e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton     * @hide
576be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
58641dd62155fd2eeddd93b2036154b13c05b70ba2Jeff Hamilton    public static final int NFC_V = 5;
596be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
606be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
61ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * This technology is an instance of {@link Ndef}.
62ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>Support for this technology type is mandatory.
634e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton     * @hide
646be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
65641dd62155fd2eeddd93b2036154b13c05b70ba2Jeff Hamilton    public static final int NDEF = 6;
666be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
676be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
68ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * This technology is an instance of {@link NdefFormatable}.
69ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>Support for this technology type is mandatory.
704e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton     * @hide
7139f91ed5290e8b27c795f8aec181a6dd4431d317Martijn Coenen     */
72641dd62155fd2eeddd93b2036154b13c05b70ba2Jeff Hamilton    public static final int NDEF_FORMATABLE = 7;
7339f91ed5290e8b27c795f8aec181a6dd4431d317Martijn Coenen
7439f91ed5290e8b27c795f8aec181a6dd4431d317Martijn Coenen    /**
75ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * This technology is an instance of {@link MifareClassic}.
76ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>Support for this technology type is optional. If a stack doesn't support this technology
77ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * type tags using it must still be discovered and present the lower level radio interface
78ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * technologies in use.
794e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton     * @hide
806be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
81641dd62155fd2eeddd93b2036154b13c05b70ba2Jeff Hamilton    public static final int MIFARE_CLASSIC = 8;
826be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
836be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
84ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * This technology is an instance of {@link MifareUltralight}.
85ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>Support for this technology type is optional. If a stack doesn't support this technology
86ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * type tags using it must still be discovered and present the lower level radio interface
87ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * technologies in use.
884e21e1d21a877cce4db5ec8c5786604cc10f2d7eJeff Hamilton     * @hide
896be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
90641dd62155fd2eeddd93b2036154b13c05b70ba2Jeff Hamilton    public static final int MIFARE_ULTRALIGHT = 9;
916be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
926be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
93ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * Get the {@link Tag} object this technology came from.
946be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
956be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    public Tag getTag();
966be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
976be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
98ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * Opens a connection to the {@link Tag} enabling interactive commands. The command set
99ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * varies by the technology type.
100ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     *
101ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>This method blocks until the connection has been established.
102ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     *
103ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>A call to {@link #close} from another thread will cancel a blocked call and cause an
104ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * IOException to be thrown on the thread that is blocked.
105ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     *
106ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * @see #reconnect()
107ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * @see #close()
108ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * @throws IOException if the target is lost, or connect canceled
1096be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
1106be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    public void connect() throws IOException;
1116be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton
1126be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton    /**
113ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * Re-connect to the {@link Tag} associated with this connection. Reconnecting to a tag can be
114ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * used to reset the state of the tag itself.
115ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     *
116ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>This method blocks until the connection is re-established.
117ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     *
118ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>A call to {@link #close} from another thread will cancel a blocked call and cause an
119ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * IOException to be thrown on the thread that is blocked.
120ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     *
121ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * @see #connect()
122ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * @see #close()
1230d27f999f4b1ad51da11946800b40d2978fc6326Martijn Coenen     * @throws IOException
124f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly     * @hide
1250d27f999f4b1ad51da11946800b40d2978fc6326Martijn Coenen     */
1260d27f999f4b1ad51da11946800b40d2978fc6326Martijn Coenen    public void reconnect() throws IOException;
1270d27f999f4b1ad51da11946800b40d2978fc6326Martijn Coenen
1280d27f999f4b1ad51da11946800b40d2978fc6326Martijn Coenen    /**
129ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * Closes the connection to the {@link Tag}. This call is non-blocking and causes all blocking
130ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * operations such as {@link #connect} to be canceled and immediately throw
131ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * {@link java.io.IOException} on the thread that is blocked.
132ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     *
133ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * <p>
134ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * Once this method is called, this object cannot be re-used and should be discarded. Further
135ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * calls to {@link #connect} will fail.
136ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     *
137ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * @see #connect()
138ce3224cda51f946871daa1e11e3976e25c59e6faJeff Hamilton     * @see #reconnect()
1396be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton     */
1403fcedf77286a078ebd7ac8c082365bd80703dfdcNick Pelly    public void close() throws IOException;
141f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly
142f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly    /**
143f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly     * Helper to indicate if {@link #connect} has succeeded.
144f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly     * <p>
145f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly     * Does not cause RF activity, and does not block.
146f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly     * @return true if {@link #connect} has completed successfully and the {@link Tag} is believed
147f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly     * to be within range. Applications must still handle {@link java.io.IOException}
148f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly     * while using methods that require a connection in case the connection is lost after this
149f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly     * method returns.
150f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly     */
151f003e26df96067b4b136f0859012cb7ec3ed930fNick Pelly    public boolean isConnected();
1526be655c768a82716612c00fdd156254d8dc00f42Jeff Hamilton}
153