1eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh/* Copyright (c) 2017, The Linux Foundation. All rights reserved. 2eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * 3eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * Redistribution and use in source and binary forms, with or without 4eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * modification, are permitted provided that the following conditions are 5eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * met: 6eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * * Redistributions of source code must retain the above copyright 7eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * notice, this list of conditions and the following disclaimer. 8eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * * Redistributions in binary form must reproduce the above 9eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * copyright notice, this list of conditions and the following 10eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * disclaimer in the documentation and/or other materials provided 11eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * with the distribution. 12eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * * Neither the name of The Linux Foundation, nor the names of its 13eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * contributors may be used to endorse or promote products derived 14eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * from this software without specific prior written permission. 15eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * 16eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh * 28eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh */ 29eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#ifndef GNSS_ADAPTER_H 30eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define GNSS_ADAPTER_H 31eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 32eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <LocAdapterBase.h> 33eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <LocDualContext.h> 34eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <UlpProxyBase.h> 35eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <LocationAPI.h> 36eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <Agps.h> 37eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <SystemStatus.h> 38eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#include <XtraSystemStatusObserver.h> 39eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 40eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define MAX_URL_LEN 256 41eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define NMEA_SENTENCE_MAX_LENGTH 200 42eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define GLONASS_SV_ID_OFFSET 64 43eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define MAX_SATELLITES_IN_USE 12 44eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define LOC_NI_NO_RESPONSE_TIME 20 45eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#define LOC_GPS_NI_RESPONSE_IGNORE 4 46eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 47eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass GnssAdapter; 48eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 49eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhtypedef struct { 50eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh pthread_t thread; /* NI thread */ 51eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t respTimeLeft; /* examine time for NI response */ 52eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool respRecvd; /* NI User reponse received or not from Java layer*/ 53eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void* rawRequest; 54eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t reqID; /* ID to check against response */ 55eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssNiResponse resp; 56eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh pthread_cond_t tCond; 57eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh pthread_mutex_t tLock; 58eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssAdapter* adapter; 59eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} NiSession; 60eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhtypedef struct { 61eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh NiSession session; /* SUPL NI Session */ 62eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh NiSession sessionEs; /* Emergency SUPL NI Session */ 63eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t reqIDCounter; 64eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} NiData; 65eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 66eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhtypedef enum { 67eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh NMEA_PROVIDER_AP = 0, // Application Processor Provider of NMEA 68eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh NMEA_PROVIDER_MP // Modem Processor Provider of NMEA 69eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} NmeaProviderType; 70eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhtypedef struct { 71eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssSvType svType; 72eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const char* talker; 73eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint64_t mask; 74eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t svIdOffset; 75eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} NmeaSvMeta; 76eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 77eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhusing namespace loc_core; 78eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 79eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhnamespace loc_core { 80eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh class SystemStatus; 81eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh} 82eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 83eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhclass GnssAdapter : public LocAdapterBase { 84eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== ULP ============================================================================ */ 85eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh UlpProxyBase* mUlpProxy; 86eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 87eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== CLIENT ========================================================================= */ 88eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh typedef std::map<LocationAPI*, LocationCallbacks> ClientDataMap; 89eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh ClientDataMap mClientData; 90eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 91eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== TRACKING ======================================================================= */ 92eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationSessionMap mTrackingSessions; 93eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocPosMode mUlpPositionMode; 94eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssSvUsedInPosition mGnssSvIdUsedInPosition; 95eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool mGnssSvIdUsedInPosAvail; 96eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 97eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== CONTROL ======================================================================== */ 98eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationControlCallbacks mControlCallbacks; 99eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t mPowerVoteId; 100eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t mNmeaMask; 101eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 102eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== NI ============================================================================= */ 103eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh NiData mNiData; 104eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 105eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== AGPS ========================================================*/ 106eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh // This must be initialized via initAgps() 107eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh AgpsManager mAgpsManager; 108eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh AgpsCbInfo mAgpsCbInfo; 109eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 110eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* === SystemStatus ===================================================================== */ 111eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh SystemStatus* mSystemStatus; 1128f362b95bd587923b1168244ea6a65d8938b0449Harikrishnan Hariharan XtraSystemStatusObserver mXtraObserver; 113eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 114eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /*==== CONVERSION ===================================================================*/ 115eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static void convertOptions(LocPosMode& out, const LocationOptions& options); 116eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static void convertLocation(Location& out, const LocGpsLocation& locGpsLocation, 117eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const GpsLocationExtended& locationExtended, 118eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const LocPosTechMask techMask); 119eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static void convertLocationInfo(GnssLocationInfoNotification& out, 120eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const GpsLocationExtended& locationExtended); 121eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 122eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanhpublic: 123eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 124eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh GnssAdapter(); 125eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual inline ~GnssAdapter() { delete mUlpProxy; } 126eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 127eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== SSR ============================================================================ */ 128eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== EVENTS ====(Called from QMI Thread)========================================= */ 129eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void handleEngineUpEvent(); 130eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== UTILITIES ================================================================== */ 131eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void restartSessions(); 132eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 133eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== ULP ============================================================================ */ 134eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== COMMANDS ====(Called from ULP Thread)==================================== */ 135eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void setUlpProxyCommand(UlpProxyBase* ulp); 136eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== UTILITIES ================================================================== */ 137eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void setUlpProxy(UlpProxyBase* ulp); 138eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh inline UlpProxyBase* getUlpProxy() { return mUlpProxy; } 139eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 140eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== CLIENT ========================================================================= */ 141eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== COMMANDS ====(Called from Client Thread)==================================== */ 142eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void addClientCommand(LocationAPI* client, const LocationCallbacks& callbacks); 143eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void removeClientCommand(LocationAPI* client); 144eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void requestCapabilitiesCommand(LocationAPI* client); 145eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== UTILITIES ================================================================== */ 146eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void saveClient(LocationAPI* client, const LocationCallbacks& callbacks); 147eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void eraseClient(LocationAPI* client); 148eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void updateClientsEventMask(); 149eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void stopClientSessions(LocationAPI* client); 150eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationCallbacks getClientCallbacks(LocationAPI* client); 151eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationCapabilitiesMask getCapabilities(); 152eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void broadcastCapabilities(LocationCapabilitiesMask); 153eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 154eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== TRACKING ======================================================================= */ 155eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== COMMANDS ====(Called from Client Thread)==================================== */ 156eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t startTrackingCommand(LocationAPI* client, LocationOptions& options); 157eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void updateTrackingOptionsCommand(LocationAPI* client, uint32_t id, LocationOptions& options); 158eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void stopTrackingCommand(LocationAPI* client, uint32_t id); 159eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======================(Called from ULP Thread)======================================= */ 160eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void setPositionModeCommand(LocPosMode& locPosMode); 161eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void startTrackingCommand(); 162eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void stopTrackingCommand(); 163eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void getZppCommand(); 164eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== RESPONSES ================================================================== */ 165eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void reportResponse(LocationAPI* client, LocationError err, uint32_t sessionId); 166eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== UTILITIES ================================================================== */ 167eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool hasTrackingCallback(LocationAPI* client); 168eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool hasMeasurementsCallback(LocationAPI* client); 169eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool isTrackingSession(LocationAPI* client, uint32_t sessionId); 170eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void saveTrackingSession(LocationAPI* client, uint32_t sessionId, 171eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const LocationOptions& options); 172eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void eraseTrackingSession(LocationAPI* client, uint32_t sessionId); 173eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void setUlpPositionMode(const LocPosMode& mode) { mUlpPositionMode = mode; } 174eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocPosMode& getUlpPositionMode() { return mUlpPositionMode; } 175eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationError startTrackingMultiplex(const LocationOptions& options); 176eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationError startTracking(const LocationOptions& options); 177eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationError stopTrackingMultiplex(LocationAPI* client, uint32_t id); 178eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationError stopTracking(); 179eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationError updateTrackingMultiplex(LocationAPI* client, uint32_t id, 180eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const LocationOptions& options); 181eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 182eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== NI ============================================================================= */ 183eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== COMMANDS ====(Called from Client Thread)==================================== */ 184eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void gnssNiResponseCommand(LocationAPI* client, uint32_t id, GnssNiResponse response); 185eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======================(Called from NI Thread)======================================== */ 186eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void gnssNiResponseCommand(GnssNiResponse response, void* rawRequest); 187eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== UTILITIES ================================================================== */ 188eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool hasNiNotifyCallback(LocationAPI* client); 189eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh NiData& getNiData() { return mNiData; } 190eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 191eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== CONTROL ======================================================================== */ 192eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== COMMANDS ====(Called from Client Thread)==================================== */ 193eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t enableCommand(LocationTechnologyType techType); 194eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void disableCommand(uint32_t id); 195eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void setControlCallbacksCommand(LocationControlCallbacks& controlCallbacks); 196eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void readConfigCommand(); 197eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void setConfigCommand(); 198eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t* gnssUpdateConfigCommand(GnssConfig config); 199eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t gnssDeleteAidingDataCommand(GnssAidingData& data); 200eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 201eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void initAgpsCommand(const AgpsCbInfo& cbInfo); 202eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void dataConnOpenCommand( 203eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh AGpsExtType agpsType, 204eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const char* apnName, int apnLen, LocApnIpType ipType); 205eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void dataConnClosedCommand(AGpsExtType agpsType); 206eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void dataConnFailedCommand(AGpsExtType agpsType); 207eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 208eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== RESPONSES ================================================================== */ 209eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void reportResponse(LocationError err, uint32_t sessionId); 210eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void reportResponse(size_t count, LocationError* errs, uint32_t* ids); 211eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== UTILITIES ================================================================== */ 212eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocationControlCallbacks& getControlCallbacks() { return mControlCallbacks; } 213eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void setControlCallbacks(const LocationControlCallbacks& controlCallbacks) 214eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh { mControlCallbacks = controlCallbacks; } 215eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void setPowerVoteId(uint32_t id) { mPowerVoteId = id; } 216eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh uint32_t getPowerVoteId() { return mPowerVoteId; } 217eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool resolveInAddress(const char* hostAddress, struct in_addr* inAddress); 218eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 219eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ==== REPORTS ======================================================================== */ 220eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== EVENTS ====(Called from QMI/ULP Thread)===================================== */ 221eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void reportPositionEvent(const UlpLocation& ulpLocation, 222eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const GpsLocationExtended& locationExtended, 223eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh enum loc_sess_status status, 224eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocPosTechMask techMask, 225eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool fromUlp=false); 226eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void reportSvEvent(const GnssSvNotification& svNotify, bool fromUlp=false); 227eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void reportNmeaEvent(const char* nmea, size_t length, bool fromUlp=false); 228eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual bool requestNiNotifyEvent(const GnssNiNotification& notify, const void* data); 229eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void reportGnssMeasurementDataEvent(const GnssMeasurementsNotification& measurements, 230eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh int msInWeek); 231eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void reportSvMeasurementEvent(GnssSvMeasurementSet &svMeasurementSet); 232eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual void reportSvPolynomialEvent(GnssSvPolynomial &svPolynomial); 233eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 234eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual bool requestATL(int connHandle, LocAGpsType agps_type); 235eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual bool releaseATL(int connHandle); 236eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual bool requestSuplES(int connHandle); 237eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual bool reportDataCallOpened(); 238eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh virtual bool reportDataCallClosed(); 239eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 240eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* ======== UTILITIES ================================================================= */ 241eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void reportPosition(const UlpLocation &ulpLocation, 242eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const GpsLocationExtended &locationExtended, 243eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh enum loc_sess_status status, 244eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh LocPosTechMask techMask); 245eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void reportSv(GnssSvNotification& svNotify); 246eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void reportNmea(const char* nmea, size_t length); 247eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool requestNiNotify(const GnssNiNotification& notify, const void* data); 248eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void reportGnssMeasurementData(const GnssMeasurementsNotification& measurements); 249eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 250eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /*======== GNSSDEBUG ================================================================*/ 251eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh bool getDebugReport(GnssDebugReport& report); 252eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /* get AGC information from system status and fill it */ 253eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void getAgcInformation(GnssMeasurementsNotification& measurements, int msInWeek); 254eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 255eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /*==== SYSTEM STATUS ================================================================*/ 256eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh inline SystemStatus* getSystemStatus(void) { return mSystemStatus; } 257eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 258eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh /*==== CONVERSION ===================================================================*/ 259eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static uint32_t convertGpsLock(const GnssConfigGpsLock gpsLock); 260eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static GnssConfigGpsLock convertGpsLock(const uint32_t gpsLock); 261eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static uint32_t convertSuplVersion(const GnssConfigSuplVersion suplVersion); 262eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static GnssConfigSuplVersion convertSuplVersion(const uint32_t suplVersion); 263eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static uint32_t convertLppProfile(const GnssConfigLppProfile lppProfile); 264eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static GnssConfigLppProfile convertLppProfile(const uint32_t lppProfile); 265eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static uint32_t convertEP4ES(const GnssConfigEmergencyPdnForEmergencySupl); 266eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static uint32_t convertSuplEs(const GnssConfigSuplEmergencyServices suplEmergencyServices); 267eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static uint32_t convertLppeCp(const GnssConfigLppeControlPlaneMask lppeControlPlaneMask); 268eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static GnssConfigLppeControlPlaneMask convertLppeCp(const uint32_t lppeControlPlaneMask); 269eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static uint32_t convertLppeUp(const GnssConfigLppeUserPlaneMask lppeUserPlaneMask); 270eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static GnssConfigLppeUserPlaneMask convertLppeUp(const uint32_t lppeUserPlaneMask); 271eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static uint32_t convertAGloProt(const GnssConfigAGlonassPositionProtocolMask); 272eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static uint32_t convertSuplMode(const GnssConfigSuplModeMask suplModeMask); 273eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh static void convertSatelliteInfo(std::vector<GnssDebugSatelliteInfo>& out, 274eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const GnssSvType& in_constellation, 275eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh const SystemStatusReports& in); 276eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 277eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void injectLocationCommand(double latitude, double longitude, float accuracy); 278eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh void injectTimeCommand(int64_t time, int64_t timeReference, int32_t uncertainty); 279eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 280eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh}; 281eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh 282eee4b7537bec1ef4198a5c0c9cfb8ba232ad60cbAlain Vongsouvanh#endif //GNSS_ADAPTER_H 283