diff options
author | Martijn Coenen <maco@google.com> | 2011-06-09 16:57:49 +0200 |
---|---|---|
committer | Martijn Coenen <maco@google.com> | 2011-06-13 18:22:57 +0200 |
commit | 112fdf612db71a552fce063136bf2796df3b71ec (patch) | |
tree | 0a4cdb66b3a7fb851d5ed1ec224ffb524f4f16ef /core/java/android/nfc/tech | |
parent | 622d5441975fa16636d3304d42d27659af14cb49 (diff) | |
download | frameworks_base-112fdf612db71a552fce063136bf2796df3b71ec.zip frameworks_base-112fdf612db71a552fce063136bf2796df3b71ec.tar.gz frameworks_base-112fdf612db71a552fce063136bf2796df3b71ec.tar.bz2 |
Support for setting the NfcA transceive timeout (API).
Change-Id: I2c40fbc7e9101462afae18125feba30cf76ea5f2
Diffstat (limited to 'core/java/android/nfc/tech')
-rw-r--r-- | core/java/android/nfc/tech/IsoDep.java | 6 | ||||
-rw-r--r-- | core/java/android/nfc/tech/MifareClassic.java | 29 | ||||
-rw-r--r-- | core/java/android/nfc/tech/MifareUltralight.java | 30 | ||||
-rw-r--r-- | core/java/android/nfc/tech/NfcA.java | 29 | ||||
-rw-r--r-- | core/java/android/nfc/tech/NfcF.java | 6 |
5 files changed, 98 insertions, 2 deletions
diff --git a/core/java/android/nfc/tech/IsoDep.java b/core/java/android/nfc/tech/IsoDep.java index 38b2bbd..d02086f 100644 --- a/core/java/android/nfc/tech/IsoDep.java +++ b/core/java/android/nfc/tech/IsoDep.java @@ -16,6 +16,7 @@ package android.nfc.tech; +import android.nfc.ErrorCodes; import android.nfc.Tag; import android.os.Bundle; import android.os.RemoteException; @@ -90,7 +91,10 @@ public final class IsoDep extends BasicTagTechnology { */ public void setTimeout(int timeout) { try { - mTag.getTagService().setIsoDepTimeout(timeout); + int err = mTag.getTagService().setTimeout(TagTechnology.ISO_DEP, timeout); + if (err != ErrorCodes.SUCCESS) { + throw new IllegalArgumentException("The supplied timeout is not valid"); + } } catch (RemoteException e) { Log.e(TAG, "NFC service dead", e); } diff --git a/core/java/android/nfc/tech/MifareClassic.java b/core/java/android/nfc/tech/MifareClassic.java index c4b7718..5cafe5b 100644 --- a/core/java/android/nfc/tech/MifareClassic.java +++ b/core/java/android/nfc/tech/MifareClassic.java @@ -16,9 +16,11 @@ package android.nfc.tech; +import android.nfc.ErrorCodes; import android.nfc.Tag; import android.nfc.TagLostException; import android.os.RemoteException; +import android.util.Log; import java.io.IOException; import java.nio.ByteBuffer; @@ -69,6 +71,8 @@ import java.nio.ByteOrder; * require the {@link android.Manifest.permission#NFC} permission. */ public final class MifareClassic extends BasicTagTechnology { + private static final String TAG = "NFC"; + /** * The default factory key. */ @@ -568,6 +572,31 @@ public final class MifareClassic extends BasicTagTechnology { return transceive(data, true); } + /** + * Set the timeout of {@link #transceive} in milliseconds. + * <p>The timeout only applies to MifareUltralight {@link #transceive}, + * and is reset to a default value when {@link #close} is called. + * <p>Setting a longer timeout may be useful when performing + * transactions that require a long processing time on the tag + * such as key generation. + * + * <p class="note">Requires the {@link android.Manifest.permission#NFC} permission. + * + * @param timeout timeout value in milliseconds + * @hide + */ + // TODO Unhide for ICS + public void setTimeout(int timeout) { + try { + int err = mTag.getTagService().setTimeout(TagTechnology.MIFARE_CLASSIC, timeout); + if (err != ErrorCodes.SUCCESS) { + throw new IllegalArgumentException("The supplied timeout is not valid"); + } + } catch (RemoteException e) { + Log.e(TAG, "NFC service dead", e); + } + } + private static void validateSector(int sector) { // Do not be too strict on upper bounds checking, since some cards // have more addressable memory than they report. For example, diff --git a/core/java/android/nfc/tech/MifareUltralight.java b/core/java/android/nfc/tech/MifareUltralight.java index 6c2754b..3d4cdd1 100644 --- a/core/java/android/nfc/tech/MifareUltralight.java +++ b/core/java/android/nfc/tech/MifareUltralight.java @@ -16,10 +16,12 @@ package android.nfc.tech; +import android.nfc.ErrorCodes; import android.nfc.Tag; import android.nfc.TagLostException; import android.os.Bundle; import android.os.RemoteException; +import android.util.Log; import java.io.IOException; @@ -57,6 +59,8 @@ import java.io.IOException; * require the {@link android.Manifest.permission#NFC} permission. */ public final class MifareUltralight extends BasicTagTechnology { + private static final String TAG = "NFC"; + /** A MIFARE Ultralight compatible tag of unknown type */ public static final int TYPE_UNKNOWN = -1; /** A MIFARE Ultralight tag */ @@ -208,6 +212,32 @@ public final class MifareUltralight extends BasicTagTechnology { return transceive(data, true); } + /** + * Set the timeout of {@link #transceive} in milliseconds. + * <p>The timeout only applies to MifareUltralight {@link #transceive}, + * and is reset to a default value when {@link #close} is called. + * <p>Setting a longer timeout may be useful when performing + * transactions that require a long processing time on the tag + * such as key generation. + * + * <p class="note">Requires the {@link android.Manifest.permission#NFC} permission. + * + * @param timeout timeout value in milliseconds + * @hide + */ + // TODO Unhide for ICS + public void setTimeout(int timeout) { + try { + int err = mTag.getTagService().setTimeout( + TagTechnology.MIFARE_ULTRALIGHT, timeout); + if (err != ErrorCodes.SUCCESS) { + throw new IllegalArgumentException("The supplied timeout is not valid"); + } + } catch (RemoteException e) { + Log.e(TAG, "NFC service dead", e); + } + } + private static void validatePageIndex(int pageIndex) { // Do not be too strict on upper bounds checking, since some cards // may have more addressable memory than they report. diff --git a/core/java/android/nfc/tech/NfcA.java b/core/java/android/nfc/tech/NfcA.java index 1843eae..08095e6 100644 --- a/core/java/android/nfc/tech/NfcA.java +++ b/core/java/android/nfc/tech/NfcA.java @@ -16,9 +16,11 @@ package android.nfc.tech; +import android.nfc.ErrorCodes; import android.nfc.Tag; import android.os.Bundle; import android.os.RemoteException; +import android.util.Log; import java.io.IOException; @@ -33,6 +35,8 @@ import java.io.IOException; * require the {@link android.Manifest.permission#NFC} permission. */ public final class NfcA extends BasicTagTechnology { + private static final String TAG = "NFC"; + /** @hide */ public static final String EXTRA_SAK = "sak"; /** @hide */ @@ -112,4 +116,29 @@ public final class NfcA extends BasicTagTechnology { public byte[] transceive(byte[] data) throws IOException { return transceive(data, true); } + + /** + * Set the timeout of {@link #transceive} in milliseconds. + * <p>The timeout only applies to NfcA {@link #transceive}, and is + * reset to a default value when {@link #close} is called. + * <p>Setting a longer timeout may be useful when performing + * transactions that require a long processing time on the tag + * such as key generation. + * + * <p class="note">Requires the {@link android.Manifest.permission#NFC} permission. + * + * @param timeout timeout value in milliseconds + * @hide + */ + // TODO Unhide for ICS + public void setTimeout(int timeout) { + try { + int err = mTag.getTagService().setTimeout(TagTechnology.NFC_A, timeout); + if (err != ErrorCodes.SUCCESS) { + throw new IllegalArgumentException("The supplied timeout is not valid"); + } + } catch (RemoteException e) { + Log.e(TAG, "NFC service dead", e); + } + } } diff --git a/core/java/android/nfc/tech/NfcF.java b/core/java/android/nfc/tech/NfcF.java index 250c9b3..85abf89 100644 --- a/core/java/android/nfc/tech/NfcF.java +++ b/core/java/android/nfc/tech/NfcF.java @@ -16,6 +16,7 @@ package android.nfc.tech; +import android.nfc.ErrorCodes; import android.nfc.Tag; import android.os.Bundle; import android.os.RemoteException; @@ -131,7 +132,10 @@ public final class NfcF extends BasicTagTechnology { // TODO Unhide for ICS public void setTimeout(int timeout) { try { - mTag.getTagService().setFelicaTimeout(timeout); + int err = mTag.getTagService().setTimeout(TagTechnology.NFC_F, timeout); + if (err != ErrorCodes.SUCCESS) { + throw new IllegalArgumentException("The supplied timeout is not valid"); + } } catch (RemoteException e) { Log.e(TAG, "NFC service dead", e); } |