1f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani/* Copyright (c) 2011, Code Aurora Forum. All rights reserved.
2f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *
3f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * Redistribution and use in source and binary forms, with or without
4f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * modification, are permitted provided that the following conditions are
5f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * met:
6f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *     * Redistributions of source code must retain the above copyright
7f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *       notice, this list of conditions and the following disclaimer.
8f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *     * Redistributions in binary form must reproduce the above
9f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *       copyright notice, this list of conditions and the following
10f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *       disclaimer in the documentation and/or other materials provided
11f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *       with the distribution.
12f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *     * Neither the name of Code Aurora Forum, Inc. nor the names of its
13f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *       contributors may be used to endorse or promote products derived
14f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *       from this software without specific prior written permission.
15f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani *
16f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani */
28f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
29f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#ifndef LOC_API_V_0_2_ADAPTER_H
30f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#define LOC_API_V_0_2_ADAPTER_H
31f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
32f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#include <LocApiAdapter.h>
33f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#include "loc_api_v02_client.h"
34f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#include <stdint.h>
35f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#include <stdbool.h>
36f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
37f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani/* Fix criteria structure*/
38f77c85bb51137f5ba854184e5e9194197027438aAjay Dudanistruct LocApiV02FixCriteria
39f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani{
40f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  LocPositionMode mode;
41f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  GpsPositionRecurrence recurrence;
42f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  uint32_t min_interval ;
43f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  uint32_t preferred_accuracy ;
44f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  uint32_t preferred_time;
45f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
46f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* Constructor for the structure  */
47f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  inline LocApiV02FixCriteria (LocPositionMode mode,
48f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                               GpsPositionRecurrence recur,
49f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                               uint32_t min_int,
50f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                               uint32_t pref_acc,
51f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                               uint32_t pref_time) :
52f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    mode(mode), recurrence(recur), min_interval(min_int),
53f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    preferred_accuracy(pref_acc), preferred_time(pref_time) {}
54f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani};
55f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
56f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani/* This class derives from the LocApiAdapter class.
57f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani   The members of this class are responsible for converting
58f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani   the Loc API V02 data structures into Loc Engine data structures.
59f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani   This class also implements some of the virtual functions that
60f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani   handle the requests from loc engine. */
61f77c85bb51137f5ba854184e5e9194197027438aAjay Dudaniclass LocApiV02Adapter : public LocApiAdapter {
62f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
63f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* loc api v02 handle*/
64f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  locClientHandleType clientHandle;
65f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
66f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* events the client is registered for */
67f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  locClientEventMaskType eventMask;
68f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
69f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* current session state */
70f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  bool navigating;
71f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
72f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* current fix criteria, for Loc aPI V02 this is
73f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani     stored when set_position_mode is called and
74f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani     sent out with Loc aPI V02 start message when the
75f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani     start_fix() is called by loc engine. */
76f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  LocApiV02FixCriteria fixCriteria;
77f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
78f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* Convert event mask from loc eng to loc_api_v02 format */
79f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  locClientEventMaskType convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask);
80f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
81f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* Convert error from loc_api_v02 to loc eng format*/
82f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  enum loc_api_adapter_err convertErr(locClientStatusEnumType status);
83f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
84f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* convert Ni Encoding type from QMI_LOC to loc eng format */
85f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  GpsNiEncodingType convertNiEncoding(
86f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    qmiLocNiDataCodingSchemeEnumT_v02 loc_encoding);
87f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
88f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /*convert NI notify verify type from QMI LOC to loc eng format*/
89f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  bool convertNiNotifyVerifyType (GpsNiNotification *notif,
90f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani      qmiLocNiNotifyVerifyEnumT_v02 notif_priv);
91f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
92f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* close Loc API V02 client */
93f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  int deInitLocClient();
94f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
95f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* convert position report to loc eng format and send the converted
96f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani     position to loc eng */
97f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  void reportPosition
98f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    (const qmiLocEventPositionReportIndMsgT_v02 *location_report_ptr);
99f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
100f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* convert satellite report to loc eng format and  send the converted
101f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani     report to loc eng */
102f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  void reportSv (const qmiLocEventGnssSvInfoIndMsgT_v02 *gnss_report_ptr);
103f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
104f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* convert engine state report to loc eng format and send the converted
105f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani     report to loc eng */
106f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  void reportEngineState (
107f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    const qmiLocEventEngineStateIndMsgT_v02 *engine_state_ptr);
108f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
109f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* convert fix session report to loc eng format and send the converted
110f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani     report to loc eng */
111f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  void reportFixSessionState (
112f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    const qmiLocEventFixSessionStateIndMsgT_v02 *fix_session_state_ptr);
113f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
114f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* convert NMEA report to loc eng format and send the converted
115f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani     report to loc eng */
116f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  void reportNmea (const qmiLocEventNmeaIndMsgT_v02 *nmea_report_ptr);
117f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
118f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* convert and report an ATL request to loc engine */
119f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  void reportAtlRequest(
120f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    const qmiLocEventLocationServerConnectionReqIndMsgT_v02
121f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    *server_request_ptr);
122f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
123f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* convert and report NI request to loc eng */
124f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  void reportNiRequest(
125f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    const qmiLocEventNiNotifyVerifyReqIndMsgT_v02 *ni_req_ptr);
126f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
127f77c85bb51137f5ba854184e5e9194197027438aAjay Dudanipublic:
128f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  LocApiV02Adapter(LocEng &locEng);
129f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  ~LocApiV02Adapter();
130f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
131f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* event callback registered with the loc_api v02 interface */
132f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  void eventCb(locClientHandleType client_handle,
133f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani               uint32_t loc_event_id,
134f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani               locClientEventIndUnionType loc_event_payload);
135f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
136f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  /* error callback, this function handles the  service unavailable
137f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani     error */
138f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  void errorCb(locClientHandleType handle,
139f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani               locClientErrorEnumType errorId);
140f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
141f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err reinit();
142f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
143f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err startFix();
144f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
145f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err stopFix();
146f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
147f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
148f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    setPositionMode(LocPositionMode mode, GpsPositionRecurrence recurrence,
149f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                    uint32_t min_interval, uint32_t preferred_accuracy,
150f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                    uint32_t preferred_time);
151f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
152f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
153f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    setTime(GpsUtcTime time, int64_t timeReference, int uncertainty);
154f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
155f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
156f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    injectPosition(double latitude, double longitude, float accuracy);
157f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
158f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
159f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    deleteAidingData(GpsAidingData f);
160f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
161f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
162f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    informNiResponse(GpsUserResponseType userResponse,
163f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                     const void* passThroughData);
164f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
165f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
166f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    setServer(const char* url, int len);
167f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
168f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    setServer(unsigned int ip, int port, LocServerType type);
169f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
170f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    setXtraData(char* data, int length);
171f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#ifdef QCOM_FEATURE_IPV6
172f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
173f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bear,
174f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                   AGpsType agpsType);
175f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#else
176f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
177f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    atlOpenStatus(int handle, int is_succ, char* apn,
178f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                   AGpsType agpsType);
179f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#endif
180f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err atlCloseStatus(int handle, int is_succ);
181f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err setSUPLVersion(uint32_t version);
182f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
183f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
184f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    setSensorControlConfig(int sensorUsage);
185f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
186f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
187f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    setSensorProperties(float gyroBiasVarianceRandomWalk);
188f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
189f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani  virtual enum loc_api_adapter_err
190f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani    setSensorPerfControlConfig(int controlMode,
191f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                               int accelSamplesPerBatch,
192f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                               int accelBatchesPerSec,
193f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                               int gyroSamplesPerBatch,
194f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani                               int gyroBatchesPerSec);
195f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani};
196f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani
197f77c85bb51137f5ba854184e5e9194197027438aAjay Dudani#endif //LOC_API_V_0_2_ADAPTER_H
198