summaryrefslogtreecommitdiffstats
path: root/nci/jni/NfcTag.h
diff options
context:
space:
mode:
Diffstat (limited to 'nci/jni/NfcTag.h')
-rwxr-xr-xnci/jni/NfcTag.h419
1 files changed, 419 insertions, 0 deletions
diff --git a/nci/jni/NfcTag.h b/nci/jni/NfcTag.h
new file mode 100755
index 0000000..7fa56ee
--- /dev/null
+++ b/nci/jni/NfcTag.h
@@ -0,0 +1,419 @@
+/*
+ * Copyright (C) 2012 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.
+ */
+
+/*
+ * Tag-reading, tag-writing operations.
+ */
+
+#pragma once
+#include "SyncEvent.h"
+#include "NfcJniUtil.h"
+extern "C"
+{
+ #include "nfa_rw_api.h"
+}
+
+
+class NfcTag
+{
+public:
+ enum ActivationState {Idle, Sleep, Active};
+ static const int MAX_NUM_TECHNOLOGY = 10; //max number of technologies supported by one or more tags
+ int mTechList [MAX_NUM_TECHNOLOGY]; //array of NFC technologies according to NFC service
+ int mTechHandles [MAX_NUM_TECHNOLOGY]; //array of tag handles according to NFC service
+ int mTechLibNfcTypes [MAX_NUM_TECHNOLOGY]; //array of detailed tag types according to NFC service
+ int mNumTechList; //current number of NFC technologies in the list
+
+ /*******************************************************************************
+ **
+ ** Function: NfcTag
+ **
+ ** Description: Initialize member variables.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ NfcTag ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: getInstance
+ **
+ ** Description: Get a reference to the singleton NfcTag object.
+ **
+ ** Returns: Reference to NfcTag object.
+ **
+ *******************************************************************************/
+ static NfcTag& getInstance ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: initialize
+ **
+ ** Description: Reset member variables.
+ ** native: Native data.
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void initialize (nfc_jni_native_data* native);
+
+
+ /*******************************************************************************
+ **
+ ** Function: abort
+ **
+ ** Description: Unblock all operations.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void abort ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: connectionEventHandler
+ **
+ ** Description: Handle connection-related events.
+ ** event: event code.
+ ** data: pointer to event data.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void connectionEventHandler (UINT8 event, tNFA_CONN_EVT_DATA* data);
+
+
+ /*******************************************************************************
+ **
+ ** Function: getActivationState
+ **
+ ** Description: What is the current state: Idle, Sleep, or Activated.
+ **
+ ** Returns: Idle, Sleep, or Activated.
+ **
+ *******************************************************************************/
+ ActivationState getActivationState ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: setDeactivationState
+ **
+ ** Description: Set the current state: Idle or Sleep.
+ ** deactivated: state of deactivation.
+ **
+ ** Returns: None.
+ **
+ *******************************************************************************/
+ void setDeactivationState (tNFA_DEACTIVATED& deactivated);
+
+
+ /*******************************************************************************
+ **
+ ** Function: setActivationState
+ **
+ ** Description: Set the current state to Active.
+ **
+ ** Returns: None.
+ **
+ *******************************************************************************/
+ void setActivationState ();
+
+ /*******************************************************************************
+ **
+ ** Function: getProtocol
+ **
+ ** Description: Get the protocol of the current tag.
+ **
+ ** Returns: Protocol number.
+ **
+ *******************************************************************************/
+ tNFC_PROTOCOL getProtocol ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: isP2pDiscovered
+ **
+ ** Description: Does the peer support P2P?
+ **
+ ** Returns: True if the peer supports P2P.
+ **
+ *******************************************************************************/
+ bool isP2pDiscovered ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: selectP2p
+ **
+ ** Description: Select the preferred P2P technology if there is a choice.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void selectP2p ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: selectFirstTag
+ **
+ ** Description: When multiple tags are discovered, just select the first one to activate.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void selectFirstTag ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: getT1tMaxMessageSize
+ **
+ ** Description: Get the maximum size (octet) that a T1T can store.
+ **
+ ** Returns: Maximum size in octets.
+ **
+ *******************************************************************************/
+ int getT1tMaxMessageSize ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: isMifareUltralight
+ **
+ ** Description: Whether the currently activated tag is Mifare Ultralight.
+ **
+ ** Returns: True if tag is Mifare Ultralight.
+ **
+ *******************************************************************************/
+ bool isMifareUltralight ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: isT2tNackResponse
+ **
+ ** Description: Whether the response is a T2T NACK response.
+ ** See NFC Digital Protocol Technical Specification (2010-11-17).
+ ** Chapter 9 (Type 2 Tag Platform), section 9.6 (READ).
+ ** response: buffer contains T2T response.
+ ** responseLen: length of the response.
+ **
+ ** Returns: True if the response is NACK
+ **
+ *******************************************************************************/
+ bool isT2tNackResponse (const UINT8* response, UINT32 responseLen);
+
+ /*******************************************************************************
+ **
+ ** Function: isNdefDetectionTimedOut
+ **
+ ** Description: Whether NDEF-detection algorithm has timed out.
+ **
+ ** Returns: True if NDEF-detection algorithm timed out.
+ **
+ *******************************************************************************/
+ bool isNdefDetectionTimedOut ();
+
+private:
+ nfc_jni_native_data* mNativeData;
+ ActivationState mActivationState;
+ tNFC_PROTOCOL mProtocol;
+ int mtT1tMaxMessageSize; //T1T max NDEF message size
+ tNFA_STATUS mReadCompletedStatus;
+ int mLastKovioUidLen; // len of uid of last Kovio tag activated
+ bool mNdefDetectionTimedOut; // whether NDEF detection algorithm timed out
+ tNFC_RF_TECH_PARAMS mTechParams [MAX_NUM_TECHNOLOGY]; //array of technology parameters
+ SyncEvent mReadCompleteEvent;
+ struct timespec mLastKovioTime; // time of last Kovio tag activation
+ UINT8 mLastKovioUid[NFC_KOVIO_MAX_LEN]; // uid of last Kovio tag activated
+
+
+ /*******************************************************************************
+ **
+ ** Function: IsSameKovio
+ **
+ ** Description: Checks if tag activate is the same (UID) Kovio tag previously
+ ** activated. This is needed due to a problem with some Kovio
+ ** tags re-activating multiple times.
+ ** activationData: data from activation.
+ **
+ ** Returns: true if the activation is from the same tag previously
+ ** activated, false otherwise
+ **
+ *******************************************************************************/
+ bool IsSameKovio(tNFA_ACTIVATED& activationData);
+
+ /*******************************************************************************
+ **
+ ** Function: discoverTechnologies
+ **
+ ** Description: Discover the technologies that NFC service needs by interpreting
+ ** the data strucutures from the stack.
+ ** activationData: data from activation.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void discoverTechnologies (tNFA_ACTIVATED& activationData);
+
+
+ /*******************************************************************************
+ **
+ ** Function: discoverTechnologies
+ **
+ ** Description: Discover the technologies that NFC service needs by interpreting
+ ** the data strucutures from the stack.
+ ** discoveryData: data from discovery events(s).
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void discoverTechnologies (tNFA_DISC_RESULT& discoveryData);
+
+
+ /*******************************************************************************
+ **
+ ** Function: createNativeNfcTag
+ **
+ ** Description: Create a brand new Java NativeNfcTag object;
+ ** fill the objects's member variables with data;
+ ** notify NFC service;
+ ** activationData: data from activation.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void createNativeNfcTag (tNFA_ACTIVATED& activationData);
+
+
+ /*******************************************************************************
+ **
+ ** Function: fillNativeNfcTagMembers1
+ **
+ ** Description: Fill NativeNfcTag's members: mProtocols, mTechList, mTechHandles, mTechLibNfcTypes.
+ ** e: JVM environment.
+ ** tag_cls: Java NativeNfcTag class.
+ ** tag: Java NativeNfcTag object.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void fillNativeNfcTagMembers1 (JNIEnv* e, jclass tag_cls, jobject tag);
+
+
+ /*******************************************************************************
+ **
+ ** Function: fillNativeNfcTagMembers2
+ **
+ ** Description: Fill NativeNfcTag's members: mConnectedTechIndex or mConnectedTechnology.
+ ** The original Google's implementation is in set_target_pollBytes(
+ ** in com_android_nfc_NativeNfcTag.cpp;
+ ** e: JVM environment.
+ ** tag_cls: Java NativeNfcTag class.
+ ** tag: Java NativeNfcTag object.
+ ** activationData: data from activation.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void fillNativeNfcTagMembers2 (JNIEnv* e, jclass tag_cls, jobject tag, tNFA_ACTIVATED& activationData);
+
+
+ /*******************************************************************************
+ **
+ ** Function: fillNativeNfcTagMembers3
+ **
+ ** Description: Fill NativeNfcTag's members: mTechPollBytes.
+ ** The original Google's implementation is in set_target_pollBytes(
+ ** in com_android_nfc_NativeNfcTag.cpp;
+ ** e: JVM environment.
+ ** tag_cls: Java NativeNfcTag class.
+ ** tag: Java NativeNfcTag object.
+ ** activationData: data from activation.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void fillNativeNfcTagMembers3 (JNIEnv* e, jclass tag_cls, jobject tag, tNFA_ACTIVATED& activationData);
+
+
+ /*******************************************************************************
+ **
+ ** Function: fillNativeNfcTagMembers4
+ **
+ ** Description: Fill NativeNfcTag's members: mTechActBytes.
+ ** The original Google's implementation is in set_target_activationBytes()
+ ** in com_android_nfc_NativeNfcTag.cpp;
+ ** e: JVM environment.
+ ** tag_cls: Java NativeNfcTag class.
+ ** tag: Java NativeNfcTag object.
+ ** activationData: data from activation.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void fillNativeNfcTagMembers4 (JNIEnv* e, jclass tag_cls, jobject tag, tNFA_ACTIVATED& activationData);
+
+
+ /*******************************************************************************
+ **
+ ** Function: fillNativeNfcTagMembers5
+ **
+ ** Description: Fill NativeNfcTag's members: mUid.
+ ** The original Google's implementation is in nfc_jni_Discovery_notification_callback()
+ ** in com_android_nfc_NativeNfcManager.cpp;
+ ** e: JVM environment.
+ ** tag_cls: Java NativeNfcTag class.
+ ** tag: Java NativeNfcTag object.
+ ** activationData: data from activation.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void fillNativeNfcTagMembers5 (JNIEnv* e, jclass tag_cls, jobject tag, tNFA_ACTIVATED& activationData);
+
+
+ /*******************************************************************************
+ **
+ ** Function: resetTechnologies
+ **
+ ** Description: Clear all data related to the technology, protocol of the tag.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void resetTechnologies ();
+
+
+ /*******************************************************************************
+ **
+ ** Function: calculateT1tMaxMessageSize
+ **
+ ** Description: Calculate type-1 tag's max message size based on header ROM bytes.
+ ** activate: reference to activation data.
+ **
+ ** Returns: None
+ **
+ *******************************************************************************/
+ void calculateT1tMaxMessageSize (tNFA_ACTIVATED& activate);
+};
+