summaryrefslogtreecommitdiff
path: root/android
diff options
context:
space:
mode:
authorBaili Feng <bailif@codeaurora.org>2017-08-29 17:49:40 +0800
committerBaili Feng <bailif@codeaurora.org>2017-09-12 14:16:28 +0800
commitf69296ba9eef3ba687887acf04c7c29eedbb342d (patch)
tree1f5d0d30787acd647c1c085bb38fc856b63fb4cd /android
parent8ac14eff60bf07d523721c54cf03648ddd1ed80e (diff)
downloadgps-f69296ba9eef3ba687887acf04c7c29eedbb342d.tar.gz
Init default agps status callback in GnssAdapter
Call LocNetIfaceAgps_getStatusCb implemented in libloc_net_iface.so, use the return function as default agps status callback. Change-Id: I4d966a888e312c2d0fb1a6c9e30752294876e500 CRs-Fixed: 2064002
Diffstat (limited to 'android')
-rw-r--r--android/AGnss.cpp58
-rw-r--r--android/AGnss.h3
2 files changed, 56 insertions, 5 deletions
diff --git a/android/AGnss.cpp b/android/AGnss.cpp
index b5f76bb..e76671c 100644
--- a/android/AGnss.cpp
+++ b/android/AGnss.cpp
@@ -23,7 +23,6 @@
#include <log_util.h>
#include "Gnss.h"
#include "AGnss.h"
-#include <gps_extended_c.h>
namespace android {
namespace hardware {
@@ -36,9 +35,44 @@ sp<IAGnssCallback> AGnss::sAGnssCbIface = nullptr;
AGnss::AGnss(Gnss* gnss) : mGnss(gnss) {
}
-void AGnss::agnssStatusIpV4Cb(IAGnssCallback::AGnssStatusIpV4 status){
+void AGnss::agnssStatusIpV4Cb(AGnssExtStatusIpV4 status){
+ IAGnssCallback::AGnssStatusIpV4 st = {};
+
+ switch (status.type) {
+ case LOC_AGPS_TYPE_SUPL:
+ st.type = IAGnssCallback::AGnssType::TYPE_SUPL;
+ break;
+ case LOC_AGPS_TYPE_C2K:
+ st.type = IAGnssCallback::AGnssType::TYPE_C2K;
+ break;
+ default:
+ LOC_LOGE("invalid type: %d", status.type);
+ return;
+ }
+
+ switch (status.status) {
+ case LOC_GPS_REQUEST_AGPS_DATA_CONN:
+ st.status = IAGnssCallback::AGnssStatusValue::REQUEST_AGNSS_DATA_CONN;
+ break;
+ case LOC_GPS_RELEASE_AGPS_DATA_CONN:
+ st.status = IAGnssCallback::AGnssStatusValue::RELEASE_AGNSS_DATA_CONN;
+ break;
+ case LOC_GPS_AGPS_DATA_CONNECTED:
+ st.status = IAGnssCallback::AGnssStatusValue::AGNSS_DATA_CONNECTED;
+ break;
+ case LOC_GPS_AGPS_DATA_CONN_DONE:
+ st.status = IAGnssCallback::AGnssStatusValue::AGNSS_DATA_CONN_DONE;
+ break;
+ case LOC_GPS_AGPS_DATA_CONN_FAILED:
+ st.status = IAGnssCallback::AGnssStatusValue::AGNSS_DATA_CONN_FAILED;
+ break;
+ default:
+ LOC_LOGE("invalid status: %d", status.status);
+ return;
+ }
+ st.ipV4Addr = status.ipV4Addr;
- sAGnssCbIface->agnssStatusIpV4Cb(status);
+ sAGnssCbIface->agnssStatusIpV4Cb(st);
}
Return<void> AGnss::setCallback(const sp<IAGnssCallback>& callback) {
@@ -97,8 +131,24 @@ Return<bool> AGnss::dataConnOpen(const hidl_string& apn,
LOC_LOGD("dataConnOpen APN name = [%s]", apn.c_str());
+ AGpsBearerType bearerType;
+ switch (apnIpType) {
+ case IAGnss::ApnIpType::IPV4:
+ bearerType = AGPS_APN_BEARER_IPV4;
+ break;
+ case IAGnss::ApnIpType::IPV6:
+ bearerType = AGPS_APN_BEARER_IPV6;
+ break;
+ case IAGnss::ApnIpType::IPV4V6:
+ bearerType = AGPS_APN_BEARER_IPV4V6;
+ break;
+ default:
+ bearerType = AGPS_APN_BEARER_IPV4;
+ break;
+ }
+
mGnss->getGnssInterface()->agpsDataConnOpen(
- LOC_AGPS_TYPE_SUPL, apn.c_str(), apn.size(), (int)apnIpType);
+ LOC_AGPS_TYPE_SUPL, apn.c_str(), apn.size(), (int)bearerType);
return true;
}
diff --git a/android/AGnss.h b/android/AGnss.h
index f4216b0..a3f4a87 100644
--- a/android/AGnss.h
+++ b/android/AGnss.h
@@ -23,6 +23,7 @@
#include <android/hardware/gnss/1.0/IAGnss.h>
#include <hidl/Status.h>
+#include <gps_extended_c.h>
namespace android {
namespace hardware {
@@ -60,7 +61,7 @@ struct AGnss : public IAGnss {
const hidl_string& hostname, int32_t port) override;
/* Data call setup callback passed down to GNSS HAL implementation */
- static void agnssStatusIpV4Cb(IAGnssCallback::AGnssStatusIpV4 status);
+ static void agnssStatusIpV4Cb(AGnssExtStatusIpV4 status);
private:
Gnss* mGnss = nullptr;