1b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Copyright (c) 2017, The Linux Foundation. All rights reserved. 2b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 3b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Redistribution and use in source and binary forms, with or without 4b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * modification, are permitted provided that the following conditions are 5b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * met: 6b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * * Redistributions of source code must retain the above copyright 7b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * notice, this list of conditions and the following disclaimer. 8b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * * Redistributions in binary form must reproduce the above 9b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * copyright notice, this list of conditions and the following 10b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * disclaimer in the documentation and/or other materials provided 11b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * with the distribution. 12b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * * Neither the name of The Linux Foundation, nor the names of its 13b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * contributors may be used to endorse or promote products derived 14b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * from this software without specific prior written permission. 15b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 16b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 28b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */ 29b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 30b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include "GnssAdapter.h" 31b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include "location_interface.h" 32b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 33b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic GnssAdapter* gGnssAdapter = NULL; 34b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 35b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void initialize(); 36b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void deinitialize(); 37b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 38b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void addClient(LocationAPI* client, const LocationCallbacks& callbacks); 39b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void removeClient(LocationAPI* client); 40b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void requestCapabilities(LocationAPI* client); 41b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 42b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t startTracking(LocationAPI* client, LocationOptions& options); 43b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void updateTrackingOptions(LocationAPI* client, uint32_t id, LocationOptions& options); 44b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void stopTracking(LocationAPI* client, uint32_t id); 45b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 46b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void gnssNiResponse(LocationAPI* client, uint32_t id, GnssNiResponse response); 47b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t gnssDeleteAidingData(GnssAidingData& data); 48b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 49b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void setControlCallbacks(LocationControlCallbacks& controlCallbacks); 50b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t enable(LocationTechnologyType techType); 51b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void disable(uint32_t id); 52b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t* gnssUpdateConfig(GnssConfig config); 53b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 54b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void injectLocation(double latitude, double longitude, float accuracy); 55b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void injectTime(int64_t time, int64_t timeReference, int32_t uncertainty); 56b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 57b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsInit(void* statusV4Cb); 58b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsDataConnOpen(AGpsExtType agpsType, const char* apnName, int apnLen, int ipType); 59b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsDataConnClosed(AGpsExtType agpsType); 60b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsDataConnFailed(AGpsExtType agpsType); 61d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudelstatic void getDebugReport(GnssDebugReport& report); 62b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 63b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic const GnssInterface gGnssInterface = { 64b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel sizeof(GnssInterface), 65b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel initialize, 66b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel deinitialize, 67b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel addClient, 68b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel removeClient, 69b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel requestCapabilities, 70b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel startTracking, 71b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel updateTrackingOptions, 72b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel stopTracking, 73b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssNiResponse, 74b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel setControlCallbacks, 75b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel enable, 76b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel disable, 77b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssUpdateConfig, 78b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssDeleteAidingData, 79b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel injectLocation, 80b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel injectTime, 81b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsInit, 82b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsDataConnOpen, 83b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsDataConnClosed, 84d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudel agpsDataConnFailed, 85d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudel getDebugReport, 86b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 87b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 88b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#ifndef DEBUG_X86 89b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelextern "C" const GnssInterface* getGnssInterface() 90b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#else 91b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelconst GnssInterface* getGnssInterface() 92b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#endif // DEBUG_X86 93b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 94b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return &gGnssInterface; 95b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 96b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 97b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void initialize() 98b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 99b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL == gGnssAdapter) { 100b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter = new GnssAdapter(); 101b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 102b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 103b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 104b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void deinitialize() 105b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 106b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 107b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel delete gGnssAdapter; 108b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter = NULL; 109b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 110b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 111b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 112b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void addClient(LocationAPI* client, const LocationCallbacks& callbacks) 113b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 114b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 115b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->addClientCommand(client, callbacks); 116b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 117b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 118b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 119b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void removeClient(LocationAPI* client) 120b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 121b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 122b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->removeClientCommand(client); 123b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 124b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 125b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 126b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void requestCapabilities(LocationAPI* client) 127b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 128b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 129b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->requestCapabilitiesCommand(client); 130b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 131b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 132b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 133b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t startTracking(LocationAPI* client, LocationOptions& options) 134b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 135b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 136b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->startTrackingCommand(client, options); 137b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } else { 138b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return 0; 139b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 140b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 141b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 142b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void updateTrackingOptions(LocationAPI* client, uint32_t id, LocationOptions& options) 143b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 144b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 145b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->updateTrackingOptionsCommand(client, id, options); 146b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 147b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 148b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 149b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void stopTracking(LocationAPI* client, uint32_t id) 150b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 151b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 152b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->stopTrackingCommand(client, id); 153b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 154b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 155b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 156b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void gnssNiResponse(LocationAPI* client, uint32_t id, GnssNiResponse response) 157b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 158b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 159b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->gnssNiResponseCommand(client, id, response); 160b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 161b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 162b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 163b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void setControlCallbacks(LocationControlCallbacks& controlCallbacks) 164b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 165b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 166b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->setControlCallbacksCommand(controlCallbacks); 167b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 168b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 169b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 170b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t enable(LocationTechnologyType techType) 171b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 172b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 173b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->enableCommand(techType); 174b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } else { 175b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return 0; 176b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 177b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 178b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 179b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void disable(uint32_t id) 180b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 181b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 182b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->disableCommand(id); 183b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 184b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 185b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 186b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t* gnssUpdateConfig(GnssConfig config) 187b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 188b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 189b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->gnssUpdateConfigCommand(config); 190b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } else { 191b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return NULL; 192b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 193b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 194b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 195b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t gnssDeleteAidingData(GnssAidingData& data) 196b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 197b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 198b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->gnssDeleteAidingDataCommand(data); 199b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } else { 20026b4a93a806fd9a184fa49368ef4d4276891cbebThierry Strudel return 0; 201b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 202b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 203b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 204b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void injectLocation(double latitude, double longitude, float accuracy) 205b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 206b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 207b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->injectLocationCommand(latitude, longitude, accuracy); 208b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 209b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 210b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 211b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void injectTime(int64_t time, int64_t timeReference, int32_t uncertainty) 212b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 213b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 214b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->injectTimeCommand(time, timeReference, uncertainty); 215b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 216b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 217b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 218b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsInit(void* statusV4Cb) { 219b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 220b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 221b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->initAgpsCommand(statusV4Cb); 222b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 223b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 224b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsDataConnOpen( 225b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType agpsType, const char* apnName, int apnLen, int ipType) { 226b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 227b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 228b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->dataConnOpenCommand( 229b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsType, apnName, apnLen, ipType); 230b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 231b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 232b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsDataConnClosed(AGpsExtType agpsType) { 233b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 234b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 235b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->dataConnClosedCommand(agpsType); 236b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 237b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 238b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsDataConnFailed(AGpsExtType agpsType) { 239b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 240b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 241b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->dataConnFailedCommand(agpsType); 242b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 243b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 244d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudel 245d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudelstatic void getDebugReport(GnssDebugReport& report) { 246d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudel 247d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudel if (NULL != gGnssAdapter) { 248d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudel gGnssAdapter->getDebugReport(report); 249d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudel } 250d384ff095adb1231bf2c5a79e26d1abef8a1ff77Thierry Strudel} 251