diff options
author | Baili Feng <bailif@codeaurora.org> | 2017-08-29 17:49:40 +0800 |
---|---|---|
committer | Baili Feng <bailif@codeaurora.org> | 2017-09-12 14:16:28 +0800 |
commit | f69296ba9eef3ba687887acf04c7c29eedbb342d (patch) | |
tree | 1f5d0d30787acd647c1c085bb38fc856b63fb4cd /android | |
parent | 8ac14eff60bf07d523721c54cf03648ddd1ed80e (diff) | |
download | gps-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.cpp | 58 | ||||
-rw-r--r-- | android/AGnss.h | 3 |
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; |