diff options
Diffstat (limited to 'gps/gnss/GnssAdapter.h')
-rw-r--r-- | gps/gnss/GnssAdapter.h | 341 |
1 files changed, 0 insertions, 341 deletions
diff --git a/gps/gnss/GnssAdapter.h b/gps/gnss/GnssAdapter.h deleted file mode 100644 index 0609e6d..0000000 --- a/gps/gnss/GnssAdapter.h +++ /dev/null @@ -1,341 +0,0 @@ -/* Copyright (c) 2017, The Linux Foundation. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * * Neither the name of The Linux Foundation, nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#ifndef GNSS_ADAPTER_H -#define GNSS_ADAPTER_H - -#include <LocAdapterBase.h> -#include <LocDualContext.h> -#include <UlpProxyBase.h> -#include <LocationAPI.h> -#include <Agps.h> -#include <SystemStatus.h> -#include <XtraSystemStatusObserver.h> - -#define MAX_URL_LEN 256 -#define NMEA_SENTENCE_MAX_LENGTH 200 -#define GLONASS_SV_ID_OFFSET 64 -#define MAX_SATELLITES_IN_USE 12 -#define LOC_NI_NO_RESPONSE_TIME 20 -#define LOC_GPS_NI_RESPONSE_IGNORE 4 -#define ODCPI_EXPECTED_INJECTION_TIME_MS 10000 - -class GnssAdapter; - -class OdcpiTimer : public LocTimer { -public: - OdcpiTimer(GnssAdapter* adapter) : - LocTimer(), mAdapter(adapter), mActive(false) {} - - inline void start() { - mActive = true; - LocTimer::start(ODCPI_EXPECTED_INJECTION_TIME_MS, false); - } - inline void stop() { - mActive = false; - LocTimer::stop(); - } - inline void restart() { - stop(); - start(); - } - inline bool isActive() { - return mActive; - } - -private: - // Override - virtual void timeOutCallback() override; - - GnssAdapter* mAdapter; - bool mActive; -}; - -typedef struct { - pthread_t thread; /* NI thread */ - uint32_t respTimeLeft; /* examine time for NI response */ - bool respRecvd; /* NI User reponse received or not from Java layer*/ - void* rawRequest; - uint32_t reqID; /* ID to check against response */ - GnssNiResponse resp; - pthread_cond_t tCond; - pthread_mutex_t tLock; - GnssAdapter* adapter; -} NiSession; -typedef struct { - NiSession session; /* SUPL NI Session */ - NiSession sessionEs; /* Emergency SUPL NI Session */ - uint32_t reqIDCounter; -} NiData; - -typedef enum { - NMEA_PROVIDER_AP = 0, // Application Processor Provider of NMEA - NMEA_PROVIDER_MP // Modem Processor Provider of NMEA -} NmeaProviderType; -typedef struct { - GnssSvType svType; - const char* talker; - uint64_t mask; - uint32_t svIdOffset; -} NmeaSvMeta; - -using namespace loc_core; - -namespace loc_core { - class SystemStatus; -} - -class GnssAdapter : public LocAdapterBase { - - /* ==== ULP ============================================================================ */ - UlpProxyBase* mUlpProxy; - - /* ==== CLIENT ========================================================================= */ - typedef std::map<LocationAPI*, LocationCallbacks> ClientDataMap; - ClientDataMap mClientData; - - /* ==== TRACKING ======================================================================= */ - LocationSessionMap mTrackingSessions; - LocPosMode mUlpPositionMode; - GnssSvUsedInPosition mGnssSvIdUsedInPosition; - bool mGnssSvIdUsedInPosAvail; - - /* ==== CONTROL ======================================================================== */ - LocationControlCallbacks mControlCallbacks; - uint32_t mPowerVoteId; - uint32_t mNmeaMask; - - /* ==== NI ============================================================================= */ - NiData mNiData; - - /* ==== AGPS =========================================================================== */ - // This must be initialized via initAgps() - AgpsManager mAgpsManager; - AgpsCbInfo mAgpsCbInfo; - void initAgps(const AgpsCbInfo& cbInfo); - - /* ==== ODCPI ========================================================================== */ - OdcpiRequestCallback mOdcpiRequestCb; - bool mOdcpiRequestActive; - OdcpiTimer mOdcpiTimer; - OdcpiRequestInfo mOdcpiRequest; - void odcpiTimerExpire(); - - /* === SystemStatus ===================================================================== */ - SystemStatus* mSystemStatus; - std::string mServerUrl; - XtraSystemStatusObserver mXtraObserver; - - /*==== CONVERSION ===================================================================*/ - static void convertOptions(LocPosMode& out, const LocationOptions& options); - static void convertLocation(Location& out, const LocGpsLocation& locGpsLocation, - const GpsLocationExtended& locationExtended, - const LocPosTechMask techMask); - static void convertLocationInfo(GnssLocationInfoNotification& out, - const GpsLocationExtended& locationExtended); - -public: - - GnssAdapter(); - virtual inline ~GnssAdapter() { delete mUlpProxy; } - - /* ==== SSR ============================================================================ */ - /* ======== EVENTS ====(Called from QMI Thread)========================================= */ - virtual void handleEngineUpEvent(); - /* ======== UTILITIES ================================================================== */ - void restartSessions(); - - /* ==== ULP ============================================================================ */ - /* ======== COMMANDS ====(Called from ULP Thread)==================================== */ - virtual void setUlpProxyCommand(UlpProxyBase* ulp); - /* ======== UTILITIES ================================================================== */ - void setUlpProxy(UlpProxyBase* ulp); - inline UlpProxyBase* getUlpProxy() { return mUlpProxy; } - - /* ==== CLIENT ========================================================================= */ - /* ======== COMMANDS ====(Called from Client Thread)==================================== */ - void addClientCommand(LocationAPI* client, const LocationCallbacks& callbacks); - void removeClientCommand(LocationAPI* client); - void requestCapabilitiesCommand(LocationAPI* client); - /* ======== UTILITIES ================================================================== */ - void saveClient(LocationAPI* client, const LocationCallbacks& callbacks); - void eraseClient(LocationAPI* client); - void updateClientsEventMask(); - void stopClientSessions(LocationAPI* client); - LocationCallbacks getClientCallbacks(LocationAPI* client); - LocationCapabilitiesMask getCapabilities(); - void broadcastCapabilities(LocationCapabilitiesMask); - LocationError setSuplHostServer(const char* server, int port); - - /* ==== TRACKING ======================================================================= */ - /* ======== COMMANDS ====(Called from Client Thread)==================================== */ - uint32_t startTrackingCommand(LocationAPI* client, LocationOptions& options); - void updateTrackingOptionsCommand(LocationAPI* client, uint32_t id, LocationOptions& options); - void stopTrackingCommand(LocationAPI* client, uint32_t id); - /* ======================(Called from ULP Thread)======================================= */ - virtual void setPositionModeCommand(LocPosMode& locPosMode); - virtual void startTrackingCommand(); - virtual void stopTrackingCommand(); - virtual void getZppCommand(); - /* ======== RESPONSES ================================================================== */ - void reportResponse(LocationAPI* client, LocationError err, uint32_t sessionId); - /* ======== UTILITIES ================================================================== */ - bool hasTrackingCallback(LocationAPI* client); - bool hasMeasurementsCallback(LocationAPI* client); - bool isTrackingSession(LocationAPI* client, uint32_t sessionId); - void saveTrackingSession(LocationAPI* client, uint32_t sessionId, - const LocationOptions& options); - void eraseTrackingSession(LocationAPI* client, uint32_t sessionId); - bool setUlpPositionMode(const LocPosMode& mode); - LocPosMode& getUlpPositionMode() { return mUlpPositionMode; } - LocationError startTrackingMultiplex(const LocationOptions& options); - LocationError startTracking(const LocationOptions& options); - LocationError stopTrackingMultiplex(LocationAPI* client, uint32_t id); - LocationError stopTracking(); - LocationError updateTrackingMultiplex(LocationAPI* client, uint32_t id, - const LocationOptions& options); - - /* ==== NI ============================================================================= */ - /* ======== COMMANDS ====(Called from Client Thread)==================================== */ - void gnssNiResponseCommand(LocationAPI* client, uint32_t id, GnssNiResponse response); - /* ======================(Called from NI Thread)======================================== */ - void gnssNiResponseCommand(GnssNiResponse response, void* rawRequest); - /* ======== UTILITIES ================================================================== */ - bool hasNiNotifyCallback(LocationAPI* client); - NiData& getNiData() { return mNiData; } - - /* ==== CONTROL ======================================================================== */ - /* ======== COMMANDS ====(Called from Client Thread)==================================== */ - uint32_t enableCommand(LocationTechnologyType techType); - void disableCommand(uint32_t id); - void setControlCallbacksCommand(LocationControlCallbacks& controlCallbacks); - void readConfigCommand(); - void setConfigCommand(); - uint32_t* gnssUpdateConfigCommand(GnssConfig config); - uint32_t gnssDeleteAidingDataCommand(GnssAidingData& data); - void gnssUpdateXtraThrottleCommand(const bool enabled); - - void initDefaultAgpsCommand(); - void initAgpsCommand(const AgpsCbInfo& cbInfo); - void dataConnOpenCommand(AGpsExtType agpsType, - const char* apnName, int apnLen, AGpsBearerType bearerType); - void dataConnClosedCommand(AGpsExtType agpsType); - void dataConnFailedCommand(AGpsExtType agpsType); - - /* ========= ODCPI ===================================================================== */ - /* ======== COMMANDS ====(Called from Client Thread)==================================== */ - void initOdcpiCommand(const OdcpiRequestCallback& callback); - void injectOdcpiCommand(const Location& location); - /* ======== UTILITIES ================================================================== */ - void initOdcpi(const OdcpiRequestCallback& callback); - void injectOdcpi(const Location& location); - void odcpiTimerExpireEvent(); - - /* ======== RESPONSES ================================================================== */ - void reportResponse(LocationError err, uint32_t sessionId); - void reportResponse(size_t count, LocationError* errs, uint32_t* ids); - /* ======== UTILITIES ================================================================== */ - LocationControlCallbacks& getControlCallbacks() { return mControlCallbacks; } - void setControlCallbacks(const LocationControlCallbacks& controlCallbacks) - { mControlCallbacks = controlCallbacks; } - void setPowerVoteId(uint32_t id) { mPowerVoteId = id; } - uint32_t getPowerVoteId() { return mPowerVoteId; } - bool resolveInAddress(const char* hostAddress, struct in_addr* inAddress); - virtual bool isInSession() { return !mTrackingSessions.empty(); } - void initDefaultAgps(); - - /* ==== REPORTS ======================================================================== */ - /* ======== EVENTS ====(Called from QMI/ULP Thread)===================================== */ - virtual void reportPositionEvent(const UlpLocation& ulpLocation, - const GpsLocationExtended& locationExtended, - enum loc_sess_status status, - LocPosTechMask techMask, - bool fromUlp=false); - virtual void reportSvEvent(const GnssSvNotification& svNotify, bool fromUlp=false); - virtual void reportNmeaEvent(const char* nmea, size_t length, bool fromUlp=false); - virtual bool requestNiNotifyEvent(const GnssNiNotification& notify, const void* data); - virtual void reportGnssMeasurementDataEvent(const GnssMeasurementsNotification& measurements, - int msInWeek); - virtual void reportSvMeasurementEvent(GnssSvMeasurementSet &svMeasurementSet); - virtual void reportSvPolynomialEvent(GnssSvPolynomial &svPolynomial); - - virtual bool requestATL(int connHandle, LocAGpsType agps_type); - virtual bool releaseATL(int connHandle); - virtual bool requestSuplES(int connHandle); - virtual bool reportDataCallOpened(); - virtual bool reportDataCallClosed(); - virtual bool reportOdcpiRequestEvent(OdcpiRequestInfo& request); - - /* ======== UTILITIES ================================================================= */ - bool needReport(const UlpLocation& ulpLocation, - enum loc_sess_status status, LocPosTechMask techMask); - void reportPosition(const UlpLocation &ulpLocation, - const GpsLocationExtended &locationExtended, - enum loc_sess_status status, - LocPosTechMask techMask); - void reportSv(GnssSvNotification& svNotify); - void reportNmea(const char* nmea, size_t length); - bool requestNiNotify(const GnssNiNotification& notify, const void* data); - void reportGnssMeasurementData(const GnssMeasurementsNotification& measurements); - void reportOdcpiRequest(const OdcpiRequestInfo& request); - - /*======== GNSSDEBUG ================================================================*/ - bool getDebugReport(GnssDebugReport& report); - /* get AGC information from system status and fill it */ - void getAgcInformation(GnssMeasurementsNotification& measurements, int msInWeek); - - /*==== SYSTEM STATUS ================================================================*/ - inline SystemStatus* getSystemStatus(void) { return mSystemStatus; } - std::string& getServerUrl(void) { return mServerUrl; } - void setServerUrl(const char* server) { mServerUrl.assign(server); } - - /*==== CONVERSION ===================================================================*/ - static uint32_t convertGpsLock(const GnssConfigGpsLock gpsLock); - static GnssConfigGpsLock convertGpsLock(const uint32_t gpsLock); - static uint32_t convertSuplVersion(const GnssConfigSuplVersion suplVersion); - static GnssConfigSuplVersion convertSuplVersion(const uint32_t suplVersion); - static uint32_t convertLppProfile(const GnssConfigLppProfile lppProfile); - static GnssConfigLppProfile convertLppProfile(const uint32_t lppProfile); - static uint32_t convertEP4ES(const GnssConfigEmergencyPdnForEmergencySupl); - static uint32_t convertSuplEs(const GnssConfigSuplEmergencyServices suplEmergencyServices); - static uint32_t convertLppeCp(const GnssConfigLppeControlPlaneMask lppeControlPlaneMask); - static GnssConfigLppeControlPlaneMask convertLppeCp(const uint32_t lppeControlPlaneMask); - static uint32_t convertLppeUp(const GnssConfigLppeUserPlaneMask lppeUserPlaneMask); - static GnssConfigLppeUserPlaneMask convertLppeUp(const uint32_t lppeUserPlaneMask); - static uint32_t convertAGloProt(const GnssConfigAGlonassPositionProtocolMask); - static uint32_t convertSuplMode(const GnssConfigSuplModeMask suplModeMask); - static void convertSatelliteInfo(std::vector<GnssDebugSatelliteInfo>& out, - const GnssSvType& in_constellation, - const SystemStatusReports& in); - - void injectLocationCommand(double latitude, double longitude, float accuracy); - void injectTimeCommand(int64_t time, int64_t timeReference, int32_t uncertainty); - -}; - -#endif //GNSS_ADAPTER_H |