mirror of
https://github.com/Evolution-X-Devices/device_google_walleye
synced 2026-02-02 03:53:59 +00:00
Update to 07.00.00.253.042
am: 926e2bafb3
Change-Id: I7aa0f599d69f08fb005732bd94a5514a1289696a
This commit is contained in:
175
location/loc_api/loc_api_v02/LocApiV02.cpp
Executable file → Normal file
175
location/loc_api/loc_api_v02/LocApiV02.cpp
Executable file → Normal file
@@ -151,10 +151,20 @@ static void globalRespCb(locClientHandleType clientHandle,
|
||||
return;
|
||||
}
|
||||
|
||||
// process the sync call
|
||||
// use pDeleteAssistDataInd as a dummy pointer
|
||||
loc_sync_process_ind(clientHandle, respId,
|
||||
switch(respId)
|
||||
{
|
||||
case QMI_LOC_GET_AVAILABLE_WWAN_POSITION_IND_V02:
|
||||
if (respPayload.pGetAvailWwanPositionInd != NULL) {
|
||||
locApiV02Instance->handleWwanZppFixIndication(*respPayload.pGetAvailWwanPositionInd);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// process the sync call
|
||||
// use pDeleteAssistDataInd as a dummy pointer
|
||||
loc_sync_process_ind(clientHandle, respId,
|
||||
(void *)respPayload.pDeleteAssistDataInd, respPayloadSize);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* global error callback, it will call the handle service down
|
||||
@@ -919,8 +929,11 @@ enum loc_api_adapter_err LocApiV02 :: deleteAidingData(GpsAidingData f)
|
||||
}
|
||||
}
|
||||
|
||||
if (eLOC_CLIENT_FAILURE_UNSUPPORTED == status) {
|
||||
if (eLOC_CLIENT_FAILURE_UNSUPPORTED == status ||
|
||||
eLOC_CLIENT_FAILURE_INTERNAL == status) {
|
||||
// If the new API is not supported we fall back on the old one
|
||||
// The error could be eLOC_CLIENT_FAILURE_INTERNAL if
|
||||
// QMI_LOC_DELETE_GNSS_SERVICE_DATA_REQ_V02 is not in the .idl file
|
||||
LOC_LOGD("%s:%d]: QMI_LOC_DELETE_GNSS_SERVICE_DATA_REQ_V02 not supported"
|
||||
"We use QMI_LOC_DELETE_ASSIST_DATA_REQ_V02\n",
|
||||
__func__, __LINE__);
|
||||
@@ -3698,6 +3711,7 @@ void LocApiV02 :: eventCb(locClientHandleType clientHandle,
|
||||
__LINE__);
|
||||
reportSvPolynomial(eventPayload.pGnssSvPolyInfoEvent);
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3910,102 +3924,25 @@ void LocApiV02 :: closeDataCall()
|
||||
}
|
||||
|
||||
enum loc_api_adapter_err LocApiV02 ::
|
||||
getWwanZppFix(GpsLocation &zppLoc)
|
||||
getWwanZppFix()
|
||||
{
|
||||
locClientReqUnionType req_union;
|
||||
qmiLocGetAvailWwanPositionReqMsgT_v02 zpp_req;
|
||||
qmiLocGetAvailWwanPositionIndMsgT_v02 zpp_ind;
|
||||
memset(&zpp_ind, 0, sizeof(zpp_ind));
|
||||
memset(&zpp_req, 0, sizeof(zpp_req));
|
||||
memset(&zppLoc, 0, sizeof(zppLoc));
|
||||
|
||||
req_union.pGetAvailWwanPositionReq = &zpp_req;
|
||||
|
||||
LOC_LOGD("%s:%d]: Get ZPP Fix from available wwan position\n", __func__, __LINE__);
|
||||
|
||||
locClientStatusEnumType status =
|
||||
loc_sync_send_req(clientHandle,
|
||||
QMI_LOC_GET_AVAILABLE_WWAN_POSITION_REQ_V02,
|
||||
req_union, LOC_ENGINE_SYNC_REQUEST_TIMEOUT,
|
||||
QMI_LOC_GET_AVAILABLE_WWAN_POSITION_IND_V02,
|
||||
&zpp_ind);
|
||||
locClientSendReq(clientHandle,
|
||||
QMI_LOC_GET_AVAILABLE_WWAN_POSITION_REQ_V02,
|
||||
req_union);
|
||||
|
||||
if (status != eLOC_CLIENT_SUCCESS ||
|
||||
eQMI_LOC_SUCCESS_V02 != zpp_ind.status) {
|
||||
LOC_LOGD ("%s:%d]: getWwanZppFix may not be supported by modem"
|
||||
" so will fallback to getBestAvailableZppFix"
|
||||
" status = %s, zpp_ind.status = %s ",
|
||||
__func__, __LINE__,
|
||||
loc_get_v02_client_status_name(status),
|
||||
loc_get_v02_qmi_status_name(zpp_ind.status));
|
||||
|
||||
LocPosTechMask tech_mask;
|
||||
loc_api_adapter_err ret;
|
||||
ret = getBestAvailableZppFix(zppLoc, tech_mask);
|
||||
if (ret == LOC_API_ADAPTER_ERR_SUCCESS &&
|
||||
tech_mask != LOC_POS_TECH_MASK_DEFAULT &&
|
||||
tech_mask & LOC_POS_TECH_MASK_CELLID) {
|
||||
return LOC_API_ADAPTER_ERR_SUCCESS;
|
||||
} else {
|
||||
LOC_LOGD ("%s:%d]: getBestAvailableZppFix failed or"
|
||||
" technoloy source includes GNSS that is not allowed"
|
||||
" ret = %u, tech_mask = 0x%X ",
|
||||
__func__, __LINE__, ret, tech_mask);
|
||||
return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
LOC_LOGD("Got Zpp fix location validity (lat:%d, lon:%d, timestamp:%d accuracy:%d)",
|
||||
zpp_ind.latitude_valid,
|
||||
zpp_ind.longitude_valid,
|
||||
zpp_ind.timestampUtc_valid,
|
||||
zpp_ind.horUncCircular_valid);
|
||||
|
||||
LOC_LOGD("(%.7f, %.7f), timestamp %llu, accuracy %f",
|
||||
zpp_ind.latitude,
|
||||
zpp_ind.longitude,
|
||||
zpp_ind.timestampUtc,
|
||||
zpp_ind.horUncCircular);
|
||||
|
||||
zppLoc.size = sizeof(GpsLocation);
|
||||
if (zpp_ind.timestampUtc_valid) {
|
||||
zppLoc.timestamp = zpp_ind.timestampUtc;
|
||||
}
|
||||
else {
|
||||
/* The UTC time from modem is not valid.
|
||||
In this case, we use current system time instead.*/
|
||||
|
||||
struct timespec time_info_current;
|
||||
clock_gettime(CLOCK_REALTIME,&time_info_current);
|
||||
zppLoc.timestamp = (time_info_current.tv_sec)*1e3 +
|
||||
(time_info_current.tv_nsec)/1e6;
|
||||
LOC_LOGD("zpp timestamp got from system: %llu", zppLoc.timestamp);
|
||||
}
|
||||
|
||||
if ((zpp_ind.latitude_valid == false) ||
|
||||
(zpp_ind.longitude_valid == false) ||
|
||||
(zpp_ind.horUncCircular_valid == false)) {
|
||||
if (status == eLOC_CLIENT_SUCCESS) {
|
||||
return LOC_API_ADAPTER_ERR_SUCCESS;
|
||||
} else {
|
||||
return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
|
||||
}
|
||||
|
||||
zppLoc.flags = GPS_LOCATION_HAS_LAT_LONG | GPS_LOCATION_HAS_ACCURACY;
|
||||
zppLoc.latitude = zpp_ind.latitude;
|
||||
zppLoc.longitude = zpp_ind.longitude;
|
||||
zppLoc.accuracy = zpp_ind.horUncCircular;
|
||||
|
||||
// If horCircularConfidence_valid is true, and horCircularConfidence value
|
||||
// is less than 68%, then scale the accuracy value to 68% confidence.
|
||||
if (zpp_ind.horCircularConfidence_valid)
|
||||
{
|
||||
scaleAccuracyTo68PercentConfidence(zpp_ind.horCircularConfidence,zppLoc);
|
||||
}
|
||||
|
||||
if (zpp_ind.altitudeWrtEllipsoid_valid) {
|
||||
zppLoc.flags |= GPS_LOCATION_HAS_ALTITUDE;
|
||||
zppLoc.altitude = zpp_ind.altitudeWrtEllipsoid;
|
||||
}
|
||||
|
||||
return LOC_API_ADAPTER_ERR_SUCCESS;
|
||||
}
|
||||
|
||||
enum loc_api_adapter_err LocApiV02 :: getBestAvailableZppFix(GpsLocation & zppLoc)
|
||||
@@ -4450,3 +4387,65 @@ void LocApiV02 :: cacheGnssMeasurementSupport()
|
||||
|
||||
LOC_LOGV("%s:%d]: mGnssMeasurementSupported is %d\n", __func__, __LINE__, mGnssMeasurementSupported);
|
||||
}
|
||||
|
||||
void LocApiV02 ::
|
||||
handleWwanZppFixIndication(const qmiLocGetAvailWwanPositionIndMsgT_v02& zpp_ind)
|
||||
{
|
||||
GpsLocation zppLoc;
|
||||
memset(&zppLoc, 0, sizeof(zppLoc));
|
||||
|
||||
LOC_LOGD("Got Wwan Zpp fix location validity (lat:%d, lon:%d, timestamp:%d accuracy:%d)\n "
|
||||
"(%.7f, %.7f), timestamp %llu, accuracy %f",
|
||||
zpp_ind.latitude_valid,
|
||||
zpp_ind.longitude_valid,
|
||||
zpp_ind.timestampUtc_valid,
|
||||
zpp_ind.horUncCircular_valid,
|
||||
zpp_ind.latitude,
|
||||
zpp_ind.longitude,
|
||||
zpp_ind.timestampUtc,
|
||||
zpp_ind.horUncCircular);
|
||||
|
||||
if ((zpp_ind.latitude_valid == false) ||
|
||||
(zpp_ind.longitude_valid == false) ||
|
||||
(zpp_ind.horUncCircular_valid == false)) {
|
||||
LOC_LOGE(" Location not valid lat=%u lon=%u unc=%u",
|
||||
zpp_ind.latitude_valid,
|
||||
zpp_ind.longitude_valid,
|
||||
zpp_ind.horUncCircular_valid);
|
||||
return;
|
||||
}
|
||||
|
||||
zppLoc.size = sizeof(GpsLocation);
|
||||
if (zpp_ind.timestampUtc_valid) {
|
||||
zppLoc.timestamp = zpp_ind.timestampUtc;
|
||||
}
|
||||
else {
|
||||
/* The UTC time from modem is not valid.
|
||||
In this case, we use current system time instead.*/
|
||||
|
||||
struct timespec time_info_current;
|
||||
clock_gettime(CLOCK_REALTIME,&time_info_current);
|
||||
zppLoc.timestamp = (time_info_current.tv_sec)*1e3 +
|
||||
(time_info_current.tv_nsec)/1e6;
|
||||
LOC_LOGD("zpp timestamp got from system: %llu", zppLoc.timestamp);
|
||||
}
|
||||
|
||||
zppLoc.flags = GPS_LOCATION_HAS_LAT_LONG | GPS_LOCATION_HAS_ACCURACY;
|
||||
zppLoc.latitude = zpp_ind.latitude;
|
||||
zppLoc.longitude = zpp_ind.longitude;
|
||||
zppLoc.accuracy = zpp_ind.horUncCircular;
|
||||
|
||||
// If horCircularConfidence_valid is true, and horCircularConfidence value
|
||||
// is less than 68%, then scale the accuracy value to 68% confidence.
|
||||
if (zpp_ind.horCircularConfidence_valid)
|
||||
{
|
||||
scaleAccuracyTo68PercentConfidence(zpp_ind.horCircularConfidence,zppLoc);
|
||||
}
|
||||
|
||||
if (zpp_ind.altitudeWrtEllipsoid_valid) {
|
||||
zppLoc.flags |= GPS_LOCATION_HAS_ALTITUDE;
|
||||
zppLoc.altitude = zpp_ind.altitudeWrtEllipsoid;
|
||||
}
|
||||
|
||||
LocApiBase::reportWwanZppFix(zppLoc);
|
||||
}
|
||||
|
||||
@@ -228,7 +228,9 @@ public:
|
||||
virtual enum loc_api_adapter_err setAGLONASSProtocol(unsigned long aGlonassProtocol);
|
||||
virtual enum loc_api_adapter_err setLPPeProtocol(unsigned long lppeCP, unsigned long lppeUP);
|
||||
virtual enum loc_api_adapter_err
|
||||
getWwanZppFix(GpsLocation & zppLoc);
|
||||
getWwanZppFix();
|
||||
virtual void
|
||||
handleWwanZppFixIndication(const qmiLocGetAvailWwanPositionIndMsgT_v02 &zpp_ind);
|
||||
virtual enum loc_api_adapter_err
|
||||
getBestAvailableZppFix(GpsLocation & zppLoc);
|
||||
virtual enum loc_api_adapter_err
|
||||
@@ -254,6 +256,7 @@ public:
|
||||
Set Gnss Constellation Config
|
||||
*/
|
||||
virtual bool gnssConstellationConfig();
|
||||
|
||||
};
|
||||
|
||||
extern "C" LocApiBase* getLocApi(const MsgTask* msgTask,
|
||||
|
||||
@@ -69,6 +69,9 @@ public class QtiCallConstants {
|
||||
/* Call encryption status extra key. The value will be a boolean. */
|
||||
public static final String CALL_ENCRYPTION_EXTRA_KEY = "CallEncryption";
|
||||
|
||||
/* Call History Info extra key. The value will be a ArrayList of Strings. */
|
||||
public static final String EXTRAS_CALL_HISTORY_INFO = "CallHistoryInfo";
|
||||
|
||||
/* Call fail code extra key name */
|
||||
public static final String EXTRAS_KEY_CALL_FAIL_EXTRA_CODE = "CallFailExtraCode";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user