From 7445c50730a9f81de3926926bf74265653d6377a Mon Sep 17 00:00:00 2001 From: Bhavna Sharma Date: Tue, 15 Jan 2019 16:29:48 -0800 Subject: [PATCH] New structures and handling of new data in the pipe 1. KlobucharIonoModel 2. Additional parameters for Glonass 3. Add gps system time to ephemeris reports. CRs-Fixed: 2388931 Change-Id: Ibd08496c8eda2ce7571cbdd71ff0c179f7376aa7 --- core/EngineHubProxyBase.h | 11 +++++ core/LocAdapterBase.cpp | 8 ++++ core/LocAdapterBase.h | 3 ++ core/LocApiBase.cpp | 10 ++++ core/LocApiBase.h | 2 + gnss/GnssAdapter.cpp | 31 +++++++------ gnss/GnssAdapter.h | 3 ++ location/LocationDataTypes.h | 8 ++++ utils/gps_extended_c.h | 90 +++++++++++++++++++++++++++++++++++- 9 files changed, 150 insertions(+), 16 deletions(-) diff --git a/core/EngineHubProxyBase.h b/core/EngineHubProxyBase.h index 34af4d06..4239a508 100644 --- a/core/EngineHubProxyBase.h +++ b/core/EngineHubProxyBase.h @@ -90,6 +90,17 @@ public: (void) systemInfo; return false; } + + inline virtual bool gnssReportKlobucharIonoModel(const GnssKlobucharIonoModel& ionoModel) { + (void) ionoModel; + return false; + } + + inline virtual bool gnssReportAdditionalSystemInfo( + const GnssAdditionalSystemInfo& additionalSystemInfo) { + (void) additionalSystemInfo; + return false; + } }; typedef std::functionreportDeleteAidingDataEvent(aidingData)); } +void LocApiBase::reportKlobucharIonoModel(GnssKlobucharIonoModel & ionoModel) { + // loop through adapters, and deliver to the first handling adapter. + TO_1ST_HANDLING_LOCADAPTERS(mLocAdapters[i]->reportKlobucharIonoModelEvent(ionoModel)); +} + +void LocApiBase::reportGnssAdditionalSystemInfo(GnssAdditionalSystemInfo& additionalSystemInfo) { + // loop through adapters, and deliver to the first handling adapter. + TO_1ST_HANDLING_LOCADAPTERS(mLocAdapters[i]->reportGnssAdditionalSystemInfoEvent( + additionalSystemInfo)); +} void LocApiBase::reportSv(GnssSvNotification& svNotify) { diff --git a/core/LocApiBase.h b/core/LocApiBase.h index e5dfebf9..70bebc31 100644 --- a/core/LocApiBase.h +++ b/core/LocApiBase.h @@ -187,6 +187,8 @@ public: void requestOdcpi(OdcpiRequestInfo& request); void reportGnssEngEnergyConsumedEvent(uint64_t energyConsumedSinceFirstBoot); void reportDeleteAidingDataEvent(GnssAidingData& aidingData); + void reportKlobucharIonoModel(GnssKlobucharIonoModel& ionoModel); + void reportGnssAdditionalSystemInfo(GnssAdditionalSystemInfo& additionalSystemInfo); // downward calls // All below functions are to be defined by adapter specific modules: diff --git a/gnss/GnssAdapter.cpp b/gnss/GnssAdapter.cpp index 57d055c7..e0290ad4 100644 --- a/gnss/GnssAdapter.cpp +++ b/gnss/GnssAdapter.cpp @@ -1944,6 +1944,7 @@ GnssAdapter::updateClientsEventMask() mask |= LOC_API_ADAPTER_BIT_PARSED_UNPROPAGATED_POSITION_REPORT; mask |= LOC_API_ADAPTER_BIT_GNSS_SV_EPHEMERIS_REPORT; mask |= LOC_API_ADAPTER_BIT_LOC_SYSTEM_INFO; + mask |= LOC_API_ADAPTER_BIT_EVENT_REPORT_INFO; LOC_LOGd("Auto usecase, Enable MEAS/POLY/EPHEMERIS - mask 0x%" PRIx64 "", mask); @@ -3591,24 +3592,24 @@ void GnssAdapter::requestOdcpi(const OdcpiRequestInfo& request) bool GnssAdapter::reportDeleteAidingDataEvent(GnssAidingData& aidingData) { LOC_LOGD("%s]:", __func__); - - struct MsgHandleDeleteAidingDataEvent : public LocMsg { - GnssAdapter& mAdapter; - GnssAidingData mData; - inline MsgHandleDeleteAidingDataEvent(GnssAdapter& adapter, - GnssAidingData& data) : - LocMsg(), - mAdapter(adapter), - mData(data) {} - inline virtual void proc() const { - mAdapter.mEngHubProxy->gnssDeleteAidingData(mData); - } - }; - - sendMsg(new MsgHandleDeleteAidingDataEvent(*this, aidingData)); + mEngHubProxy->gnssDeleteAidingData(aidingData); return true; } +bool GnssAdapter::reportKlobucharIonoModelEvent(GnssKlobucharIonoModel & ionoModel) +{ + LOC_LOGD("%s]:", __func__); + mEngHubProxy->gnssReportKlobucharIonoModel(ionoModel); + return true; +} + +bool GnssAdapter::reportGnssAdditionalSystemInfoEvent( + GnssAdditionalSystemInfo & additionalSystemInfo) +{ + LOC_LOGD("%s]:", __func__); + mEngHubProxy->gnssReportAdditionalSystemInfo(additionalSystemInfo); + return true; +} void GnssAdapter::initOdcpiCommand(const OdcpiRequestCallback& callback) { diff --git a/gnss/GnssAdapter.h b/gnss/GnssAdapter.h index 1682f027..55cadba6 100644 --- a/gnss/GnssAdapter.h +++ b/gnss/GnssAdapter.h @@ -356,6 +356,9 @@ public: virtual bool releaseATL(int connHandle); virtual bool requestOdcpiEvent(OdcpiRequestInfo& request); virtual bool reportDeleteAidingDataEvent(GnssAidingData& aidingData); + virtual bool reportKlobucharIonoModelEvent(GnssKlobucharIonoModel& ionoModel); + virtual bool reportGnssAdditionalSystemInfoEvent( + GnssAdditionalSystemInfo& additionalSystemInfo); /* ======== UTILITIES ================================================================= */ bool needReport(const UlpLocation& ulpLocation, diff --git a/location/LocationDataTypes.h b/location/LocationDataTypes.h index e4784735..99e6d45d 100644 --- a/location/LocationDataTypes.h +++ b/location/LocationDataTypes.h @@ -545,6 +545,14 @@ typedef enum { GNSS_SIGNAL_SBAS_L1 = (1<<17) } GnssSignalTypeBits; +#define GNSS_SIGNAL_TYPE_MASK_ALL\ + (GNSS_SIGNAL_GPS_L1CA | GNSS_SIGNAL_GPS_L1C | GNSS_SIGNAL_GPS_L2 |\ + GNSS_SIGNAL_GPS_L5| GNSS_SIGNAL_GLONASS_G1 | GNSS_SIGNAL_GLONASS_G2 |\ + GNSS_SIGNAL_GALILEO_E1 | GNSS_SIGNAL_GALILEO_E5A | GNSS_SIGNAL_GALILEO_E5B |\ + GNSS_SIGNAL_BEIDOU_B1I | GNSS_SIGNAL_BEIDOU_B1C | GNSS_SIGNAL_BEIDOU_B2I|\ + GNSS_SIGNAL_BEIDOU_B2AI | GNSS_SIGNAL_QZSS_L1CA | GNSS_SIGNAL_QZSS_L1S |\ + GNSS_SIGNAL_QZSS_L2| GNSS_SIGNAL_QZSS_L5 | GNSS_SIGNAL_SBAS_L1) + typedef enum { GNSS_LOC_SV_SYSTEM_UNKNOWN = 0, diff --git a/utils/gps_extended_c.h b/utils/gps_extended_c.h index 22b2dd03..cd661b3a 100644 --- a/utils/gps_extended_c.h +++ b/utils/gps_extended_c.h @@ -407,6 +407,13 @@ typedef uint32_t LocPosDataMask; /* Bitmask to specify whether Navigation data has Body pitch Unc*/ #define LOC_NAV_DATA_HAS_PITCH_UNC ((LocPosDataMask)0x0200) +typedef uint32_t GnssAdditionalSystemInfoMask; +/* Bitmask to specify whether Tauc is valid */ +#define GNSS_ADDITIONAL_SYSTEMINFO_HAS_TAUC ((GnssAdditionalSystemInfoMask)0x0001) +/* Bitmask to specify whether leapSec is valid */ +#define GNSS_ADDITIONAL_SYSTEMINFO_HAS_LEAP_SEC ((GnssAdditionalSystemInfoMask)0x0002) + + /** GPS PRN Range */ #define GPS_SV_PRN_MIN 1 #define GPS_SV_PRN_MAX 32 @@ -856,6 +863,7 @@ enum loc_api_adapter_event_index { LOC_API_ADAPTER_GNSS_SV_EPHEMERIS_REPORT, // GNSS SV Ephemeris Report LOC_API_ADAPTER_LOC_SYSTEM_INFO, // Location system info event LOC_API_ADAPTER_GNSS_NHZ_MEASUREMENT_REPORT, // GNSS SV nHz measurement report + LOC_API_ADAPTER_EVENT_REPORT_INFO, // Event report info LOC_API_ADAPTER_EVENT_MAX }; @@ -897,6 +905,7 @@ enum loc_api_adapter_event_index { #define LOC_API_ADAPTER_BIT_GNSS_SV_EPHEMERIS_REPORT (1ULL<