diff options
author | Jizhou Liao <Jizhou.Liao@nxp.com> | 2015-08-03 11:54:48 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-08-03 11:54:48 +0000 |
commit | d52ab3bebafd97a28e62d71c2f87cb586fb35449 (patch) | |
tree | cb0f871b5dfbbf34218fad0d59d6903ec18a3edd | |
parent | 92f0024f7e0fb1b0e8c0d2dd80dd83aa5c528cec (diff) | |
parent | 3e88d804d7601fe55332b124ce5efc4ed67d1572 (diff) | |
download | android_packages_apps_Nfc-d52ab3bebafd97a28e62d71c2f87cb586fb35449.tar.gz android_packages_apps_Nfc-d52ab3bebafd97a28e62d71c2f87cb586fb35449.tar.bz2 android_packages_apps_Nfc-d52ab3bebafd97a28e62d71c2f87cb586fb35449.zip |
am 3e88d804: am 26e1bc78: Fix conflict vendor proprietary definitions.
* commit '3e88d804d7601fe55332b124ce5efc4ed67d1572':
Fix conflict vendor proprietary definitions.
-rwxr-xr-x | nci/jni/NativeNfcTag.cpp | 24 | ||||
-rwxr-xr-x | nci/jni/NfcTag.cpp | 431 |
2 files changed, 215 insertions, 240 deletions
diff --git a/nci/jni/NativeNfcTag.cpp b/nci/jni/NativeNfcTag.cpp index 844e9cfc..268c1f6c 100755 --- a/nci/jni/NativeNfcTag.cpp +++ b/nci/jni/NativeNfcTag.cpp @@ -962,13 +962,11 @@ static jint nativeNfcTag_doGetNdefType (JNIEnv*, jobject, jint libnfcType, jint case NFA_PROTOCOL_ISO_DEP: ndefType = NDEF_TYPE4_TAG; break; - case NFA_PROTOCOL_ISO15693: - ndefType = NDEF_UNKNOWN_TYPE; - break; case NFA_PROTOCOL_INVALID: ndefType = NDEF_UNKNOWN_TYPE; break; default: + /* NFA_PROTOCOL_ISO15693 and others */ ndefType = NDEF_UNKNOWN_TYPE; break; } @@ -1295,25 +1293,23 @@ static jboolean nativeNfcTag_doIsNdefFormatable (JNIEnv*, jbyteArray) { jboolean isFormattable = JNI_FALSE; - - switch (NfcTag::getInstance().getProtocol()) + tNFC_PROTOCOL protocol = NfcTag::getInstance().getProtocol(); + if (NFA_PROTOCOL_T1T == protocol || NFA_PROTOCOL_ISO15693 == protocol) { - case NFA_PROTOCOL_T1T: - case NFA_PROTOCOL_ISO15693: isFormattable = JNI_TRUE; - break; - - case NFA_PROTOCOL_T3T: + } + else if (NFA_PROTOCOL_T3T == protocol) + { isFormattable = NfcTag::getInstance().isFelicaLite() ? JNI_TRUE : JNI_FALSE; - break; - - case NFA_PROTOCOL_T2T: + } + else if (NFA_PROTOCOL_T2T == protocol) + { isFormattable = ( NfcTag::getInstance().isMifareUltralight() | NfcTag::getInstance().isInfineonMyDMove() | NfcTag::getInstance().isKovioType2Tag() ) ? JNI_TRUE : JNI_FALSE; - break; } + ALOGD("%s: is formattable=%u", __FUNCTION__, isFormattable); return isFormattable; } diff --git a/nci/jni/NfcTag.cpp b/nci/jni/NfcTag.cpp index 0cc4b429..d3948066 100755 --- a/nci/jni/NfcTag.cpp +++ b/nci/jni/NfcTag.cpp @@ -308,13 +308,12 @@ void NfcTag::discoverTechnologies (tNFA_ACTIVATED& activationData) //save the stack's data structure for interpretation later memcpy (&(mTechParams[mNumTechList]), &(rfDetail.rf_tech_param), sizeof(rfDetail.rf_tech_param)); - switch (rfDetail.protocol) + if (NFC_PROTOCOL_T1T == rfDetail.protocol) { - case NFC_PROTOCOL_T1T: mTechList [mNumTechList] = TARGET_TYPE_ISO14443_3A; //is TagTechnology.NFC_A by Java API - break; - - case NFC_PROTOCOL_T2T: + } + else if (NFC_PROTOCOL_T2T == rfDetail.protocol) + { mTechList [mNumTechList] = TARGET_TYPE_ISO14443_3A; //is TagTechnology.NFC_A by Java API // could be MifFare UL or Classic or Kovio { @@ -337,27 +336,26 @@ void NfcTag::discoverTechnologies (tNFA_ACTIVATED& activationData) } } } - break; - - case NFC_PROTOCOL_T3T: - { - UINT8 xx = 0; + } + else if (NFC_PROTOCOL_T3T == rfDetail.protocol) + { + UINT8 xx = 0; - mTechList [mNumTechList] = TARGET_TYPE_FELICA; + mTechList [mNumTechList] = TARGET_TYPE_FELICA; - //see if it is Felica Lite. - while (xx < activationData.params.t3t.num_system_codes) + //see if it is Felica Lite. + while (xx < activationData.params.t3t.num_system_codes) + { + if (activationData.params.t3t.p_system_codes[xx++] == T3T_SYSTEM_CODE_FELICA_LITE) { - if (activationData.params.t3t.p_system_codes[xx++] == T3T_SYSTEM_CODE_FELICA_LITE) - { - mIsFelicaLite = true; - break; - } + mIsFelicaLite = true; + break; } } - break; - - case NFC_PROTOCOL_ISO_DEP: //type-4 tag uses technology ISO-DEP and technology A or B + } + else if (NFC_PROTOCOL_ISO_DEP == rfDetail.protocol) + { + //type-4 tag uses technology ISO-DEP and technology A or B mTechList [mNumTechList] = TARGET_TYPE_ISO14443_4; //is TagTechnology.ISO_DEP by Java API if ( (rfDetail.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A) || (rfDetail.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A_ACTIVE) || @@ -383,21 +381,21 @@ void NfcTag::discoverTechnologies (tNFA_ACTIVATED& activationData) //save the stack's data structure for interpretation later memcpy (&(mTechParams[mNumTechList]), &(rfDetail.rf_tech_param), sizeof(rfDetail.rf_tech_param)); } - break; - - case NFC_PROTOCOL_15693: //is TagTechnology.NFC_V by Java API + } + else if (NFC_PROTOCOL_15693 == rfDetail.protocol) + { + //is TagTechnology.NFC_V by Java API mTechList [mNumTechList] = TARGET_TYPE_ISO15693; - break; - - case NFC_PROTOCOL_KOVIO: + } + else if (NFC_PROTOCOL_KOVIO == rfDetail.protocol) + { ALOGD ("%s: Kovio", fn); mTechList [mNumTechList] = TARGET_TYPE_KOVIO_BARCODE; - break; - - default: + } + else + { ALOGE ("%s: unknown protocol ????", fn); mTechList [mNumTechList] = TARGET_TYPE_UNKNOWN; - break; } mNumTechList++; @@ -438,13 +436,12 @@ void NfcTag::discoverTechnologies (tNFA_DISC_RESULT& discoveryData) //save the stack's data structure for interpretation later memcpy (&(mTechParams[mNumTechList]), &(discovery_ntf.rf_tech_param), sizeof(discovery_ntf.rf_tech_param)); - switch (discovery_ntf.protocol) + if (NFC_PROTOCOL_T1T == discovery_ntf.protocol) { - case NFC_PROTOCOL_T1T: mTechList [mNumTechList] = TARGET_TYPE_ISO14443_3A; //is TagTechnology.NFC_A by Java API - break; - - case NFC_PROTOCOL_T2T: + } + else if (NFC_PROTOCOL_T2T == discovery_ntf.protocol) + { mTechList [mNumTechList] = TARGET_TYPE_ISO14443_3A; //is TagTechnology.NFC_A by Java API //type-2 tags are identical to Mifare Ultralight, so Ultralight is also discovered if ((discovery_ntf.rf_tech_param.param.pa.sel_rsp == 0) && @@ -459,13 +456,14 @@ void NfcTag::discoverTechnologies (tNFA_DISC_RESULT& discoveryData) //save the stack's data structure for interpretation later memcpy (&(mTechParams[mNumTechList]), &(discovery_ntf.rf_tech_param), sizeof(discovery_ntf.rf_tech_param)); - break; - - case NFC_PROTOCOL_T3T: + } + else if (NFC_PROTOCOL_T3T == discovery_ntf.protocol) + { mTechList [mNumTechList] = TARGET_TYPE_FELICA; - break; - - case NFC_PROTOCOL_ISO_DEP: //type-4 tag uses technology ISO-DEP and technology A or B + } + else if (NFC_PROTOCOL_ISO_DEP == discovery_ntf.protocol) + { + //type-4 tag uses technology ISO-DEP and technology A or B mTechList [mNumTechList] = TARGET_TYPE_ISO14443_4; //is TagTechnology.ISO_DEP by Java API if ( (discovery_ntf.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A) || (discovery_ntf.rf_tech_param.mode == NFC_DISCOVERY_TYPE_POLL_A_ACTIVE) || @@ -497,16 +495,16 @@ void NfcTag::discoverTechnologies (tNFA_DISC_RESULT& discoveryData) memcpy (&(mTechParams[mNumTechList]), &(discovery_ntf.rf_tech_param), sizeof(discovery_ntf.rf_tech_param)); } } - break; - - case NFC_PROTOCOL_15693: //is TagTechnology.NFC_V by Java API + } + else if (NFC_PROTOCOL_15693 == discovery_ntf.protocol) + { + //is TagTechnology.NFC_V by Java API mTechList [mNumTechList] = TARGET_TYPE_ISO15693; - break; - - default: + } + else + { ALOGE ("%s: unknown protocol ????", fn); mTechList [mNumTechList] = TARGET_TYPE_UNKNOWN; - break; } mNumTechList++; @@ -693,21 +691,20 @@ void NfcTag::fillNativeNfcTagMembers3 (JNIEnv* e, jclass tag_cls, jobject tag, t for (int i = 0; i < mNumTechList; i++) { ALOGD ("%s: index=%d; rf tech params mode=%u", fn, i, mTechParams [i].mode); - switch (mTechParams [i].mode) + if (NFC_DISCOVERY_TYPE_POLL_A == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_POLL_A_ACTIVE == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_LISTEN_A == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE == mTechParams [i].mode) { - case NFC_DISCOVERY_TYPE_POLL_A: - case NFC_DISCOVERY_TYPE_POLL_A_ACTIVE: - case NFC_DISCOVERY_TYPE_LISTEN_A: - case NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE: ALOGD ("%s: tech A", fn); pollBytes.reset(e->NewByteArray(2)); e->SetByteArrayRegion(pollBytes.get(), 0, 2, (jbyte*) mTechParams [i].param.pa.sens_res); - break; - - case NFC_DISCOVERY_TYPE_POLL_B: - case NFC_DISCOVERY_TYPE_POLL_B_PRIME: - case NFC_DISCOVERY_TYPE_LISTEN_B: - case NFC_DISCOVERY_TYPE_LISTEN_B_PRIME: + } + else if (NFC_DISCOVERY_TYPE_POLL_B == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_POLL_B_PRIME == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_LISTEN_B == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_LISTEN_B_PRIME == mTechParams [i].mode) + { if (mTechList [i] == TARGET_TYPE_ISO14443_3B) //is TagTechnology.NFC_B by Java API { /***************** @@ -725,61 +722,56 @@ void NfcTag::fillNativeNfcTagMembers3 (JNIEnv* e, jclass tag_cls, jobject tag, t { pollBytes.reset(e->NewByteArray(0)); } - break; - - case NFC_DISCOVERY_TYPE_POLL_F: - case NFC_DISCOVERY_TYPE_POLL_F_ACTIVE: - case NFC_DISCOVERY_TYPE_LISTEN_F: - case NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE: + } + else if (NFC_DISCOVERY_TYPE_POLL_F == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_POLL_F_ACTIVE == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_LISTEN_F == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE == mTechParams [i].mode) + { + /**************** + see NFC Forum Type 3 Tag Operation Specification; sections 2.3.2, 2.3.1.2; + see NFC Forum Digital Protocol Specification; sections 6.6.2; + PMm: manufacture parameter; 8 bytes; + System Code: 2 bytes; + ****************/ + ALOGD ("%s: tech F", fn); + UINT8 result [10]; //return result to NFC service + memset (result, 0, sizeof(result)); + len = 10; + + /**** + for (int ii = 0; ii < mTechParams [i].param.pf.sensf_res_len; ii++) { - /**************** - see NFC Forum Type 3 Tag Operation Specification; sections 2.3.2, 2.3.1.2; - see NFC Forum Digital Protocol Specification; sections 6.6.2; - PMm: manufacture parameter; 8 bytes; - System Code: 2 bytes; - ****************/ - ALOGD ("%s: tech F", fn); - UINT8 result [10]; //return result to NFC service - memset (result, 0, sizeof(result)); - len = 10; - - /**** - for (int ii = 0; ii < mTechParams [i].param.pf.sensf_res_len; ii++) - { - ALOGD ("%s: tech F, sendf_res[%d]=%d (0x%x)", - fn, ii, mTechParams [i].param.pf.sensf_res[ii],mTechParams [i].param.pf.sensf_res[ii]); - } - ***/ - memcpy (result, mTechParams [i].param.pf.sensf_res + 8, 8); //copy PMm - if (activationData.params.t3t.num_system_codes > 0) //copy the first System Code - { - UINT16 systemCode = *(activationData.params.t3t.p_system_codes); - result [8] = (UINT8) (systemCode >> 8); - result [9] = (UINT8) systemCode; - ALOGD ("%s: tech F; sys code=0x%X 0x%X", fn, result [8], result [9]); - } - pollBytes.reset(e->NewByteArray(len)); - e->SetByteArrayRegion(pollBytes.get(), 0, len, (jbyte*) result); + ALOGD ("%s: tech F, sendf_res[%d]=%d (0x%x)", + fn, ii, mTechParams [i].param.pf.sensf_res[ii],mTechParams [i].param.pf.sensf_res[ii]); } - break; - - case NFC_DISCOVERY_TYPE_POLL_ISO15693: - case NFC_DISCOVERY_TYPE_LISTEN_ISO15693: + ***/ + memcpy (result, mTechParams [i].param.pf.sensf_res + 8, 8); //copy PMm + if (activationData.params.t3t.num_system_codes > 0) //copy the first System Code { - ALOGD ("%s: tech iso 15693", fn); - //iso 15693 response flags: 1 octet - //iso 15693 Data Structure Format Identifier (DSF ID): 1 octet - //used by public API: NfcV.getDsfId(), NfcV.getResponseFlags(); - uint8_t data [2]= {activationData.params.i93.afi, activationData.params.i93.dsfid}; - pollBytes.reset(e->NewByteArray(2)); - e->SetByteArrayRegion(pollBytes.get(), 0, 2, (jbyte *) data); + UINT16 systemCode = *(activationData.params.t3t.p_system_codes); + result [8] = (UINT8) (systemCode >> 8); + result [9] = (UINT8) systemCode; + ALOGD ("%s: tech F; sys code=0x%X 0x%X", fn, result [8], result [9]); } - break; - - default: + pollBytes.reset(e->NewByteArray(len)); + e->SetByteArrayRegion(pollBytes.get(), 0, len, (jbyte*) result); + } + else if (NFC_DISCOVERY_TYPE_POLL_ISO15693 == mTechParams [i].mode + || NFC_DISCOVERY_TYPE_LISTEN_ISO15693 == mTechParams [i].mode) + { + ALOGD ("%s: tech iso 15693", fn); + //iso 15693 response flags: 1 octet + //iso 15693 Data Structure Format Identifier (DSF ID): 1 octet + //used by public API: NfcV.getDsfId(), NfcV.getResponseFlags(); + uint8_t data [2]= {activationData.params.i93.afi, activationData.params.i93.dsfid}; + pollBytes.reset(e->NewByteArray(2)); + e->SetByteArrayRegion(pollBytes.get(), 0, 2, (jbyte *) data); + } + else + { ALOGE ("%s: tech unknown ????", fn); pollBytes.reset(e->NewByteArray(0)); - break; } //switch: every type of technology e->SetObjectArrayElement(techPollBytes.get(), i, pollBytes.get()); } //for: every technology in the array @@ -813,107 +805,98 @@ void NfcTag::fillNativeNfcTagMembers4 (JNIEnv* e, jclass tag_cls, jobject tag, t for (int i = 0; i < mNumTechList; i++) { ALOGD ("%s: index=%d", fn, i); - switch (mTechLibNfcTypes[i]) + if (NFC_PROTOCOL_T1T == mTechLibNfcTypes[i] || NFC_PROTOCOL_T2T == mTechLibNfcTypes[i]) { - case NFC_PROTOCOL_T1T: - case NFC_PROTOCOL_T2T: - { - if (mTechLibNfcTypes[i] == NFC_PROTOCOL_T1T) - ALOGD ("%s: T1T; tech A", fn); - else if (mTechLibNfcTypes[i] == NFC_PROTOCOL_T2T) - ALOGD ("%s: T2T; tech A", fn); - actBytes.reset(e->NewByteArray(1)); - e->SetByteArrayRegion(actBytes.get(), 0, 1, (jbyte*) &mTechParams [i].param.pa.sel_rsp); - } - break; - - case NFC_PROTOCOL_T3T: //felica - { - ALOGD ("%s: T3T; felica; tech F", fn); - //really, there is no data - actBytes.reset(e->NewByteArray(0)); - } - break; - - case NFC_PROTOCOL_ISO_DEP: //t4t + if (mTechLibNfcTypes[i] == NFC_PROTOCOL_T1T) + ALOGD ("%s: T1T; tech A", fn); + else if (mTechLibNfcTypes[i] == NFC_PROTOCOL_T2T) + ALOGD ("%s: T2T; tech A", fn); + actBytes.reset(e->NewByteArray(1)); + e->SetByteArrayRegion(actBytes.get(), 0, 1, (jbyte*) &mTechParams [i].param.pa.sel_rsp); + } + else if (NFC_PROTOCOL_T3T == mTechLibNfcTypes[i]) + { + //felica + ALOGD ("%s: T3T; felica; tech F", fn); + //really, there is no data + actBytes.reset(e->NewByteArray(0)); + } + else if (NFC_PROTOCOL_ISO_DEP == mTechLibNfcTypes[i]) + { + //t4t + if (mTechList [i] == TARGET_TYPE_ISO14443_4) //is TagTechnology.ISO_DEP by Java API { - if (mTechList [i] == TARGET_TYPE_ISO14443_4) //is TagTechnology.ISO_DEP by Java API + if ( (mTechParams[i].mode == NFC_DISCOVERY_TYPE_POLL_A) || + (mTechParams[i].mode == NFC_DISCOVERY_TYPE_POLL_A_ACTIVE) || + (mTechParams[i].mode == NFC_DISCOVERY_TYPE_LISTEN_A) || + (mTechParams[i].mode == NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE) ) { - if ( (mTechParams[i].mode == NFC_DISCOVERY_TYPE_POLL_A) || - (mTechParams[i].mode == NFC_DISCOVERY_TYPE_POLL_A_ACTIVE) || - (mTechParams[i].mode == NFC_DISCOVERY_TYPE_LISTEN_A) || - (mTechParams[i].mode == NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE) ) + //see NFC Forum Digital Protocol specification, section 11.6.2, "RATS Response"; search for "historical bytes"; + //copy historical bytes into Java object; + //the public API, IsoDep.getHistoricalBytes(), returns this data; + if (activationData.activate_ntf.intf_param.type == NFC_INTERFACE_ISO_DEP) { - //see NFC Forum Digital Protocol specification, section 11.6.2, "RATS Response"; search for "historical bytes"; - //copy historical bytes into Java object; - //the public API, IsoDep.getHistoricalBytes(), returns this data; - if (activationData.activate_ntf.intf_param.type == NFC_INTERFACE_ISO_DEP) - { - tNFC_INTF_PA_ISO_DEP& pa_iso = activationData.activate_ntf.intf_param.intf_param.pa_iso; - ALOGD ("%s: T4T; ISO_DEP for tech A; copy historical bytes; len=%u", fn, pa_iso.his_byte_len); - actBytes.reset(e->NewByteArray(pa_iso.his_byte_len)); - if (pa_iso.his_byte_len > 0) - e->SetByteArrayRegion(actBytes.get(), 0, pa_iso.his_byte_len, (jbyte*) (pa_iso.his_byte)); - } - else - { - ALOGE ("%s: T4T; ISO_DEP for tech A; wrong interface=%u", fn, activationData.activate_ntf.intf_param.type); - actBytes.reset(e->NewByteArray(0)); - } + tNFC_INTF_PA_ISO_DEP& pa_iso = activationData.activate_ntf.intf_param.intf_param.pa_iso; + ALOGD ("%s: T4T; ISO_DEP for tech A; copy historical bytes; len=%u", fn, pa_iso.his_byte_len); + actBytes.reset(e->NewByteArray(pa_iso.his_byte_len)); + if (pa_iso.his_byte_len > 0) + e->SetByteArrayRegion(actBytes.get(), 0, pa_iso.his_byte_len, (jbyte*) (pa_iso.his_byte)); } - else if ( (mTechParams[i].mode == NFC_DISCOVERY_TYPE_POLL_B) || - (mTechParams[i].mode == NFC_DISCOVERY_TYPE_POLL_B_PRIME) || - (mTechParams[i].mode == NFC_DISCOVERY_TYPE_LISTEN_B) || - (mTechParams[i].mode == NFC_DISCOVERY_TYPE_LISTEN_B_PRIME) ) + else { - //see NFC Forum Digital Protocol specification, section 12.6.2, "ATTRIB Response"; - //copy higher-layer response bytes into Java object; - //the public API, IsoDep.getHiLayerResponse(), returns this data; - if (activationData.activate_ntf.intf_param.type == NFC_INTERFACE_ISO_DEP) - { - tNFC_INTF_PB_ISO_DEP& pb_iso = activationData.activate_ntf.intf_param.intf_param.pb_iso; - ALOGD ("%s: T4T; ISO_DEP for tech B; copy response bytes; len=%u", fn, pb_iso.hi_info_len); - actBytes.reset(e->NewByteArray(pb_iso.hi_info_len)); - if (pb_iso.hi_info_len > 0) - e->SetByteArrayRegion(actBytes.get(), 0, pb_iso.hi_info_len, (jbyte*) (pb_iso.hi_info)); - } - else - { - ALOGE ("%s: T4T; ISO_DEP for tech B; wrong interface=%u", fn, activationData.activate_ntf.intf_param.type); - actBytes.reset(e->NewByteArray(0)); - } + ALOGE ("%s: T4T; ISO_DEP for tech A; wrong interface=%u", fn, activationData.activate_ntf.intf_param.type); + actBytes.reset(e->NewByteArray(0)); } } - else if (mTechList [i] == TARGET_TYPE_ISO14443_3A) //is TagTechnology.NFC_A by Java API + else if ( (mTechParams[i].mode == NFC_DISCOVERY_TYPE_POLL_B) || + (mTechParams[i].mode == NFC_DISCOVERY_TYPE_POLL_B_PRIME) || + (mTechParams[i].mode == NFC_DISCOVERY_TYPE_LISTEN_B) || + (mTechParams[i].mode == NFC_DISCOVERY_TYPE_LISTEN_B_PRIME) ) { - ALOGD ("%s: T4T; tech A", fn); - actBytes.reset(e->NewByteArray(1)); - e->SetByteArrayRegion(actBytes.get(), 0, 1, (jbyte*) &mTechParams [i].param.pa.sel_rsp); - } - else - { - actBytes.reset(e->NewByteArray(0)); + //see NFC Forum Digital Protocol specification, section 12.6.2, "ATTRIB Response"; + //copy higher-layer response bytes into Java object; + //the public API, IsoDep.getHiLayerResponse(), returns this data; + if (activationData.activate_ntf.intf_param.type == NFC_INTERFACE_ISO_DEP) + { + tNFC_INTF_PB_ISO_DEP& pb_iso = activationData.activate_ntf.intf_param.intf_param.pb_iso; + ALOGD ("%s: T4T; ISO_DEP for tech B; copy response bytes; len=%u", fn, pb_iso.hi_info_len); + actBytes.reset(e->NewByteArray(pb_iso.hi_info_len)); + if (pb_iso.hi_info_len > 0) + e->SetByteArrayRegion(actBytes.get(), 0, pb_iso.hi_info_len, (jbyte*) (pb_iso.hi_info)); + } + else + { + ALOGE ("%s: T4T; ISO_DEP for tech B; wrong interface=%u", fn, activationData.activate_ntf.intf_param.type); + actBytes.reset(e->NewByteArray(0)); + } } - } //case NFC_PROTOCOL_ISO_DEP: //t4t - break; - - case NFC_PROTOCOL_15693: + } + else if (mTechList [i] == TARGET_TYPE_ISO14443_3A) //is TagTechnology.NFC_A by Java API { - ALOGD ("%s: tech iso 15693", fn); - //iso 15693 response flags: 1 octet - //iso 15693 Data Structure Format Identifier (DSF ID): 1 octet - //used by public API: NfcV.getDsfId(), NfcV.getResponseFlags(); - uint8_t data [2]= {activationData.params.i93.afi, activationData.params.i93.dsfid}; - actBytes.reset(e->NewByteArray(2)); - e->SetByteArrayRegion(actBytes.get(), 0, 2, (jbyte *) data); + ALOGD ("%s: T4T; tech A", fn); + actBytes.reset(e->NewByteArray(1)); + e->SetByteArrayRegion(actBytes.get(), 0, 1, (jbyte*) &mTechParams [i].param.pa.sel_rsp); } - break; - - default: + else + { + actBytes.reset(e->NewByteArray(0)); + } + } //case NFC_PROTOCOL_ISO_DEP: //t4t + else if (NFC_PROTOCOL_15693 == mTechLibNfcTypes[i]) + { + ALOGD ("%s: tech iso 15693", fn); + //iso 15693 response flags: 1 octet + //iso 15693 Data Structure Format Identifier (DSF ID): 1 octet + //used by public API: NfcV.getDsfId(), NfcV.getResponseFlags(); + uint8_t data [2]= {activationData.params.i93.afi, activationData.params.i93.dsfid}; + actBytes.reset(e->NewByteArray(2)); + e->SetByteArrayRegion(actBytes.get(), 0, 2, (jbyte *) data); + } + else + { ALOGD ("%s: tech unknown ????", fn); actBytes.reset(e->NewByteArray(0)); - break; - }//switch + } e->SetObjectArrayElement(techActBytes.get(), i, actBytes.get()); } //for: every technology in the array jfieldID f = e->GetFieldID (tag_cls, "mTechActBytes", "[[B"); @@ -942,20 +925,19 @@ void NfcTag::fillNativeNfcTagMembers5 (JNIEnv* e, jclass tag_cls, jobject tag, t int len = 0; ScopedLocalRef<jbyteArray> uid(e, NULL); - switch (mTechParams [0].mode) + if (NFC_DISCOVERY_TYPE_POLL_KOVIO == mTechParams [0].mode) { - case NFC_DISCOVERY_TYPE_POLL_KOVIO: ALOGD ("%s: Kovio", fn); len = mTechParams [0].param.pk.uid_len; uid.reset(e->NewByteArray(len)); e->SetByteArrayRegion(uid.get(), 0, len, (jbyte*) &mTechParams [0].param.pk.uid); - break; - - case NFC_DISCOVERY_TYPE_POLL_A: - case NFC_DISCOVERY_TYPE_POLL_A_ACTIVE: - case NFC_DISCOVERY_TYPE_LISTEN_A: - case NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE: + } + else if (NFC_DISCOVERY_TYPE_POLL_A == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_POLL_A_ACTIVE == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_LISTEN_A == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_LISTEN_A_ACTIVE == mTechParams [0].mode) + { ALOGD ("%s: tech A", fn); len = mTechParams [0].param.pa.nfcid1_len; uid.reset(e->NewByteArray(len)); @@ -967,44 +949,41 @@ void NfcTag::fillNativeNfcTagMembers5 (JNIEnv* e, jclass tag_cls, jobject tag, t //section 4.7.2 SDD_RES Response, Requirements 20). mIsDynamicTagId = (mTechParams [0].param.pa.nfcid1_len == 4) && (mTechParams [0].param.pa.nfcid1 [0] == 0x08); - break; - - case NFC_DISCOVERY_TYPE_POLL_B: - case NFC_DISCOVERY_TYPE_POLL_B_PRIME: - case NFC_DISCOVERY_TYPE_LISTEN_B: - case NFC_DISCOVERY_TYPE_LISTEN_B_PRIME: + } + else if (NFC_DISCOVERY_TYPE_POLL_B == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_POLL_B_PRIME == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_LISTEN_B == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_LISTEN_B_PRIME == mTechParams [0].mode) + { ALOGD ("%s: tech B", fn); uid.reset(e->NewByteArray(NFC_NFCID0_MAX_LEN)); e->SetByteArrayRegion(uid.get(), 0, NFC_NFCID0_MAX_LEN, (jbyte*) &mTechParams [0].param.pb.nfcid0); - break; - - case NFC_DISCOVERY_TYPE_POLL_F: - case NFC_DISCOVERY_TYPE_POLL_F_ACTIVE: - case NFC_DISCOVERY_TYPE_LISTEN_F: - case NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE: + } + else if (NFC_DISCOVERY_TYPE_POLL_F == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_POLL_F_ACTIVE == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_LISTEN_F == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_LISTEN_F_ACTIVE == mTechParams [0].mode) + { uid.reset(e->NewByteArray(NFC_NFCID2_LEN)); e->SetByteArrayRegion(uid.get(), 0, NFC_NFCID2_LEN, (jbyte*) &mTechParams [0].param.pf.nfcid2); ALOGD ("%s: tech F", fn); - break; - - case NFC_DISCOVERY_TYPE_POLL_ISO15693: - case NFC_DISCOVERY_TYPE_LISTEN_ISO15693: - { + } + else if (NFC_DISCOVERY_TYPE_POLL_ISO15693 == mTechParams [0].mode + || NFC_DISCOVERY_TYPE_LISTEN_ISO15693 == mTechParams [0].mode) + { ALOGD ("%s: tech iso 15693", fn); jbyte data [I93_UID_BYTE_LEN]; //8 bytes for (int i=0; i<I93_UID_BYTE_LEN; ++i) //reverse the ID data[i] = activationData.params.i93.uid [I93_UID_BYTE_LEN - i - 1]; uid.reset(e->NewByteArray(I93_UID_BYTE_LEN)); e->SetByteArrayRegion(uid.get(), 0, I93_UID_BYTE_LEN, data); - } - break; - - default: + } + else + { ALOGE ("%s: tech unknown ????", fn); uid.reset(e->NewByteArray(0)); - break; } jfieldID f = e->GetFieldID(tag_cls, "mUid", "[B"); e->SetObjectField(tag, f, uid.get()); |