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