| /* | |
| * Copyright (C) 2024 The Android Open Source Project | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); | |
| * you may not use this file except in compliance with the License. | |
| * You may obtain a copy of the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, | |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| * See the License for the specific language governing permissions and | |
| * limitations under the License. | |
| */ | |
| package android.nfc; | |
| import android.annotation.FlaggedApi; | |
| import android.annotation.IntDef; | |
| import android.annotation.IntRange; | |
| import android.annotation.NonNull; | |
| import android.annotation.SystemApi; | |
| import android.os.Parcel; | |
| import android.os.Parcelable; | |
| import java.lang.annotation.Retention; | |
| import java.lang.annotation.RetentionPolicy; | |
| /** | |
| * This class is used to represence T4T (Type-4 Tag) NDEF (NFC Data Exchange Format) | |
| * NFCEE (NFC Execution Environment) CC (Capability Container) File data. | |
| * The CC file stores metadata about the T4T tag being emulated. | |
| * | |
| * Refer to the NFC forum specification "NFCForum-TS-T4T-1.1 section 4.4" for more details. | |
| * @hide | |
| */ | |
| @FlaggedApi(Flags.FLAG_NFC_OEM_EXTENSION) | |
| @SystemApi | |
| public final class T4tNdefNfceeCcFileInfo implements Parcelable { | |
| /** | |
| * Indicates the size of this capability container (called “CC File”)<p> | |
| */ | |
| private int mCcLength; | |
| /** | |
| * Indicates the mapping specification version<p> | |
| */ | |
| private int mVersion; | |
| /** | |
| * Indicates the NDEF File Identifier<p> | |
| */ | |
| private int mFileId; | |
| /** | |
| * Indicates the maximum Max NDEF file size<p> | |
| */ | |
| private int mMaxSize; | |
| /** | |
| * Indicates the read access condition<p> | |
| */ | |
| private boolean mIsReadAllowed; | |
| /** | |
| * Indicates the write access condition<p> | |
| */ | |
| private boolean mIsWriteAllowed; | |
| /** | |
| * Constructor to be used by NFC service and internal classes. | |
| * @hide | |
| */ | |
| public T4tNdefNfceeCcFileInfo(int cclen, int version, | |
| int ndefFileId, int ndefMaxSize, | |
| boolean isReadAllowed, boolean isWriteAllowed) { | |
| mCcLength = cclen; | |
| mVersion = version; | |
| mFileId = ndefFileId; | |
| mMaxSize = ndefMaxSize; | |
| mIsReadAllowed = isReadAllowed; | |
| mIsWriteAllowed = isWriteAllowed; | |
| } | |
| @Override | |
| public void writeToParcel(@NonNull Parcel dest, int flags) { | |
| dest.writeInt(mCcLength); | |
| dest.writeInt(mVersion); | |
| dest.writeInt(mFileId); | |
| dest.writeInt(mMaxSize); | |
| dest.writeBoolean(mIsReadAllowed); | |
| dest.writeBoolean(mIsWriteAllowed); | |
| } | |
| /** | |
| * Indicates the size of this capability container (called “CC File”). | |
| * | |
| * @return length of the CC file. | |
| */ | |
| @IntRange(from = 0xf, to = 0x7fff) | |
| public int getCcFileLength() { | |
| return mCcLength; | |
| } | |
| /** | |
| * T4T tag mapping version 2.0. | |
| * Refer to the NFC forum specification "NFCForum-TS-T4T-1.1 section 4.4" for more details. | |
| */ | |
| public static final int VERSION_2_0 = 0x20; | |
| /** | |
| * T4T tag mapping version 2.0. | |
| * Refer to the NFC forum specification "NFCForum-TS-T4T-1.1 section 4.4" for more details. | |
| */ | |
| public static final int VERSION_3_0 = 0x30; | |
| /** | |
| * Possible return values for {@link #getVersion()}. | |
| * @hide | |
| */ | |
| @IntDef(prefix = { "VERSION_" }, value = { | |
| VERSION_2_0, | |
| VERSION_3_0, | |
| }) | |
| @Retention(RetentionPolicy.SOURCE) | |
| public @interface Version{} | |
| /** | |
| * Indicates the mapping version of the T4T tag supported. | |
| * | |
| * Refer to the NFC forum specification "NFCForum-TS-T4T-1.1 section 4.5" for more details. | |
| * | |
| * @return version of the specification | |
| */ | |
| @Version | |
| public int getVersion() { | |
| return mVersion; | |
| } | |
| /** | |
| * Indicates the NDEF File Identifier. This is the identifier used in the last invocation of | |
| * {@link T4tNdefNfcee#writeData(int, byte[])} | |
| * | |
| * @return FileId of the data stored or -1 if no data is present. | |
| */ | |
| @IntRange(from = -1, to = 65535) | |
| public int getFileId() { | |
| return mFileId; | |
| } | |
| /** | |
| * Indicates the maximum size of T4T NDEF data that can be written to the NFCEE. | |
| * | |
| * @return max size of the contents. | |
| */ | |
| @IntRange(from = 0x5, to = 0x7fff) | |
| public int getMaxSize() { | |
| return mMaxSize; | |
| } | |
| /** | |
| * Indicates the read access condition. | |
| * Refer to the NFC forum specification "NFCForum-TS-T4T-1.1 section 4.2" for more details. | |
| * @return boolean true if read access is allowed, otherwise false. | |
| */ | |
| public boolean isReadAllowed() { | |
| return mIsReadAllowed; | |
| } | |
| /** | |
| * Indicates the write access condition. | |
| * Refer to the NFC forum specification "NFCForum-TS-T4T-1.1 section 4.2" for more details. | |
| * @return boolean if write access is allowed, otherwise false. | |
| */ | |
| public boolean isWriteAllowed() { | |
| return mIsWriteAllowed; | |
| } | |
| @Override | |
| public int describeContents() { | |
| return 0; | |
| } | |
| public static final @NonNull Parcelable.Creator<T4tNdefNfceeCcFileInfo> CREATOR = | |
| new Parcelable.Creator<>() { | |
| @Override | |
| public T4tNdefNfceeCcFileInfo createFromParcel(Parcel in) { | |
| // NdefNfceeCcFileInfo fields | |
| int cclen = in.readInt(); | |
| int version = in.readInt(); | |
| int ndefFileId = in.readInt(); | |
| int ndefMaxSize = in.readInt(); | |
| boolean isReadAllowed = in.readBoolean(); | |
| boolean isWriteAllowed = in.readBoolean(); | |
| return new T4tNdefNfceeCcFileInfo(cclen, version, | |
| ndefFileId, ndefMaxSize, | |
| isReadAllowed, isWriteAllowed); | |
| } | |
| @Override | |
| public T4tNdefNfceeCcFileInfo[] newArray(int size) { | |
| return new T4tNdefNfceeCcFileInfo[size]; | |
| } | |
| }; | |
| } |