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