diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/jni/Android.mk | 4 | ||||
-rwxr-xr-x | core/jni/android_location_GpsLocationProvider.cpp | 23 |
2 files changed, 24 insertions, 3 deletions
diff --git a/core/jni/Android.mk b/core/jni/Android.mk index b752ecf..ac188b8 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -19,6 +19,10 @@ ifneq ($(USE_CUSTOM_RUNTIME_HEAP_MAX),) LOCAL_CFLAGS += -DCUSTOM_RUNTIME_HEAP_MAX=$(USE_CUSTOM_RUNTIME_HEAP_MAX) endif +ifneq ($(BOARD_USE_BROKEN_INJECT_XTRA_HACK),) + LOCAL_CFLAGS += -DUSE_BROKEN_INJECT_XTRA_HACK=1 +endif + LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES LOCAL_SRC_FILES:= \ diff --git a/core/jni/android_location_GpsLocationProvider.cpp b/core/jni/android_location_GpsLocationProvider.cpp index f60fe6d..52a4171 100755 --- a/core/jni/android_location_GpsLocationProvider.cpp +++ b/core/jni/android_location_GpsLocationProvider.cpp @@ -429,13 +429,30 @@ static jboolean android_location_GpsLocationProvider_supports_xtra(JNIEnv* env, return (sGpsXtraInterface != NULL); } -static void android_location_GpsLocationProvider_inject_xtra_data(JNIEnv* env, jobject obj, +#ifdef USE_BROKEN_INJECT_XTRA_HACK +static jboolean android_location_GpsLocationProvider_inject_xtra_data(JNIEnv* env, jobject obj, jbyteArray data, jint length) { + int ret = -1, tries; jbyte* bytes = env->GetByteArrayElements(data, 0); - sGpsXtraInterface->inject_xtra_data((char *)bytes, length); + for (tries = 0; tries < 5 && ret; ++tries) { + LOGV("Injecting XTRA data (try %d)\n", tries); + ret = sGpsXtraInterface->inject_xtra_data((char *)bytes, length); + } + env->ReleaseByteArrayElements(data, bytes, 0); + return (ret != 0); +} +#else +static jboolean android_location_GpsLocationProvider_inject_xtra_data(JNIEnv* env, jobject obj, + jbyteArray data, jint length) +{ + int ret; + jbyte* bytes = env->GetByteArrayElements(data, 0); + ret = sGpsXtraInterface->inject_xtra_data((char *)bytes, length); env->ReleaseByteArrayElements(data, bytes, 0); + return (ret != 0); } +#endif static void android_location_GpsLocationProvider_agps_data_conn_open(JNIEnv* env, jobject obj, jstring apn) { @@ -525,7 +542,7 @@ static JNINativeMethod sMethods[] = { {"native_inject_time", "(JJI)V", (void*)android_location_GpsLocationProvider_inject_time}, {"native_inject_location", "(DDF)V", (void*)android_location_GpsLocationProvider_inject_location}, {"native_supports_xtra", "()Z", (void*)android_location_GpsLocationProvider_supports_xtra}, - {"native_inject_xtra_data", "([BI)V", (void*)android_location_GpsLocationProvider_inject_xtra_data}, + {"native_inject_xtra_data", "([BI)Z", (void*)android_location_GpsLocationProvider_inject_xtra_data}, {"native_agps_data_conn_open", "(Ljava/lang/String;)V", (void*)android_location_GpsLocationProvider_agps_data_conn_open}, {"native_agps_data_conn_closed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_closed}, {"native_agps_data_conn_failed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_failed}, |