* commit '5f7203eb258503bc5d2ba29176bdf483a68a93b8': gps: Adding ip address for AGps
This commit is contained in:
@ -253,6 +253,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
|
|||||||
|
|
||||||
private String mAGpsApn;
|
private String mAGpsApn;
|
||||||
private int mAGpsDataConnectionState;
|
private int mAGpsDataConnectionState;
|
||||||
|
private int mAGpsDataConnectionIpAddr;
|
||||||
private final ConnectivityManager mConnMgr;
|
private final ConnectivityManager mConnMgr;
|
||||||
private final GpsNetInitiatedHandler mNIHandler;
|
private final GpsNetInitiatedHandler mNIHandler;
|
||||||
|
|
||||||
@ -503,6 +504,14 @@ public class GpsLocationProvider implements LocationProviderInterface {
|
|||||||
apnName = "dummy-apn";
|
apnName = "dummy-apn";
|
||||||
}
|
}
|
||||||
mAGpsApn = apnName;
|
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");
|
if (DEBUG) Log.d(TAG, "call native_agps_data_conn_open");
|
||||||
native_agps_data_conn_open(apnName);
|
native_agps_data_conn_open(apnName);
|
||||||
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN;
|
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN;
|
||||||
@ -1230,7 +1239,7 @@ public class GpsLocationProvider implements LocationProviderInterface {
|
|||||||
/**
|
/**
|
||||||
* called from native code to update AGPS status
|
* 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) {
|
switch (status) {
|
||||||
case GPS_REQUEST_AGPS_DATA_CONN:
|
case GPS_REQUEST_AGPS_DATA_CONN:
|
||||||
if (DEBUG) Log.d(TAG, "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;
|
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPENING;
|
||||||
int result = mConnMgr.startUsingNetworkFeature(
|
int result = mConnMgr.startUsingNetworkFeature(
|
||||||
ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_SUPL);
|
ConnectivityManager.TYPE_MOBILE, Phone.FEATURE_ENABLE_SUPL);
|
||||||
|
mAGpsDataConnectionIpAddr = ipaddr;
|
||||||
if (result == Phone.APN_ALREADY_ACTIVE) {
|
if (result == Phone.APN_ALREADY_ACTIVE) {
|
||||||
if (DEBUG) Log.d(TAG, "Phone.APN_ALREADY_ACTIVE");
|
if (DEBUG) Log.d(TAG, "Phone.APN_ALREADY_ACTIVE");
|
||||||
if (mAGpsApn != null) {
|
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);
|
native_agps_data_conn_open(mAGpsApn);
|
||||||
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN;
|
mAGpsDataConnectionState = AGPS_DATA_CONNECTION_OPEN;
|
||||||
} else {
|
} else {
|
||||||
|
@ -154,8 +154,15 @@ GpsXtraCallbacks sGpsXtraCallbacks = {
|
|||||||
static void agps_status_callback(AGpsStatus* agps_status)
|
static void agps_status_callback(AGpsStatus* agps_status)
|
||||||
{
|
{
|
||||||
JNIEnv* env = AndroidRuntime::getJNIEnv();
|
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,
|
env->CallVoidMethod(mCallbacksObj, method_reportAGpsStatus,
|
||||||
agps_status->type, agps_status->status);
|
agps_status->type, agps_status->status, ipaddr);
|
||||||
checkAndClearExceptionFromCallback(env, __FUNCTION__);
|
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_reportLocation = env->GetMethodID(clazz, "reportLocation", "(IDDDFFFJ)V");
|
||||||
method_reportStatus = env->GetMethodID(clazz, "reportStatus", "(I)V");
|
method_reportStatus = env->GetMethodID(clazz, "reportStatus", "(I)V");
|
||||||
method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "()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_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)V");
|
||||||
method_setEngineCapabilities = env->GetMethodID(clazz, "setEngineCapabilities", "(I)V");
|
method_setEngineCapabilities = env->GetMethodID(clazz, "setEngineCapabilities", "(I)V");
|
||||||
method_xtraDownloadRequest = env->GetMethodID(clazz, "xtraDownloadRequest", "()V");
|
method_xtraDownloadRequest = env->GetMethodID(clazz, "xtraDownloadRequest", "()V");
|
||||||
|
Reference in New Issue
Block a user