diff options
-rw-r--r-- | jni/Android.mk | 5 | ||||
-rw-r--r-- | jni/com_android_nfc_NativeNfcManager.cpp | 139 | ||||
-rw-r--r-- | res/drawable-hdpi/back.png | bin | 32598 -> 0 bytes | |||
-rw-r--r-- | res/layout/screenshot.xml | 9 | ||||
-rw-r--r-- | res/raw/end.ogg | bin | 18638 -> 6641 bytes | |||
-rw-r--r-- | res/raw/error.ogg | bin | 18935 -> 6185 bytes | |||
-rw-r--r-- | res/raw/start.ogg | bin | 19646 -> 7437 bytes | |||
-rw-r--r-- | res/values-be/strings.xml | 14 | ||||
-rw-r--r-- | res/values-et/strings.xml | 14 | ||||
-rw-r--r-- | src/com/android/nfc/P2pEventManager.java | 4 | ||||
-rw-r--r-- | src/com/android/nfc/SendUi.java | 36 |
11 files changed, 72 insertions, 149 deletions
diff --git a/jni/Android.mk b/jni/Android.mk index 600a54a..8ae792a 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -24,11 +24,12 @@ LOCAL_SHARED_LIBRARIES := \ libnativehelper \ libcutils \ libutils \ - libnfc + libnfc \ + libhardware #LOCAL_CFLAGS += -O0 -g LOCAL_MODULE := libnfc_jni LOCAL_MODULE_TAGS := optional -include $(BUILD_SHARED_LIBRARY)
\ No newline at end of file +include $(BUILD_SHARED_LIBRARY) diff --git a/jni/com_android_nfc_NativeNfcManager.cpp b/jni/com_android_nfc_NativeNfcManager.cpp index 7bbac44..70c60bb 100644 --- a/jni/com_android_nfc_NativeNfcManager.cpp +++ b/jni/com_android_nfc_NativeNfcManager.cpp @@ -21,12 +21,13 @@ #include <stdio.h> #include <math.h> #include <sys/queue.h> +#include <hardware/hardware.h> +#include <hardware/nfc.h> #include "com_android_nfc.h" #define ERROR_BUFFER_TOO_SMALL -12 #define ERROR_INSUFFICIENT_RESOURCES -9 -#define EEDATA_SETTINGS_NUMBER 33 extern uint32_t libnfc_llc_error_count; @@ -61,67 +62,6 @@ phLibNfc_Handle storedHandle = 0; struct nfc_jni_native_data *exported_nat = NULL; -/* TODO: move product specific configuration such as this - * antenna tuning into product specific configuration */ -uint8_t EEDATA_Settings[EEDATA_SETTINGS_NUMBER][4] = { - // DIFFERENTIAL_ANTENNA - - // RF Settings - {0x00,0x9B,0xD1,0x0D} // Tx consumption higher than 0x0D (average 50mA) - ,{0x00,0x9B,0xD2,0x24} // GSP setting for this threshold - ,{0x00,0x9B,0xD3,0x0A} // Tx consumption higher than 0x0A (average 40mA) - ,{0x00,0x9B,0xD4,0x22} // GSP setting for this threshold - ,{0x00,0x9B,0xD5,0x08} // Tx consumption higher than 0x08 (average 30mA) - ,{0x00,0x9B,0xD6,0x1E} // GSP setting for this threshold - ,{0x00,0x9B,0xDD,0x1C} // GSP setting for this threshold - ,{0x00,0x9B,0x84,0x13} // ANACM2 setting - ,{0x00,0x99,0x81,0x7F} // ANAVMID setting PCD - ,{0x00,0x99,0x31,0x70} // ANAVMID setting PICC - - // Enable PBTF - ,{0x00,0x98,0x00,0x3F} // SECURE_ELEMENT_CONFIGURATION - No Secure Element - ,{0x00,0x9F,0x09,0x00} // SWP_PBTF_RFU - ,{0x00,0x9F,0x0A,0x05} // SWP_PBTF_RFLD --> RFLEVEL Detector for PBTF - ,{0x00,0x9E,0xD1,0xA1} // - - // Change RF Level Detector ANARFLDWU - ,{0x00,0x99,0x23,0x00} // Default Value is 0x01 - - // Low-power polling - ,{0x00,0x9E,0x74,0x80} // Default Value is 0x00, bits 0->2: sensitivity (0==maximal, 6==minimal), bits 3->6: RFU, bit 7: (0 -> disabled, 1 -> enabled) - ,{0x00,0x9F,0x28,0x10} // Default value for register 0x28 in FW 109.7 - - // Polling Loop - Card Emulation Timeout - ,{0x00,0x9F,0x35,0x14} // Time for which PN544 stays in Card Emulation mode after leaving RF field - ,{0x00,0x9F,0x36,0x60} // Default value 0x0411 = 50 ms ---> New Value : 0x1460 = 250 ms - - //LLC Timer - ,{0x00,0x9C,0x31,0x00} // Guard host time-out in ms (MSB) - ,{0x00,0x9C,0x32,0xC8} // Guard host time-out in ms (LSB) - ,{0x00,0x9C,0x19,0x40} // Max RX retry (PN544=>host?) - ,{0x00,0x9C,0x1A,0x40} // Max TX retry (PN544=>host?) - - ,{0x00,0x9C,0x0C,0x00} // - ,{0x00,0x9C,0x0D,0x00} // - ,{0x00,0x9C,0x12,0x00} // - ,{0x00,0x9C,0x13,0x00} // - - //WTX for LLCP communication - ,{0x00,0x98,0xA2,0x0E} // Max value: 14 (default value: 09) - - //SE GPIO - ,{0x00, 0x98, 0x93, 0x40} - - // Set NFCT ATQA - ,{0x00, 0x98, 0x7D, 0x02} - ,{0x00, 0x98, 0x7E, 0x00} - - // Enable CEA detection mechanism - ,{0x00, 0x9F, 0xC8, 0x01} - // Set NFC-F poll RC=0x00 - ,{0x00, 0x9F, 0x9A, 0x00} -}; - /* Internal functions declaration */ static void *nfc_jni_client_thread(void *arg); static void nfc_jni_init_callback(void *pContext, NFCSTATUS status); @@ -132,48 +72,6 @@ static void nfc_jni_se_set_mode_callback(void *context, static void nfc_jni_llcpcfg_callback(void *pContext, NFCSTATUS status); static void nfc_jni_start_discovery_locked(struct nfc_jni_native_data *nat); -static phLibNfc_eConfigLinkType parseLinkType(const char* link_name) -{ - struct link_name_entry { - phLibNfc_eConfigLinkType value; - const char * name; - }; - const struct link_name_entry sLinkNameTable[] = { - {ENUM_LINK_TYPE_COM1, "COM1"}, - {ENUM_LINK_TYPE_COM2, "COM2"}, - {ENUM_LINK_TYPE_COM3, "COM3"}, - {ENUM_LINK_TYPE_COM4, "COM4"}, - {ENUM_LINK_TYPE_COM5, "COM5"}, - {ENUM_LINK_TYPE_COM6, "COM6"}, - {ENUM_LINK_TYPE_COM7, "COM7"}, - {ENUM_LINK_TYPE_COM8, "COM8"}, - {ENUM_LINK_TYPE_I2C, "I2C"}, - {ENUM_LINK_TYPE_USB, "USB"}, - }; - phLibNfc_eConfigLinkType ret; - unsigned int i; - - /* NOTE: ENUM_LINK_TYPE_NB corresponds to undefined link name */ - - if (link_name == NULL) - { - return ENUM_LINK_TYPE_NB; - } - - ret = ENUM_LINK_TYPE_NB; - for (i=0 ; i<sizeof(sLinkNameTable)/sizeof(link_name_entry) ; i++) - { - if (strcmp(sLinkNameTable[i].name, link_name) == 0) - { - ret = sLinkNameTable[i].value; - break; - } - } - - return ret; -} - - /* * Deferred callback called when client thread must be exited */ @@ -378,10 +276,7 @@ static int nfc_jni_configure_driver(struct nfc_jni_native_data *nat) /* Configure hardware link */ gDrvCfg.nClientId = phDal4Nfc_msgget(0, 0600); - property_get("ro.nfc.port", value, "unknown"); - gDrvCfg.nLinkType = parseLinkType(value); - - TRACE("phLibNfc_Mgt_ConfigureDriver(0x%08x, 0x%08x)", gDrvCfg.nClientId, gDrvCfg.nLinkType); + TRACE("phLibNfc_Mgt_ConfigureDriver(0x%08x, 0x%08x)", gDrvCfg.nClientId); REENTRANCE_LOCK(); status = phLibNfc_Mgt_ConfigureDriver(&gDrvCfg, &gHWRef); REENTRANCE_UNLOCK(); @@ -445,7 +340,9 @@ static int nfc_jni_initialize(struct nfc_jni_native_data *nat) { uint8_t firmware_status; uint8_t update = TRUE; int result = JNI_FALSE; - + const hw_module_t* hw_module; + nfc_pn544_device_t* pn544_dev = NULL; + int ret = 0; LOGD("Start Initialization\n"); /* Create the local semaphore */ @@ -453,6 +350,21 @@ static int nfc_jni_initialize(struct nfc_jni_native_data *nat) { { goto clean_and_return; } + /* Get EEPROM values and device port from product-specific settings */ + ret = hw_get_module(NFC_HARDWARE_MODULE_ID, &hw_module); + if (ret) { + LOGE("hw_get_module() failed."); + goto clean_and_return; + } + ret = nfc_pn544_open(hw_module, &pn544_dev); + if (ret) { + LOGE("Could not open pn544 hw_module."); + goto clean_and_return; + } + if (pn544_dev->num_eeprom_settings == 0 || pn544_dev->eeprom_settings == NULL) { + LOGE("Could not load EEPROM settings"); + goto clean_and_return; + } /* Reset device connected handle */ device_connected_flag = 0; @@ -547,13 +459,14 @@ force_download: // Update EEPROM settings TRACE("****** START EEPROM SETTINGS UPDATE ******"); - for (i = 0; i < EEDATA_SETTINGS_NUMBER; i++) + for (i = 0; i < pn544_dev->num_eeprom_settings; i++) { - gInputParam.buffer = EEDATA_Settings[i]; + gInputParam.buffer = &(pn544_dev->eeprom_settings[i*4]); gInputParam.length = 0x04; gOutputParam.buffer = resp; TRACE("> EEPROM SETTING: %d", i); + REENTRANCE_LOCK(); status = phLibNfc_Mgt_IoCtl(gHWRef, NFC_MEM_WRITE, &gInputParam, &gOutputParam, nfc_jni_ioctl_callback, (void *)&cb_data); REENTRANCE_UNLOCK(); @@ -665,7 +578,9 @@ clean_and_return: kill_client(nat); } } - + if (pn544_dev != NULL) { + nfc_pn544_close(pn544_dev); + } nfc_cb_data_deinit(&cb_data); return result; diff --git a/res/drawable-hdpi/back.png b/res/drawable-hdpi/back.png Binary files differdeleted file mode 100644 index dcad41d..0000000 --- a/res/drawable-hdpi/back.png +++ /dev/null diff --git a/res/layout/screenshot.xml b/res/layout/screenshot.xml index 2e12a59..24a3a71 100644 --- a/res/layout/screenshot.xml +++ b/res/layout/screenshot.xml @@ -22,14 +22,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" /> - <ImageView android:id="@+id/back" - android:layout_width="match_parent" - android:layout_height="match_parent" - android:adjustViewBounds="true" - android:src="@drawable/back" - android:scaleType="centerCrop" - android:visibility="gone" - /> + <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" diff --git a/res/raw/end.ogg b/res/raw/end.ogg Binary files differindex 6cf4b98..7199153 100644 --- a/res/raw/end.ogg +++ b/res/raw/end.ogg diff --git a/res/raw/error.ogg b/res/raw/error.ogg Binary files differindex fbbc356..71d14b4 100644 --- a/res/raw/error.ogg +++ b/res/raw/error.ogg diff --git a/res/raw/start.ogg b/res/raw/start.ogg Binary files differindex f7b1a00..3c4d8c5 100644 --- a/res/raw/start.ogg +++ b/res/raw/start.ogg diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml new file mode 100644 index 0000000..80a1be4 --- /dev/null +++ b/res/values-be/strings.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="78565911793142902">"Служба Nfc"</string> + <string name="nfcUserLabel" msgid="7708535817084357357">"Nfc"</string> + <string name="permlab_nfcAdmin" msgid="5329590200504457455">"кантроль над абароненым апаратным забеспячэннем з падтрымкай сувязi малога радыусу дзеяння"</string> + <string name="permdesc_nfcAdmin" msgid="1527271067096288484">"Дазваляе гэтаму прыкладанню кантраляваць абароненае апаратнае забеспячэнне з дапамогай сувязi малога радыусу дзеяння, напрыклад, каб змяняць рэгiстрацыйныя дадзеныя для плацяжу"</string> + <string name="inbound_me_profile_title" msgid="6146013785225412693">"Кантакт атрыманы праз NFC"</string> + <string name="inbound_me_profile_text" msgid="1409138030064787748">"Дакраніцеся, каб дадаць гэтага чалавека ў кантакты"</string> + <string name="outbound_me_profile_title" msgid="2523625031572784769">"Узаемадзеянне NFC завершанае"</string> + <string name="outbound_me_profile_text" msgid="7431318734941861000">"Націсніце, каб даслаць гэтаму чалавеку сваю кантактн. інфармацыю"</string> + <string name="accessibility_nfc_enabled" msgid="7796246979948787735">"NFC ўключаны."</string> + <string name="touch" msgid="4727218133711188355">"Краніце, каб перадаць"</string> +</resources> diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml new file mode 100644 index 0000000..d1eeca7 --- /dev/null +++ b/res/values-et/strings.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_name" msgid="78565911793142902">"Nfc teenus"</string> + <string name="nfcUserLabel" msgid="7708535817084357357">"Nfc"</string> + <string name="permlab_nfcAdmin" msgid="5329590200504457455">"Lähiväljaside turvalise riistvara juhtimine"</string> + <string name="permdesc_nfcAdmin" msgid="1527271067096288484">"Lubab rakendusel juhtida turvalist riistvara, mida kasutatakse lähiväljasideks, nt maksemandaatide muutmiseks."</string> + <string name="inbound_me_profile_title" msgid="6146013785225412693">"Kontakt saadud NFC kaudu"</string> + <string name="inbound_me_profile_text" msgid="1409138030064787748">"Koputage, et lisada see isik kontaktide hulka"</string> + <string name="outbound_me_profile_title" msgid="2523625031572784769">"NFC koostoime lõpetatud"</string> + <string name="outbound_me_profile_text" msgid="7431318734941861000">"Koputage, et anda sellele isikule oma kontaktandmed"</string> + <string name="accessibility_nfc_enabled" msgid="7796246979948787735">"NFC lubatud."</string> + <string name="touch" msgid="4727218133711188355">"Puudutage kiire kasutamiseks"</string> +</resources> diff --git a/src/com/android/nfc/P2pEventManager.java b/src/com/android/nfc/P2pEventManager.java index 18ec8ae..9273afa 100644 --- a/src/com/android/nfc/P2pEventManager.java +++ b/src/com/android/nfc/P2pEventManager.java @@ -110,7 +110,9 @@ public class P2pEventManager implements P2pEventListener, SendUi.Callback { playSound(mErrorSound); mSending = false; } - mSendUi.finish(SendUi.FINISH_SCALE_UP); + if (!mNdefSent && !mNdefReceived) { + mSendUi.finish(SendUi.FINISH_SCALE_UP); + } } @Override diff --git a/src/com/android/nfc/SendUi.java b/src/com/android/nfc/SendUi.java index 37c8cfc..37ac6e0 100644 --- a/src/com/android/nfc/SendUi.java +++ b/src/com/android/nfc/SendUi.java @@ -77,9 +77,6 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, static final int TEXT_HINT_ALPHA_DURATION_MS = 500; static final int TEXT_HINT_ALPHA_START_DELAY_MS = 300; - static final float[] BACKGROUND_SCALE_RANGE = {2.0f, 1.0f}; - static final int BACKGROUND_SCALE_DURATION_MS = 5000; - static final int FINISH_SCALE_UP = 0; static final int FINISH_SLIDE_OUT = 1; @@ -94,7 +91,6 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, final StatusBarManager mStatusBarManager; final View mScreenshotLayout; final ImageView mScreenshotView; - final ImageView mBackgroundImage; final TextureView mTextureView; final TextView mTextHint; final Callback mCallback; @@ -104,7 +100,6 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, final ObjectAnimator mFadeInAnimator; final ObjectAnimator mHintAnimator; final AnimatorSet mSuccessAnimatorSet; - final ObjectAnimator mBackgroundAnimator; final boolean mHardwareAccelerated; Bitmap mScreenshotBitmap; @@ -140,7 +135,6 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, mTextureView = (TextureView) mScreenshotLayout.findViewById(R.id.fireflies); mTextureView.setSurfaceTextureListener(this); - mBackgroundImage = (ImageView) mScreenshotLayout.findViewById(R.id.back); // We're only allowed to use hardware acceleration if // isHighEndGfx() returns true - otherwise, we're too limited // on resources to do it. @@ -148,11 +142,6 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, int hwAccelerationFlags = mHardwareAccelerated ? WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED : 0; - if (!mHardwareAccelerated) { - // Only show background in case we're not hw-accelerated - mBackgroundImage.setVisibility(View.VISIBLE); - } - mWindowLayoutParams = new WindowManager.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, 0, 0, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, @@ -209,12 +198,6 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, mSuccessAnimatorSet = new AnimatorSet(); mSuccessAnimatorSet.playSequentially(mFastCloneAnimator, mFadeInAnimator); - scaleUpX = PropertyValuesHolder.ofFloat("scaleX", BACKGROUND_SCALE_RANGE); - scaleUpY = PropertyValuesHolder.ofFloat("scaleY", BACKGROUND_SCALE_RANGE); - mBackgroundAnimator = ObjectAnimator.ofPropertyValuesHolder(mBackgroundImage, scaleUpX, scaleUpY); - mBackgroundAnimator.setInterpolator(new DecelerateInterpolator(2.0f)); - mBackgroundAnimator.setDuration(BACKGROUND_SCALE_DURATION_MS); - mAttached = false; } @@ -274,10 +257,6 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, mAttached = true; mPreAnimator.start(); - - if (!mHardwareAccelerated) { - mBackgroundAnimator.start(); - } } /** Show starting send animation */ @@ -356,6 +335,9 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, if (!mAttached) { return; } + // Immediately set to false, to prevent .cancel() calls + // below from immediately calling into dismiss() again. + mAttached = false; mPreAnimator.cancel(); mSlowSendAnimator.cancel(); mFastCloneAnimator.cancel(); @@ -363,7 +345,6 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, mScaleUpAnimator.cancel(); mWindowManager.removeView(mScreenshotLayout); mStatusBarManager.disable(StatusBarManager.DISABLE_NONE); - mAttached = false; releaseScreenshot(); } @@ -394,16 +375,19 @@ public class SendUi implements Animator.AnimatorListener, View.OnTouchListener, // take screenshots only in the natural orientation of the device :!) mDisplay.getRealMetrics(mDisplayMetrics); + boolean hasNavBar = mContext.getResources().getBoolean( + com.android.internal.R.bool.config_showNavigationBar); float[] dims = {mDisplayMetrics.widthPixels, mDisplayMetrics.heightPixels}; float degrees = getDegreesForRotation(mDisplay.getRotation()); final int statusBarHeight = mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.status_bar_height); + // Navbar has different sizes, depending on orientation - final int navBarHeight = mContext.getResources().getDimensionPixelSize( - com.android.internal.R.dimen.navigation_bar_height); - final int navBarWidth = mContext.getResources().getDimensionPixelSize( - com.android.internal.R.dimen.navigation_bar_width); + final int navBarHeight = hasNavBar ? mContext.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.navigation_bar_height) : 0; + final int navBarWidth = hasNavBar ? mContext.getResources().getDimensionPixelSize( + com.android.internal.R.dimen.navigation_bar_width) : 0; boolean requiresRotation = (degrees > 0); if (requiresRotation) { |