1 /* Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
2  *
3  * Redistribution and use in source and binary forms, with or without
4  * modification, are permitted provided that the following conditions are
5  * met:
6  *     * Redistributions of source code must retain the above copyright
7  *       notice, this list of conditions and the following disclaimer.
8  *     * Redistributions in binary form must reproduce the above
9  *       copyright notice, this list of conditions and the following
10  *       disclaimer in the documentation and/or other materials provided
11  *       with the distribution.
12  *     * Neither the name of The Linux Foundation, nor the names of its
13  *       contributors may be used to endorse or promote products derived
14  *       from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23  * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25  * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26  * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  */
29 
30 #include "GnssAdapter.h"
31 #include "location_interface.h"
32 
33 static GnssAdapter* gGnssAdapter = NULL;
34 
35 static void initialize();
36 static void deinitialize();
37 
38 static void addClient(LocationAPI* client, const LocationCallbacks& callbacks);
39 static void removeClient(LocationAPI* client, removeClientCompleteCallback rmClientCb);
40 static void requestCapabilities(LocationAPI* client);
41 
42 static uint32_t startTracking(LocationAPI* client, TrackingOptions&);
43 static void updateTrackingOptions(LocationAPI* client, uint32_t id, TrackingOptions&);
44 static void stopTracking(LocationAPI* client, uint32_t id);
45 
46 static void gnssNiResponse(LocationAPI* client, uint32_t id, GnssNiResponse response);
47 static uint32_t gnssDeleteAidingData(GnssAidingData& data);
48 static void gnssUpdateXtraThrottle(const bool enabled);
49 
50 static void setControlCallbacks(LocationControlCallbacks& controlCallbacks);
51 static uint32_t enable(LocationTechnologyType techType);
52 static void disable(uint32_t id);
53 static uint32_t* gnssUpdateConfig(const GnssConfig& config);
54 static uint32_t* gnssGetConfig(GnssConfigFlagsMask mask);
55 
56 static void gnssUpdateSvTypeConfig(GnssSvTypeConfig& config);
57 static void gnssGetSvTypeConfig(GnssSvTypeConfigCallback& callback);
58 static void gnssResetSvTypeConfig();
59 
60 static void injectLocation(double latitude, double longitude, float accuracy);
61 static void injectLocationExt(const GnssLocationInfoNotification &locationInfo);
62 static void injectTime(int64_t time, int64_t timeReference, int32_t uncertainty);
63 
64 static void agpsInit(const AgpsCbInfo& cbInfo);
65 static void agpsDataConnOpen(AGpsExtType agpsType, const char* apnName, int apnLen, int ipType);
66 static void agpsDataConnClosed(AGpsExtType agpsType);
67 static void agpsDataConnFailed(AGpsExtType agpsType);
68 static void getDebugReport(GnssDebugReport& report);
69 static void updateConnectionStatus(bool connected, int8_t type, bool roaming,
70                                    NetworkHandle networkHandle, string& apn);
71 static void getGnssEnergyConsumed(GnssEnergyConsumedCallback energyConsumedCb);
72 static void enableNfwLocationAccess(bool enable);
73 static void nfwInit(const NfwCbInfo& cbInfo);
74 static void getPowerStateChanges(std::function<void(bool)> powerStateCb);
75 
76 static void odcpiInit(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority);
77 static void odcpiInject(const Location& location);
78 
79 static void blockCPI(double latitude, double longitude, float accuracy,
80                      int blockDurationMsec, double latLonDiffThreshold);
81 static void updateBatteryStatus(bool charging);
82 static void updateSystemPowerState(PowerStateType systemPowerState);
83 static uint32_t setConstrainedTunc (bool enable, float tuncConstraint,
84                                     uint32_t energyBudget);
85 static uint32_t setPositionAssistedClockEstimator(bool enable);
86 static uint32_t gnssUpdateSvConfig(const GnssSvTypeConfig& constellationEnablementConfig,
87                                    const GnssSvIdConfig& blacklistSvConfig);
88 static uint32_t gnssResetSvConfig();
89 static uint32_t configLeverArm(const LeverArmConfigInfo& configInfo);
90 static uint32_t configRobustLocation(bool enable, bool enableForE911);
91 static uint32_t configMinGpsWeek(uint16_t minGpsWeek);
92 static uint32_t configDeadReckoningEngineParams(const DeadReckoningEngineConfig& dreConfig);
93 static uint32_t gnssUpdateSecondaryBandConfig(const GnssSvTypeConfig& secondaryBandConfig);
94 static uint32_t gnssGetSecondaryBandConfig();
95 static void resetNetworkInfo();
96 
97 static void updateNTRIPGGAConsent(bool consentAccepted);
98 static void enablePPENtripStream(const GnssNtripConnectionParams& params, bool enableRTKEngine);
99 static void disablePPENtripStream();
100 
101 static bool measCorrInit(const measCorrSetCapabilitiesCb setCapabilitiesCb);
102 static bool measCorrSetCorrections(const GnssMeasurementCorrections gnssMeasCorr);
103 static void measCorrClose();
104 static uint32_t antennaInfoInit(const antennaInfoCb antennaInfoCallback);
105 static void antennaInfoClose();
106 static uint32_t configEngineRunState(PositioningEngineMask engType, LocEngineRunState engState);
107 
108 static const GnssInterface gGnssInterface = {
109     sizeof(GnssInterface),
110     initialize,
111     deinitialize,
112     addClient,
113     removeClient,
114     requestCapabilities,
115     startTracking,
116     updateTrackingOptions,
117     stopTracking,
118     gnssNiResponse,
119     setControlCallbacks,
120     enable,
121     disable,
122     gnssUpdateConfig,
123     gnssGetConfig,
124     gnssUpdateSvTypeConfig,
125     gnssGetSvTypeConfig,
126     gnssResetSvTypeConfig,
127     gnssDeleteAidingData,
128     gnssUpdateXtraThrottle,
129     injectLocation,
130     injectTime,
131     agpsInit,
132     agpsDataConnOpen,
133     agpsDataConnClosed,
134     agpsDataConnFailed,
135     getDebugReport,
136     updateConnectionStatus,
137     odcpiInit,
138     odcpiInject,
139     blockCPI,
140     getGnssEnergyConsumed,
141     enableNfwLocationAccess,
142     nfwInit,
143     getPowerStateChanges,
144     injectLocationExt,
145     updateBatteryStatus,
146     updateSystemPowerState,
147     setConstrainedTunc,
148     setPositionAssistedClockEstimator,
149     gnssUpdateSvConfig,
150     configLeverArm,
151     measCorrInit,
152     measCorrSetCorrections,
153     measCorrClose,
154     antennaInfoInit,
155     antennaInfoClose,
156     configRobustLocation,
157     configMinGpsWeek,
158     configDeadReckoningEngineParams,
159     updateNTRIPGGAConsent,
160     enablePPENtripStream,
161     disablePPENtripStream,
162     gnssUpdateSecondaryBandConfig,
163     gnssGetSecondaryBandConfig,
164     resetNetworkInfo,
165     configEngineRunState
166 };
167 
168 #ifndef DEBUG_X86
getGnssInterface()169 extern "C" const GnssInterface* getGnssInterface()
170 #else
171 const GnssInterface* getGnssInterface()
172 #endif // DEBUG_X86
173 {
174    gGnssInterface.initialize();
175    return &gGnssInterface;
176 }
177 
initialize()178 static void initialize()
179 {
180     if (NULL == gGnssAdapter) {
181         gGnssAdapter = new GnssAdapter();
182     }
183 }
184 
deinitialize()185 static void deinitialize()
186 {
187     if (NULL != gGnssAdapter) {
188         delete gGnssAdapter;
189         gGnssAdapter = NULL;
190     }
191 }
192 
addClient(LocationAPI * client,const LocationCallbacks & callbacks)193 static void addClient(LocationAPI* client, const LocationCallbacks& callbacks)
194 {
195     if (NULL != gGnssAdapter) {
196         gGnssAdapter->addClientCommand(client, callbacks);
197     }
198 }
199 
removeClient(LocationAPI * client,removeClientCompleteCallback rmClientCb)200 static void removeClient(LocationAPI* client, removeClientCompleteCallback rmClientCb)
201 {
202     if (NULL != gGnssAdapter) {
203         gGnssAdapter->removeClientCommand(client, rmClientCb);
204     }
205 }
206 
requestCapabilities(LocationAPI * client)207 static void requestCapabilities(LocationAPI* client)
208 {
209     if (NULL != gGnssAdapter) {
210         gGnssAdapter->requestCapabilitiesCommand(client);
211     }
212 }
213 
startTracking(LocationAPI * client,TrackingOptions & trackingOptions)214 static uint32_t startTracking(
215         LocationAPI* client, TrackingOptions& trackingOptions)
216 {
217     if (NULL != gGnssAdapter) {
218         return gGnssAdapter->startTrackingCommand(client, trackingOptions);
219     } else {
220         return 0;
221     }
222 }
223 
updateTrackingOptions(LocationAPI * client,uint32_t id,TrackingOptions & trackingOptions)224 static void updateTrackingOptions(
225         LocationAPI* client, uint32_t id, TrackingOptions& trackingOptions)
226 {
227     if (NULL != gGnssAdapter) {
228         gGnssAdapter->updateTrackingOptionsCommand(
229                 client, id, trackingOptions);
230     }
231 }
232 
stopTracking(LocationAPI * client,uint32_t id)233 static void stopTracking(LocationAPI* client, uint32_t id)
234 {
235     if (NULL != gGnssAdapter) {
236         gGnssAdapter->stopTrackingCommand(client, id);
237     }
238 }
239 
gnssNiResponse(LocationAPI * client,uint32_t id,GnssNiResponse response)240 static void gnssNiResponse(LocationAPI* client, uint32_t id, GnssNiResponse response)
241 {
242     if (NULL != gGnssAdapter) {
243         gGnssAdapter->gnssNiResponseCommand(client, id, response);
244     }
245 }
246 
setControlCallbacks(LocationControlCallbacks & controlCallbacks)247 static void setControlCallbacks(LocationControlCallbacks& controlCallbacks)
248 {
249     if (NULL != gGnssAdapter) {
250         gGnssAdapter->setControlCallbacksCommand(controlCallbacks);
251     }
252 }
253 
enable(LocationTechnologyType techType)254 static uint32_t enable(LocationTechnologyType techType)
255 {
256     if (NULL != gGnssAdapter) {
257         return gGnssAdapter->enableCommand(techType);
258     } else {
259         return 0;
260     }
261 }
262 
disable(uint32_t id)263 static void disable(uint32_t id)
264 {
265     if (NULL != gGnssAdapter) {
266         gGnssAdapter->disableCommand(id);
267     }
268 }
269 
gnssUpdateConfig(const GnssConfig & config)270 static uint32_t* gnssUpdateConfig(const GnssConfig& config)
271 {
272     if (NULL != gGnssAdapter) {
273         return gGnssAdapter->gnssUpdateConfigCommand(config);
274     } else {
275         return NULL;
276     }
277 }
278 
gnssGetConfig(GnssConfigFlagsMask mask)279 static uint32_t* gnssGetConfig(GnssConfigFlagsMask mask)
280 {
281     if (NULL != gGnssAdapter) {
282         return gGnssAdapter->gnssGetConfigCommand(mask);
283     } else {
284         return NULL;
285     }
286 }
287 
gnssUpdateSvTypeConfig(GnssSvTypeConfig & config)288 static void gnssUpdateSvTypeConfig(GnssSvTypeConfig& config)
289 {
290     if (NULL != gGnssAdapter) {
291         gGnssAdapter->gnssUpdateSvTypeConfigCommand(config);
292     }
293 }
294 
gnssGetSvTypeConfig(GnssSvTypeConfigCallback & callback)295 static void gnssGetSvTypeConfig(GnssSvTypeConfigCallback& callback)
296 {
297     if (NULL != gGnssAdapter) {
298         gGnssAdapter->gnssGetSvTypeConfigCommand(callback);
299     }
300 }
301 
gnssResetSvTypeConfig()302 static void gnssResetSvTypeConfig()
303 {
304     if (NULL != gGnssAdapter) {
305         gGnssAdapter->gnssResetSvTypeConfigCommand();
306     }
307 }
308 
gnssDeleteAidingData(GnssAidingData & data)309 static uint32_t gnssDeleteAidingData(GnssAidingData& data)
310 {
311     if (NULL != gGnssAdapter) {
312         return gGnssAdapter->gnssDeleteAidingDataCommand(data);
313     } else {
314         return 0;
315     }
316 }
317 
gnssUpdateXtraThrottle(const bool enabled)318 static void gnssUpdateXtraThrottle(const bool enabled)
319 {
320     if (NULL != gGnssAdapter) {
321         gGnssAdapter->gnssUpdateXtraThrottleCommand(enabled);
322     }
323 }
324 
injectLocation(double latitude,double longitude,float accuracy)325 static void injectLocation(double latitude, double longitude, float accuracy)
326 {
327    if (NULL != gGnssAdapter) {
328        gGnssAdapter->injectLocationCommand(latitude, longitude, accuracy);
329    }
330 }
331 
injectTime(int64_t time,int64_t timeReference,int32_t uncertainty)332 static void injectTime(int64_t time, int64_t timeReference, int32_t uncertainty)
333 {
334    if (NULL != gGnssAdapter) {
335        gGnssAdapter->injectTimeCommand(time, timeReference, uncertainty);
336    }
337 }
338 
agpsInit(const AgpsCbInfo & cbInfo)339 static void agpsInit(const AgpsCbInfo& cbInfo) {
340 
341     if (NULL != gGnssAdapter) {
342         gGnssAdapter->initAgpsCommand(cbInfo);
343     }
344 }
agpsDataConnOpen(AGpsExtType agpsType,const char * apnName,int apnLen,int ipType)345 static void agpsDataConnOpen(
346         AGpsExtType agpsType, const char* apnName, int apnLen, int ipType) {
347 
348     if (NULL != gGnssAdapter) {
349         gGnssAdapter->dataConnOpenCommand(
350                 agpsType, apnName, apnLen, (AGpsBearerType)ipType);
351     }
352 }
agpsDataConnClosed(AGpsExtType agpsType)353 static void agpsDataConnClosed(AGpsExtType agpsType) {
354 
355     if (NULL != gGnssAdapter) {
356         gGnssAdapter->dataConnClosedCommand(agpsType);
357     }
358 }
agpsDataConnFailed(AGpsExtType agpsType)359 static void agpsDataConnFailed(AGpsExtType agpsType) {
360 
361     if (NULL != gGnssAdapter) {
362         gGnssAdapter->dataConnFailedCommand(agpsType);
363     }
364 }
365 
getDebugReport(GnssDebugReport & report)366 static void getDebugReport(GnssDebugReport& report) {
367 
368     if (NULL != gGnssAdapter) {
369         gGnssAdapter->getDebugReport(report);
370     }
371 }
372 
updateConnectionStatus(bool connected,int8_t type,bool roaming,NetworkHandle networkHandle,string & apn)373 static void updateConnectionStatus(bool connected, int8_t type,
374                                    bool roaming, NetworkHandle networkHandle,
375                                    string& apn) {
376     if (NULL != gGnssAdapter) {
377         gGnssAdapter->getSystemStatus()->eventConnectionStatus(
378                 connected, type, roaming, networkHandle, apn);
379     }
380 }
381 
odcpiInit(const OdcpiRequestCallback & callback,OdcpiPrioritytype priority)382 static void odcpiInit(const OdcpiRequestCallback& callback, OdcpiPrioritytype priority)
383 {
384     if (NULL != gGnssAdapter) {
385         gGnssAdapter->initOdcpiCommand(callback, priority);
386     }
387 }
388 
odcpiInject(const Location & location)389 static void odcpiInject(const Location& location)
390 {
391     if (NULL != gGnssAdapter) {
392         gGnssAdapter->injectOdcpiCommand(location);
393     }
394 }
395 
blockCPI(double latitude,double longitude,float accuracy,int blockDurationMsec,double latLonDiffThreshold)396 static void blockCPI(double latitude, double longitude, float accuracy,
397                      int blockDurationMsec, double latLonDiffThreshold) {
398     if (NULL != gGnssAdapter) {
399         gGnssAdapter->blockCPICommand(latitude, longitude, accuracy,
400                                       blockDurationMsec, latLonDiffThreshold);
401     }
402 }
403 
getGnssEnergyConsumed(GnssEnergyConsumedCallback energyConsumedCb)404 static void getGnssEnergyConsumed(GnssEnergyConsumedCallback energyConsumedCb) {
405     if (NULL != gGnssAdapter) {
406         gGnssAdapter->getGnssEnergyConsumedCommand(energyConsumedCb);
407     }
408 }
409 
enableNfwLocationAccess(bool enable)410 static void enableNfwLocationAccess(bool enable) {
411     if (NULL != gGnssAdapter) {
412         gGnssAdapter->nfwControlCommand(enable);
413     }
414 }
415 
nfwInit(const NfwCbInfo & cbInfo)416 static void nfwInit(const NfwCbInfo& cbInfo) {
417     if (NULL != gGnssAdapter) {
418         gGnssAdapter->initNfwCommand(cbInfo);
419     }
420 }
421 
getPowerStateChanges(std::function<void (bool)> powerStateCb)422 static void getPowerStateChanges(std::function<void(bool)> powerStateCb)
423 {
424     if (NULL != gGnssAdapter) {
425         gGnssAdapter->getPowerStateChangesCommand(powerStateCb);
426     }
427 }
428 
injectLocationExt(const GnssLocationInfoNotification & locationInfo)429 static void injectLocationExt(const GnssLocationInfoNotification &locationInfo)
430 {
431    if (NULL != gGnssAdapter) {
432        gGnssAdapter->injectLocationExtCommand(locationInfo);
433    }
434 }
435 
updateBatteryStatus(bool charging)436 static void updateBatteryStatus(bool charging) {
437     if (NULL != gGnssAdapter) {
438         gGnssAdapter->getSystemStatus()->updatePowerConnectState(charging);
439     }
440 }
441 
resetNetworkInfo()442 static void resetNetworkInfo() {
443     if (NULL != gGnssAdapter) {
444         gGnssAdapter->getSystemStatus()->resetNetworkInfo();
445     }
446 }
447 
updateSystemPowerState(PowerStateType systemPowerState)448 static void updateSystemPowerState(PowerStateType systemPowerState) {
449    if (NULL != gGnssAdapter) {
450        gGnssAdapter->updateSystemPowerStateCommand(systemPowerState);
451    }
452 }
453 
setConstrainedTunc(bool enable,float tuncConstraint,uint32_t energyBudget)454 static uint32_t setConstrainedTunc (bool enable, float tuncConstraint, uint32_t energyBudget) {
455     if (NULL != gGnssAdapter) {
456         return gGnssAdapter->setConstrainedTuncCommand(enable, tuncConstraint, energyBudget);
457     } else {
458         return 0;
459     }
460 }
461 
setPositionAssistedClockEstimator(bool enable)462 static uint32_t setPositionAssistedClockEstimator(bool enable) {
463     if (NULL != gGnssAdapter) {
464         return gGnssAdapter->setPositionAssistedClockEstimatorCommand(enable);
465     } else {
466         return 0;
467     }
468 }
469 
gnssUpdateSvConfig(const GnssSvTypeConfig & constellationEnablementConfig,const GnssSvIdConfig & blacklistSvConfig)470 static uint32_t gnssUpdateSvConfig(
471         const GnssSvTypeConfig& constellationEnablementConfig,
472         const GnssSvIdConfig&   blacklistSvConfig) {
473     if (NULL != gGnssAdapter) {
474         return gGnssAdapter->gnssUpdateSvConfigCommand(
475                 constellationEnablementConfig, blacklistSvConfig);
476     } else {
477         return 0;
478     }
479 }
480 
configLeverArm(const LeverArmConfigInfo & configInfo)481 static uint32_t configLeverArm(const LeverArmConfigInfo& configInfo){
482     if (NULL != gGnssAdapter) {
483         return gGnssAdapter->configLeverArmCommand(configInfo);
484     } else {
485         return 0;
486     }
487 }
488 
measCorrInit(const measCorrSetCapabilitiesCb setCapabilitiesCb)489 static bool measCorrInit(const measCorrSetCapabilitiesCb setCapabilitiesCb) {
490     if (NULL != gGnssAdapter) {
491         return gGnssAdapter->openMeasCorrCommand(setCapabilitiesCb);
492     } else {
493         return false;
494     }
495 }
496 
measCorrSetCorrections(const GnssMeasurementCorrections gnssMeasCorr)497 static bool measCorrSetCorrections(const GnssMeasurementCorrections gnssMeasCorr) {
498     if (NULL != gGnssAdapter) {
499         return gGnssAdapter->measCorrSetCorrectionsCommand(gnssMeasCorr);
500     } else {
501         return false;
502     }
503 }
504 
measCorrClose()505 static void measCorrClose() {
506     if (NULL != gGnssAdapter) {
507         gGnssAdapter->closeMeasCorrCommand();
508     }
509 }
510 
antennaInfoInit(const antennaInfoCb antennaInfoCallback)511 static uint32_t antennaInfoInit(const antennaInfoCb antennaInfoCallback) {
512     if (NULL != gGnssAdapter) {
513         return gGnssAdapter->antennaInfoInitCommand(antennaInfoCallback);
514     } else {
515         return ANTENNA_INFO_ERROR_GENERIC;
516     }
517 }
518 
antennaInfoClose()519 static void antennaInfoClose() {
520     if (NULL != gGnssAdapter) {
521         return gGnssAdapter->antennaInfoCloseCommand();
522     }
523 }
524 
configRobustLocation(bool enable,bool enableForE911)525 static uint32_t configRobustLocation(bool enable, bool enableForE911){
526     if (NULL != gGnssAdapter) {
527         return gGnssAdapter->configRobustLocationCommand(enable, enableForE911);
528     } else {
529         return 0;
530     }
531 }
532 
configMinGpsWeek(uint16_t minGpsWeek)533 static uint32_t configMinGpsWeek(uint16_t minGpsWeek){
534     if (NULL != gGnssAdapter) {
535         return gGnssAdapter->configMinGpsWeekCommand(minGpsWeek);
536     } else {
537         return 0;
538     }
539 }
540 
configDeadReckoningEngineParams(const DeadReckoningEngineConfig & dreConfig)541 static uint32_t configDeadReckoningEngineParams(const DeadReckoningEngineConfig& dreConfig){
542     if (NULL != gGnssAdapter) {
543         return gGnssAdapter->configDeadReckoningEngineParamsCommand(dreConfig);
544     } else {
545         return 0;
546     }
547 }
548 
gnssUpdateSecondaryBandConfig(const GnssSvTypeConfig & secondaryBandConfig)549 static uint32_t gnssUpdateSecondaryBandConfig(
550         const GnssSvTypeConfig& secondaryBandConfig) {
551     if (NULL != gGnssAdapter) {
552         return gGnssAdapter->gnssUpdateSecondaryBandConfigCommand(secondaryBandConfig);
553     } else {
554         return 0;
555     }
556 }
557 
gnssGetSecondaryBandConfig()558 static uint32_t gnssGetSecondaryBandConfig(){
559     if (NULL != gGnssAdapter) {
560         return gGnssAdapter->gnssGetSecondaryBandConfigCommand();
561     } else {
562         return 0;
563     }
564 }
565 
updateNTRIPGGAConsent(bool consentAccepted)566 static void updateNTRIPGGAConsent(bool consentAccepted){
567     if (NULL != gGnssAdapter) {
568         // Call will be enabled once GnssAdapter impl. is ready.
569         gGnssAdapter->updateNTRIPGGAConsentCommand(consentAccepted);
570     }
571 }
572 
enablePPENtripStream(const GnssNtripConnectionParams & params,bool enableRTKEngine)573 static void enablePPENtripStream(const GnssNtripConnectionParams& params, bool enableRTKEngine){
574     if (NULL != gGnssAdapter) {
575         // Call will be enabled once GnssAdapter impl. is ready.
576         gGnssAdapter->enablePPENtripStreamCommand(params, enableRTKEngine);
577     }
578 }
579 
disablePPENtripStream()580 static void disablePPENtripStream(){
581     if (NULL != gGnssAdapter) {
582         // Call will be enabled once GnssAdapter impl. is ready.
583         gGnssAdapter->disablePPENtripStreamCommand();
584     }
585 }
586 
configEngineRunState(PositioningEngineMask engType,LocEngineRunState engState)587 static uint32_t configEngineRunState(PositioningEngineMask engType, LocEngineRunState engState) {
588     if (NULL != gGnssAdapter) {
589         return gGnssAdapter->configEngineRunStateCommand(engType, engState);
590     } else {
591         return 0;
592     }
593 }
594