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); 61b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 62b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic const GnssInterface gGnssInterface = { 63b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel sizeof(GnssInterface), 64b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel initialize, 65b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel deinitialize, 66b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel addClient, 67b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel removeClient, 68b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel requestCapabilities, 69b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel startTracking, 70b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel updateTrackingOptions, 71b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel stopTracking, 72b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssNiResponse, 73b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel setControlCallbacks, 74b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel enable, 75b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel disable, 76b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssUpdateConfig, 77b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gnssDeleteAidingData, 78b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel injectLocation, 79b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel injectTime, 80b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsInit, 81b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsDataConnOpen, 82b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsDataConnClosed, 83b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsDataConnFailed 84b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 85b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 86b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#ifndef DEBUG_X86 87b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelextern "C" const GnssInterface* getGnssInterface() 88b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#else 89b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelconst GnssInterface* getGnssInterface() 90b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#endif // DEBUG_X86 91b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 92b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return &gGnssInterface; 93b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 94b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 95b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void initialize() 96b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 97b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL == gGnssAdapter) { 98b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter = new GnssAdapter(); 99b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 100b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 101b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 102b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void deinitialize() 103b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 104b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 105b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel delete gGnssAdapter; 106b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter = NULL; 107b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 108b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 109b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 110b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void addClient(LocationAPI* client, const LocationCallbacks& callbacks) 111b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 112b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 113b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->addClientCommand(client, callbacks); 114b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 115b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 116b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 117b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void removeClient(LocationAPI* client) 118b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 119b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 120b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->removeClientCommand(client); 121b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 122b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 123b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 124b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void requestCapabilities(LocationAPI* client) 125b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 126b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 127b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->requestCapabilitiesCommand(client); 128b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 129b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 130b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 131b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t startTracking(LocationAPI* client, LocationOptions& options) 132b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 133b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 134b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->startTrackingCommand(client, options); 135b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } else { 136b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return 0; 137b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 138b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 139b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 140b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void updateTrackingOptions(LocationAPI* client, uint32_t id, LocationOptions& options) 141b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 142b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 143b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->updateTrackingOptionsCommand(client, id, options); 144b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 145b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 146b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 147b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void stopTracking(LocationAPI* client, uint32_t id) 148b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 149b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 150b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->stopTrackingCommand(client, id); 151b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 152b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 153b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 154b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void gnssNiResponse(LocationAPI* client, uint32_t id, GnssNiResponse response) 155b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 156b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 157b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->gnssNiResponseCommand(client, id, response); 158b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 159b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 160b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 161b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void setControlCallbacks(LocationControlCallbacks& controlCallbacks) 162b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 163b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 164b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->setControlCallbacksCommand(controlCallbacks); 165b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 166b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 167b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 168b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t enable(LocationTechnologyType techType) 169b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 170b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 171b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->enableCommand(techType); 172b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } else { 173b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return 0; 174b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 175b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 176b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 177b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void disable(uint32_t id) 178b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 179b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 180b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->disableCommand(id); 181b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 182b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 183b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 184b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t* gnssUpdateConfig(GnssConfig config) 185b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 186b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 187b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->gnssUpdateConfigCommand(config); 188b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } else { 189b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return NULL; 190b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 191b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 192b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 193b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic uint32_t gnssDeleteAidingData(GnssAidingData& data) 194b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 195b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 196b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return gGnssAdapter->gnssDeleteAidingDataCommand(data); 197b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } else { 198b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel return NULL; 199b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 200b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 201b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 202b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void injectLocation(double latitude, double longitude, float accuracy) 203b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 204b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 205b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->injectLocationCommand(latitude, longitude, accuracy); 206b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 207b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 208b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 209b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void injectTime(int64_t time, int64_t timeReference, int32_t uncertainty) 210b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel{ 211b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 212b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->injectTimeCommand(time, timeReference, uncertainty); 213b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 214b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 215b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 216b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsInit(void* statusV4Cb) { 217b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 218b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 219b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->initAgpsCommand(statusV4Cb); 220b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 221b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 222b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsDataConnOpen( 223b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType agpsType, const char* apnName, int apnLen, int ipType) { 224b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 225b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 226b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->dataConnOpenCommand( 227b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsType, apnName, apnLen, ipType); 228b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 229b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 230b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsDataConnClosed(AGpsExtType agpsType) { 231b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 232b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 233b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->dataConnClosedCommand(agpsType); 234b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 235b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 236b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstatic void agpsDataConnFailed(AGpsExtType agpsType) { 237b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 238b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel if (NULL != gGnssAdapter) { 239b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel gGnssAdapter->dataConnFailedCommand(agpsType); 240b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 241b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 242