diff options
| author | 2011-03-01 20:56:00 -0800 | |
|---|---|---|
| committer | 2011-07-28 16:50:45 -0400 | |
| commit | 8efd74dbedb65f69734318d9d6be70767f30b57a (patch) | |
| tree | 74ca8726784a2348023dda04ec9318df27f28f4c | |
| parent | 0ff79e88e2d90f80d0346e0485abe773ca85c44d (diff) | |
gps: Adding ip address for AGps
Change-Id: Ic590187d159853de2f1bd2912e159f0a00d8fb10
| -rwxr-xr-x | services/java/com/android/server/location/GpsLocationProvider.java | 21 | ||||
| -rwxr-xr-x | services/jni/com_android_server_location_GpsLocationProvider.cpp | 11 |
2 files changed, 29 insertions, 3 deletions
diff --git a/services/java/com/android/server/location/GpsLocationProvider.java b/services/java/com/android/server/location/GpsLocationProvider.java index 834119abd4bd..53f08e176c30 100755 --- a/services/java/com/android/server/location/GpsLocationProvider.java +++ b/services/java/com/android/server/location/GpsLocationProvider.java @@ -253,6 +253,7 @@ public class GpsLocationProvider implements LocationProviderInterface { private String mAGpsApn; private int mAGpsDataConnectionState; + private int mAGpsDataConnectionIpAddr; private final ConnectivityManager mConnMgr; private final GpsNetInitiatedHandler mNIHandler; @@ -503,6 +504,14 @@ public class GpsLocationProvider implements LocationProviderInterface { apnName = "dummy-apn"; } mAGpsApn = apnName; + if (DEBUG) Log.d(TAG, "mAGpsDataConnectionIpAddr " + mAGpsDataConnectionIpAddr); + if (mAGpsDataConnectionIpAddr != 0xffffffff) { + boolean route_result; + if (DEBUG) Log.d(TAG, "call requestRouteToHost"); + route_result = mConnMgr.requestRouteToHost(ConnectivityManager.TYPE_MOBILE_SUPL, + mAGpsDataConnectionIpAddr); + if (route_result == false) Log.d(TAG, "call requestRouteToHost failed"); + } if (DEBUG) Log.d(TAG, "call native_agps_data_conn_open"); native_agps_data_conn_open(apnName); mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN; @@ -1230,7 +1239,7 @@ public class GpsLocationProvider implements LocationProviderInterface { /** * called from native code to update AGPS status */ - private void reportAGpsStatus(int type, int status) { + private void reportAGpsStatus(int type, int status, int ipaddr) { switch (status) { case GPS_REQUEST_AGPS_DATA_CONN: if (DEBUG) Log.d(TAG, "GPS_REQUEST_AGPS_DATA_CONN"); @@ -1239,9 +1248,19 @@ public class GpsLocationProvider implements LocationProviderInterface { mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING; int result = mConnMgr.startUsingNetworkFeature( ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_SUPL); + mAGpsDataConnectionIpAddr = ipaddr; if (result == Phone.APN_ALREADY_ACTIVE) { if (DEBUG) Log.d(TAG, "Phone.APN_ALREADY_ACTIVE"); if (mAGpsApn != null) { + Log.d(TAG, "mAGpsDataConnectionIpAddr " + mAGpsDataConnectionIpAddr); + if (mAGpsDataConnectionIpAddr != 0xffffffff) { + boolean route_result; + if (DEBUG) Log.d(TAG, "call requestRouteToHost"); + route_result = mConnMgr.requestRouteToHost( + ConnectivityManager.TYPE_MOBILE_SUPL, + mAGpsDataConnectionIpAddr); + if (route_result == false) Log.d(TAG, "call requestRouteToHost failed"); + } native_agps_data_conn_open(mAGpsApn); mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN; } else { diff --git a/services/jni/com_android_server_location_GpsLocationProvider.cpp b/services/jni/com_android_server_location_GpsLocationProvider.cpp index 6d4ad9ac4a88..d0e8e57667da 100755 --- a/services/jni/com_android_server_location_GpsLocationProvider.cpp +++ b/services/jni/com_android_server_location_GpsLocationProvider.cpp @@ -154,8 +154,15 @@ GpsXtraCallbacks sGpsXtraCallbacks = { static void agps_status_callback(AGpsStatus* agps_status) { JNIEnv* env = AndroidRuntime::getJNIEnv(); + + uint32_t ipaddr; + // ipaddr field was not included in original AGpsStatus + if (agps_status->size >= sizeof(AGpsStatus)) + ipaddr = agps_status->ipaddr; + else + ipaddr = 0xFFFFFFFF; env->CallVoidMethod(mCallbacksObj, method_reportAGpsStatus, - agps_status->type, agps_status->status); + agps_status->type, agps_status->status, ipaddr); checkAndClearExceptionFromCallback(env, __FUNCTION__); } @@ -224,7 +231,7 @@ static void android_location_GpsLocationProvider_class_init_native(JNIEnv* env, method_reportLocation = env->GetMethodID(clazz, "reportLocation", "(IDDDFFFJ)V"); method_reportStatus = env->GetMethodID(clazz, "reportStatus", "(I)V"); method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "()V"); - method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(II)V"); + method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(III)V"); method_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)V"); method_setEngineCapabilities = env->GetMethodID(clazz, "setEngineCapabilities", "(I)V"); method_xtraDownloadRequest = env->GetMethodID(clazz, "xtraDownloadRequest", "()V"); |