1e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Copyright (c) 2011-2014, The Linux Foundation. All rights reserved.
2e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
3e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * Redistribution and use in source and binary forms, with or without
4e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * modification, are permitted provided that the following conditions are
5e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * met:
6e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Redistributions of source code must retain the above copyright
7e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       notice, this list of conditions and the following disclaimer.
8e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Redistributions in binary form must reproduce the above
9e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       copyright notice, this list of conditions and the following
10e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       disclaimer in the documentation and/or other materials provided
11e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       with the distribution.
12e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *     * Neither the name of The Linux Foundation, nor the names of its
13e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       contributors may be used to endorse or promote products derived
14e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *       from this software without specific prior written permission.
15e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
16e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti *
28e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti */
29e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOG_NDDEBUG 0
30e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOG_TAG "LocSvc_api_rpc"
31e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
32e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <unistd.h>
33e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <math.h>
34e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#ifndef USE_GLIB
35e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <utils/SystemClock.h>
36e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* USE_GLIB */
37e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <LocApiRpc.h>
38e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <LocAdapterBase.h>
39e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <loc_api_fixup.h>
40e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <loc_api_rpc_glue.h>
41e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <log_util.h>
42e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <loc_log.h>
43e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <loc_api_log.h>
44e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#ifdef USE_GLIB
45e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <glib.h>
46e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif
47e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <librpc.h>
48e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#include <platform_lib_includes.h>
49e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
50e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiusing namespace loc_core;
51e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
52e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOC_XTRA_INJECT_DEFAULT_TIMEOUT (3100)
53e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define XTRA_BLOCK_SIZE                 (3072)
54e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOC_IOCTL_DEFAULT_TIMEOUT 1000 // 1000 milli-seconds
55e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#define LOC_NI_NOTIF_KEY_ADDRESS           "Address"
56e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
57e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
58e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION    loc_event_cb
59e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
60e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
61e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   This is the callback function registered by loc_open.
62e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
63e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES
64e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
65e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
66e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
67e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   RPC_LOC_API_SUCCESS
68e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
69e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS
70e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
71e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
72e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
73e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic int32 loc_event_cb
74e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti(
75e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    void*                                user,
76e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_client_handle_type           client_handle,
77e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_event_mask_type              loc_event,
78e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    const rpc_loc_event_payload_u_type*  loc_event_payload
79e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti)
80e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
81e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    MODEM_LOG_CALLFLOW(%s, loc_get_event_name(loc_event));
82e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    loc_callback_log(loc_event, loc_event_payload);
83e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int32 ret_val = ((LocApiRpc*)user)->locEventCB(client_handle, loc_event, loc_event_payload);
84e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    EXIT_LOG(%d, ret_val);
85e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return ret_val;
86e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
87e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
88e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*===========================================================================
89e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiFUNCTION    loc_eng_rpc_global_cb
90e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
91e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDESCRIPTION
92e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   This is the callback function registered by loc_open for RPC global events
93e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
94e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiDEPENDENCIES
95e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
96e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
97e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiRETURN VALUE
98e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   RPC_LOC_API_SUCCESS
99e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
100e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiSIDE EFFECTS
101e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   N/A
102e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
103e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti===========================================================================*/
104e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletistatic void loc_rpc_global_cb(void* user, CLIENT* clnt, enum rpc_reset_event event)
105e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
106e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    MODEM_LOG_CALLFLOW(%s, loc_get_rpc_reset_event_name(event));
107e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ((LocApiRpc*)user)->locRpcGlobalCB(clnt, event);
108e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    EXIT_LOG(%p, VOID_RET);
109e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
110e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
111e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst LOC_API_ADAPTER_EVENT_MASK_T LocApiRpc::maskAll =
112e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_API_ADAPTER_BIT_PARSED_POSITION_REPORT |
113e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_API_ADAPTER_BIT_SATELLITE_REPORT |
114e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_API_ADAPTER_BIT_LOCATION_SERVER_REQUEST |
115e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_API_ADAPTER_BIT_ASSISTANCE_DATA_REQUEST |
116e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_API_ADAPTER_BIT_IOCTL_REPORT |
117e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_API_ADAPTER_BIT_STATUS_REPORT |
118e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_API_ADAPTER_BIT_NMEA_1HZ_REPORT |
119e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_API_ADAPTER_BIT_NI_NOTIFY_VERIFY_REQUEST;
120e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
121e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleticonst rpc_loc_event_mask_type LocApiRpc::locBits[] =
122e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
123e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_PARSED_POSITION_REPORT,
124e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_SATELLITE_REPORT,
125e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_NMEA_1HZ_REPORT,
126e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_NMEA_POSITION_REPORT,
127e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST,
128e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST,
129e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_LOCATION_SERVER_REQUEST,
130e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_IOCTL_REPORT,
131e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_STATUS_REPORT,
132e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    RPC_LOC_EVENT_WPS_NEEDED_REQUEST
133e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti};
134e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
135e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti// constructor
136e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::LocApiRpc(const MsgTask* msgTask,
137e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     LOC_API_ADAPTER_EVENT_MASK_T exMask,
138e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     ContextBase* context) :
139e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LocApiBase(msgTask, exMask, context),
140e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    client_handle(RPC_LOC_CLIENT_HANDLE_INVALID),
141e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    dataEnableLastSet(-1)
142e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
143e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    memset(apnLastSet, 0, sizeof(apnLastSet));
144e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    loc_api_glue_init();
145e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
146e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
147e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::~LocApiRpc()
148e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
149e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    close();
150e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
151e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
152e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletirpc_loc_event_mask_type
153e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::convertMask(LOC_API_ADAPTER_EVENT_MASK_T mask)
154e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
155e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_event_mask_type newMask = 0;
156e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
157e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    for (unsigned int i = 0, bit=1; 0 != mask; i++, bit<<=1) {
158e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (mask & bit) {
159e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            newMask |= locBits[i];
160e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            mask ^= bit;
161e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
162e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
163e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
164e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return newMask;
165e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
166e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
167e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletirpc_loc_lock_e_type
168e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::convertGpsLockMask(LOC_GPS_LOCK_MASK lockMask)
169e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
170e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (isGpsLockAll(lockMask))
171e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return RPC_LOC_LOCK_ALL;
172e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (isGpsLockMO(lockMask))
173e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return RPC_LOC_LOCK_MI;
174e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (isGpsLockMT(lockMask))
175e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return RPC_LOC_LOCK_MT;
176e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (isGpsLockNone(lockMask))
177e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return RPC_LOC_LOCK_NONE;
178e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return (rpc_loc_lock_e_type)lockMask;
179e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
180e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
181e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
182e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::convertErr(int rpcErr)
183e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
184e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    switch(rpcErr)
185e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
186e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_SUCCESS:
187e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_SUCCESS;
188e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_GENERAL_FAILURE:
189e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
190e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_UNSUPPORTED:
191e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_UNSUPPORTED;
192e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_INVALID_HANDLE:
193e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_INVALID_HANDLE;
194e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_INVALID_PARAMETER:
195e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_INVALID_PARAMETER;
196e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_ENGINE_BUSY:
197e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_ENGINE_BUSY;
198e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_PHONE_OFFLINE:
199e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_PHONE_OFFLINE;
200e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_TIMEOUT:
201e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_TIMEOUT;
202e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_RPC_MODEM_RESTART:
203e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_ENGINE_DOWN;
204e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_API_RPC_FAILURE:
205e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_FAILURE;
206e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    default:
207e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_UNKNOWN;
208e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
209e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
210e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
211e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid LocApiRpc::locRpcGlobalCB(CLIENT* clnt, enum rpc_reset_event event)
212e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
213e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    static rpc_loc_engine_state_e_type last_state = RPC_LOC_ENGINE_STATE_MAX;
214e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
215e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    switch (event) {
216e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_SUBSYSTEM_RESTART_BEGIN:
217e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (RPC_LOC_ENGINE_STATE_OFF != last_state) {
218e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            last_state = RPC_LOC_ENGINE_STATE_OFF;
219e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            handleEngineDownEvent();
220e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
221e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
222e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_SUBSYSTEM_RESTART_END:
223e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (RPC_LOC_ENGINE_STATE_ON != last_state) {
224e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            last_state = RPC_LOC_ENGINE_STATE_ON;
225e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            handleEngineUpEvent();
226e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
227e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
228e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
229e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
230e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
231e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint32 LocApiRpc::locEventCB(rpc_loc_client_handle_type client_handle,
232e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     rpc_loc_event_mask_type loc_event,
233e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     const rpc_loc_event_payload_u_type* loc_event_payload)
234e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
235e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // Parsed report
236e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (loc_event & RPC_LOC_EVENT_PARSED_POSITION_REPORT)
237e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
238e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        reportPosition(&loc_event_payload->rpc_loc_event_payload_u_type_u.
239e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       parsed_location_report);
240e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
241e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
242e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // Satellite report
243e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (loc_event & RPC_LOC_EVENT_SATELLITE_REPORT)
244e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
245e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        reportSv(&loc_event_payload->rpc_loc_event_payload_u_type_u.gnss_report);
246e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
247e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
248e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // Status report
249e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (loc_event & RPC_LOC_EVENT_STATUS_REPORT)
250e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
251e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        reportStatus(&loc_event_payload->rpc_loc_event_payload_u_type_u.status_report);
252e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
253e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
254e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // NMEA
255e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (loc_event & RPC_LOC_EVENT_NMEA_1HZ_REPORT)
256e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
257e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        reportNmea(&(loc_event_payload->rpc_loc_event_payload_u_type_u.nmea_report));
258e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
259e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // XTRA support: supports only XTRA download
260e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (loc_event & RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST)
261e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
262e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (loc_event_payload->rpc_loc_event_payload_u_type_u.assist_data_request.event ==
263e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            RPC_LOC_ASSIST_DATA_PREDICTED_ORBITS_REQ)
264e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
265e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            requestXtraData();
266e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        } else if (loc_event_payload->rpc_loc_event_payload_u_type_u.assist_data_request.event ==
267e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                   RPC_LOC_ASSIST_DATA_TIME_REQ)
268e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
269e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            requestTime();
270e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        } else if (loc_event_payload->rpc_loc_event_payload_u_type_u.assist_data_request.event ==
271e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                   RPC_LOC_ASSIST_DATA_POSITION_INJECTION_REQ)
272e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
273e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            requestLocation();
274e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
275e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
276e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
277e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // AGPS data request
278e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (loc_event & RPC_LOC_EVENT_LOCATION_SERVER_REQUEST)
279e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
280e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        ATLEvent(&loc_event_payload->rpc_loc_event_payload_u_type_u.
281e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 loc_server_request);
282e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
283e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
284e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // NI notify request
285e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (loc_event & RPC_LOC_EVENT_NI_NOTIFY_VERIFY_REQUEST)
286e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
287e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        NIEvent(&loc_event_payload->rpc_loc_event_payload_u_type_u.ni_request);
288e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
289e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
290e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return RPC_LOC_API_SUCCESS;//We simply want to return sucess here as we do not want to
291e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // cause any issues in RPC thread context
292e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
293e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
294e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
295e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::open(LOC_API_ADAPTER_EVENT_MASK_T mask)
296e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
297e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    enum loc_api_adapter_err ret_val = LOC_API_ADAPTER_ERR_SUCCESS;
298e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
299e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // RPC does not dynamically update the event mask. And in the
300e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // case of RPC, all we support are positioning (gps + agps)
301e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // masks anyways, so we simply mask all of them on always.
302e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // After doing so the first time in a power cycle, we know there
303e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // will the following if condition will never be true any more.
304e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    mask = maskAll;
305e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
306e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (mask != mMask) {
307e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (RPC_LOC_CLIENT_HANDLE_INVALID != client_handle) {
308e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            close();
309e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
310e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
311e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        mMask = mask;
312e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // it is important to cap the mask here, because not all LocApi's
313e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // can enable the same bits, e.g. foreground and bckground.
314e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        client_handle = loc_open(convertMask(mask),
315e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                 loc_event_cb,
316e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                 loc_rpc_global_cb, this);
317e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
318e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (client_handle < 0) {
319e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            mMask = 0;
320e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            client_handle = RPC_LOC_CLIENT_HANDLE_INVALID;
321e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            ret_val = LOC_API_ADAPTER_ERR_INVALID_HANDLE;
322e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
323e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
324e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
325e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return ret_val;
326e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
327e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
328e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
329e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::close()
330e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
331e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (RPC_LOC_CLIENT_HANDLE_INVALID != client_handle) {
332e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        loc_clear(client_handle);
333e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
334e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
335e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    loc_close(client_handle);
336e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    mMask = 0;
337e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    client_handle = RPC_LOC_CLIENT_HANDLE_INVALID;
338e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
339e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return LOC_API_ADAPTER_ERR_SUCCESS;
340e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
341e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
342e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
343e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::startFix(const LocPosMode& posMode) {
344e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   LOC_LOGD("LocApiRpc::startFix() called");
345e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   return convertErr(
346e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       loc_start_fix(client_handle)
347e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       );
348e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
349e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
350e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
351e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::stopFix() {
352e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   LOC_LOGD("LocApiRpc::stopFix() called");
353e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   return convertErr(
354e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       loc_stop_fix(client_handle)
355e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       );
356e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
357e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
358e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
359e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::setPositionMode(const LocPosMode& posMode)
360e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
361e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type    ioctl_data;
362e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_fix_criteria_s_type *fix_criteria_ptr =
363e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        &ioctl_data.rpc_loc_ioctl_data_u_type_u.fix_criteria;
364e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_e_type         ioctl_type = RPC_LOC_IOCTL_SET_FIX_CRITERIA;
365e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_operation_mode_e_type op_mode;
366e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int                          ret_val;
367e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    const LocPosMode* fixCriteria = &posMode;
368e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
369e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ALOGD ("loc_eng_set_position mode, client = %d, interval = %d, mode = %d\n",
370e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti          (int32) client_handle, fixCriteria->min_interval, fixCriteria->mode);
371e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
372e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    switch (fixCriteria->mode)
373e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
374e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case LOC_POSITION_MODE_MS_BASED:
375e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        op_mode = RPC_LOC_OPER_MODE_MSB;
376e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
377e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case LOC_POSITION_MODE_MS_ASSISTED:
378e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        op_mode = RPC_LOC_OPER_MODE_MSA;
379e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
380e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case LOC_POSITION_MODE_RESERVED_1:
381e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        op_mode = RPC_LOC_OPER_MODE_SPEED_OPTIMAL;
382e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
383e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case LOC_POSITION_MODE_RESERVED_2:
384e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        op_mode = RPC_LOC_OPER_MODE_ACCURACY_OPTIMAL;
385e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
386e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case LOC_POSITION_MODE_RESERVED_3:
387e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        op_mode = RPC_LOC_OPER_MODE_DATA_OPTIMAL;
388e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
389e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case LOC_POSITION_MODE_RESERVED_4:
390e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case LOC_POSITION_MODE_RESERVED_5:
391e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        op_mode = RPC_LOC_OPER_MODE_MSA;
392e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        fix_criteria_ptr->preferred_response_time  = 0;
393e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
394e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    default:
395e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        op_mode = RPC_LOC_OPER_MODE_STANDALONE;
396e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
397e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
398e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    fix_criteria_ptr->valid_mask = RPC_LOC_FIX_CRIT_VALID_PREFERRED_OPERATION_MODE |
399e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                   RPC_LOC_FIX_CRIT_VALID_RECURRENCE_TYPE;
400e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    fix_criteria_ptr->min_interval = fixCriteria->min_interval;
401e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    fix_criteria_ptr->preferred_operation_mode = op_mode;
402e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
403e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    fix_criteria_ptr->min_interval = fixCriteria->min_interval;
404e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_MIN_INTERVAL;
405e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
406e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (fixCriteria->preferred_accuracy > 0) {
407e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        fix_criteria_ptr->preferred_accuracy = fixCriteria->preferred_accuracy;
408e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_PREFERRED_ACCURACY;
409e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
410e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (fixCriteria->preferred_time > 0) {
411e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        fix_criteria_ptr->preferred_response_time = fixCriteria->preferred_time;
412e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        fix_criteria_ptr->valid_mask |= RPC_LOC_FIX_CRIT_VALID_PREFERRED_RESPONSE_TIME;
413e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
414e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
415e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    switch (fixCriteria->recurrence) {
416e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case GPS_POSITION_RECURRENCE_SINGLE:
417e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        fix_criteria_ptr->recurrence_type = RPC_LOC_SINGLE_FIX;
418e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
419e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case GPS_POSITION_RECURRENCE_PERIODIC:
420e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    default:
421e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        fix_criteria_ptr->recurrence_type = RPC_LOC_PERIODIC_FIX;
422e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
423e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
424e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_data.disc = ioctl_type;
425e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
426e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ret_val = loc_eng_ioctl (client_handle,
427e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             ioctl_type,
428e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             &ioctl_data,
429e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             LOC_IOCTL_DEFAULT_TIMEOUT,
430e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             NULL /* No output information is expected*/);
431e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
432e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(ret_val);
433e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
434e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
435e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
436e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::setTime(GpsUtcTime time, int64_t timeReference, int uncertainty)
437e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
438e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type        ioctl_data;
439e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_assist_data_time_s_type *time_info_ptr;
440e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_e_type             ioctl_type = RPC_LOC_IOCTL_INJECT_UTC_TIME;
441e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int                              ret_val;
442e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
443e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD ("loc_eng_inject_time, uncertainty = %d\n", uncertainty);
444e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
445e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    time_info_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.assistance_data_time;
446e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    time_info_ptr->time_utc = time;
447e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    time_info_ptr->time_utc += (int64_t)(ELAPSED_MILLIS_SINCE_BOOT_PLATFORM_LIB_ABSTRACTION - timeReference);
448e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    time_info_ptr->uncertainty = uncertainty; // Uncertainty in ms
449e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
450e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_data.disc = ioctl_type;
451e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
452e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ret_val = loc_eng_ioctl (client_handle,
453e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             ioctl_type,
454e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             &ioctl_data,
455e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             LOC_IOCTL_DEFAULT_TIMEOUT,
456e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             NULL /* No output information is expected*/);
457e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
458e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(ret_val);
459e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
460e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
461e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
462e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::injectPosition(double latitude, double longitude, float accuracy)
463e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
464e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    /* IOCTL data */
465e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type ioctl_data;
466e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_assist_data_pos_s_type *assistance_data_position =
467e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        &ioctl_data.rpc_loc_ioctl_data_u_type_u.assistance_data_position;
468e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int                          ret_val;
469e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
470e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    /************************************************
471e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti     * Fill in latitude, longitude & accuracy
472e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti     ************************************************/
473e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
474e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    /* This combo is required */
475e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    assistance_data_position->valid_mask =
476e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        RPC_LOC_ASSIST_POS_VALID_LATITUDE |
477e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        RPC_LOC_ASSIST_POS_VALID_LONGITUDE |
478e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        RPC_LOC_ASSIST_POS_VALID_HOR_UNC_CIRCULAR |
479e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        RPC_LOC_ASSIST_POS_VALID_CONFIDENCE_HORIZONTAL;
480e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
481e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    assistance_data_position->latitude = latitude;
482e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    assistance_data_position->longitude = longitude;
483e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    assistance_data_position->hor_unc_circular = accuracy; /* Meters assumed */
484e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    assistance_data_position->confidence_horizontal = 63;  /* 63% (1 std dev) assumed */
485e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
486e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    /* Log */
487e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD("Inject coarse position Lat=%lf, Lon=%lf, Acc=%.2lf\n",
488e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti             (double) assistance_data_position->latitude,
489e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti             (double) assistance_data_position->longitude,
490e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti             (double) assistance_data_position->hor_unc_circular);
491e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
492e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ret_val = loc_eng_ioctl( client_handle,
493e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             RPC_LOC_IOCTL_INJECT_POSITION,
494e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             &ioctl_data,
495e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             LOC_IOCTL_DEFAULT_TIMEOUT,
496e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             NULL /* No output information is expected*/);
497e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(ret_val);
498e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
499e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
500e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
501e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::informNiResponse(GpsUserResponseType userResponse,
502e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                   const void* passThroughData)
503e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
504e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type data;
505e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_callback_s_type callback_payload;
506e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
507e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    memcpy(&data.rpc_loc_ioctl_data_u_type_u.user_verify_resp.ni_event_pass_back,
508e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti           passThroughData, sizeof (rpc_loc_ni_event_s_type));
509e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
510e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ni_user_resp_e_type resp;
511e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    switch (userResponse)
512e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
513e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case GPS_NI_RESPONSE_ACCEPT:
514e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        data.rpc_loc_ioctl_data_u_type_u.user_verify_resp.user_resp =
515e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            RPC_LOC_NI_LCS_NOTIFY_VERIFY_ACCEPT;
516e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
517e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case GPS_NI_RESPONSE_DENY:
518e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        data.rpc_loc_ioctl_data_u_type_u.user_verify_resp.user_resp =
519e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            RPC_LOC_NI_LCS_NOTIFY_VERIFY_DENY;
520e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
521e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case GPS_NI_RESPONSE_NORESP:
522e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    default:
523e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        data.rpc_loc_ioctl_data_u_type_u.user_verify_resp.user_resp =
524e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            RPC_LOC_NI_LCS_NOTIFY_VERIFY_NORESP;
525e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
526e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
527e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
528e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(
529e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        loc_eng_ioctl(client_handle,
530e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      RPC_LOC_IOCTL_INFORM_NI_USER_RESPONSE,
531e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      &data,
532e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      LOC_IOCTL_DEFAULT_TIMEOUT,
533e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      &callback_payload)
534e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        );
535e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
536e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
537e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
538e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::setAPN(char* apn, int len, boolean force)
539e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
540e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    enum loc_api_adapter_err rtv = LOC_API_ADAPTER_ERR_SUCCESS;
541e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int size = sizeof(apnLastSet);
542e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (force || memcmp(apnLastSet, apn, size)) {
543e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (len < size) {
544e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            // size will be not larger than its original value
545e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            size = len + 1;
546e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
547e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        memcpy(apnLastSet, apn, size);
548e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
549e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (!isInSession()) {
550e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_LBS_APN_PROFILE, {0}};
551e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].srv_system_type = LOC_APN_PROFILE_SRV_SYS_MAX;
552e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].pdp_type = LOC_APN_PROFILE_PDN_TYPE_IPV4;
553e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            memcpy(&(ioctl_data.rpc_loc_ioctl_data_u_type_u.apn_profiles[0].apn_name), apn, size);
554e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
555e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            rtv = convertErr(
556e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                loc_eng_ioctl (client_handle,
557e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               RPC_LOC_IOCTL_SET_LBS_APN_PROFILE,
558e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               &ioctl_data,
559e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               LOC_IOCTL_DEFAULT_TIMEOUT,
560e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               NULL)
561e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                );
562e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
563e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
564e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return rtv;
565e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
566e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
567e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid LocApiRpc::setInSession(bool inSession)
568e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
569e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (!inSession) {
570e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        enableData(dataEnableLastSet, true);
571e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        setAPN(apnLastSet, sizeof(apnLastSet)-1, true);
572e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
573e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
574e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
575e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
576e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::setServer(const char* url, int len)
577e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
578e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type         ioctl_data;
579e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_server_info_s_type       *server_info_ptr;
580e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_e_type              ioctl_cmd;
581e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
582e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_cmd = RPC_LOC_IOCTL_SET_UMTS_SLP_SERVER_ADDR;
583e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_data.disc = ioctl_cmd;
584e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.server_addr;
585e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr->addr_type = RPC_LOC_SERVER_ADDR_URL;
586e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr->addr_info.disc = server_info_ptr->addr_type;
587e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.length = len;
588e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#if (AMSS_VERSION==3200)
589e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr.addr_val = (char*) url;
590e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr.addr_len= len;
591e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#else
592e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    strlcpy(server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr, url,
593e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            sizeof server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.url.addr);
594e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* #if (AMSS_VERSION==3200) */
595e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD ("loc_eng_set_server, addr = %s\n", url);
596e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
597e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(
598e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        loc_eng_ioctl (client_handle,
599e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       ioctl_cmd,
600e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       &ioctl_data,
601e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       LOC_IOCTL_DEFAULT_TIMEOUT,
602e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       NULL /* No output information is expected*/)
603e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        );
604e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
605e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
606e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
607e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::setServer(unsigned int ip, int port, LocServerType type)
608e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
609e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type         ioctl_data;
610e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_server_info_s_type       *server_info_ptr;
611e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_e_type              ioctl_cmd;
612e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
613e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    switch (type) {
614e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case LOC_AGPS_MPC_SERVER:
615e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        ioctl_cmd = RPC_LOC_IOCTL_SET_CDMA_MPC_SERVER_ADDR;
616e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
617e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case LOC_AGPS_CUSTOM_PDE_SERVER:
618e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        ioctl_cmd = RPC_LOC_IOCTL_SET_CUSTOM_PDE_SERVER_ADDR;
619e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
620e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    default:
621e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        ioctl_cmd = RPC_LOC_IOCTL_SET_CDMA_PDE_SERVER_ADDR;
622e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
623e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
624e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_data.disc = ioctl_cmd;
625e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.server_addr;
626e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr->addr_type = RPC_LOC_SERVER_ADDR_IPV4;
627e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr->addr_info.disc = server_info_ptr->addr_type;
628e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.ipv4.addr = ip;
629e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    server_info_ptr->addr_info.rpc_loc_server_addr_u_type_u.ipv4.port = port;
630e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD ("setServer, addr = %X:%d\n", (unsigned int) ip, (unsigned int) port);
631e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
632e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(
633e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        loc_eng_ioctl (client_handle,
634e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       ioctl_cmd,
635e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       &ioctl_data,
636e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       LOC_IOCTL_DEFAULT_TIMEOUT,
637e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       NULL /* No output information is expected*/)
638e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        );
639e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
640e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
641e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
642e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::enableData(int enable, boolean force)
643e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
644e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    enum loc_api_adapter_err rtv = LOC_API_ADAPTER_ERR_SUCCESS;
645e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (force || dataEnableLastSet != enable) {
646e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        dataEnableLastSet = enable;
647e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
648e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (!isInSession()) {
649e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_DATA_ENABLE, {0}};
650e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
651e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            ioctl_data.rpc_loc_ioctl_data_u_type_u.data_enable = enable;
652e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            rtv =  convertErr(
653e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                loc_eng_ioctl (client_handle,
654e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               RPC_LOC_IOCTL_SET_DATA_ENABLE,
655e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               &ioctl_data,
656e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               LOC_IOCTL_DEFAULT_TIMEOUT,
657e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               NULL)
658e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                );
659e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
660e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
661e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return rtv;
662e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
663e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
664e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
665e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::deleteAidingData(GpsAidingData bits)
666e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
667e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_DELETE_ASSIST_DATA, {0}};
668e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_data.rpc_loc_ioctl_data_u_type_u.assist_data_delete.type = bits;
669e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
670e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(
671e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        loc_eng_ioctl (client_handle,
672e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       RPC_LOC_IOCTL_DELETE_ASSIST_DATA,
673e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       &ioctl_data,
674e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       LOC_IOCTL_DEFAULT_TIMEOUT,
675e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                       NULL)
676e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        );
677e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
678e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
679e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid LocApiRpc::reportPosition(const rpc_loc_parsed_position_s_type *location_report_ptr)
680e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
681e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LocPosTechMask tech_Mask = LOC_POS_TECH_MASK_DEFAULT;
682e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
683e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    UlpLocation location = {0};
684e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    GpsLocationExtended locationExtended = {0};
685e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
686e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    location.size = sizeof(location);
687e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    locationExtended.size = sizeof(locationExtended);
688e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SESSION_STATUS)
689e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
690e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // Process the position from final and intermediate reports
691e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (location_report_ptr->session_status == RPC_LOC_SESS_STATUS_SUCCESS ||
692e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            location_report_ptr->session_status == RPC_LOC_SESS_STATUS_IN_PROGESS)
693e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
694e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            // Latitude & Longitude
695e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if ((location_report_ptr->valid_mask & RPC_LOC_POS_VALID_LATITUDE) &&
696e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_LONGITUDE) &&
697e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                (location_report_ptr->latitude != 0 ||
698e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 location_report_ptr->longitude != 0))
699e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
700e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                location.gpsLocation.flags    |= GPS_LOCATION_HAS_LAT_LONG;
701e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                location.gpsLocation.latitude  = location_report_ptr->latitude;
702e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                location.gpsLocation.longitude = location_report_ptr->longitude;
703e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
704e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // Time stamp (UTC)
705e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_TIMESTAMP_UTC)
706e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
707e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    location.gpsLocation.timestamp = location_report_ptr->timestamp_utc;
708e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
709e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
710e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // Altitude
711e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if (location_report_ptr->valid_mask &  RPC_LOC_POS_VALID_ALTITUDE_WRT_ELLIPSOID )
712e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
713e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    location.gpsLocation.flags    |= GPS_LOCATION_HAS_ALTITUDE;
714e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    location.gpsLocation.altitude = location_report_ptr->altitude_wrt_ellipsoid;
715e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
716e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
717e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // Speed
718e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SPEED_HORIZONTAL)
719e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
720e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    location.gpsLocation.flags    |= GPS_LOCATION_HAS_SPEED;
721e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    location.gpsLocation.speed = location_report_ptr->speed_horizontal;
722e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
723e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
724e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // Heading
725e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if (location_report_ptr->valid_mask &  RPC_LOC_POS_VALID_HEADING)
726e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
727e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    location.gpsLocation.flags    |= GPS_LOCATION_HAS_BEARING;
728e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    location.gpsLocation.bearing = location_report_ptr->heading;
729e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
730e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
731e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // Uncertainty (circular)
732e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if ( (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_HOR_UNC_CIRCULAR) )
733e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
734e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    location.gpsLocation.flags    |= GPS_LOCATION_HAS_ACCURACY;
735e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    location.gpsLocation.accuracy = location_report_ptr->hor_unc_circular;
736e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
737e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
738e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // Technology Mask
739e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
740e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                tech_Mask  |= location_report_ptr->technology_mask;
741e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                //Mark the location source as from GNSS
742e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                location.gpsLocation.flags |= LOCATION_HAS_SOURCE_INFO;
743e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                location.position_source = ULP_LOCATION_IS_FROM_GNSS;
744e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_ALTITUDE_WRT_MEAN_SEA_LEVEL)
745e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
746e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_ALTITUDE_MEAN_SEA_LEVEL;
747e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    locationExtended.altitudeMeanSeaLevel = location_report_ptr->altitude_wrt_mean_sea_level;
748e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
749e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
750e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if (location_report_ptr->valid_mask &  RPC_LOC_POS_VALID_MAGNETIC_VARIATION )
751e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
752e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_MAG_DEV;
753e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    locationExtended.magneticDeviation = location_report_ptr->magnetic_deviation;
754e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
755e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
756e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_VERTICAL_UNC)
757e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
758e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                   locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_VERT_UNC;
759e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                   locationExtended.vert_unc = location_report_ptr->vert_unc;
760e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
761e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
762e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if (location_report_ptr->valid_mask & RPC_LOC_POS_VALID_SPEED_UNC)
763e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
764e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                   locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_SPEED_UNC;
765e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                   locationExtended.speed_unc = location_report_ptr->speed_unc;
766e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
767e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
768e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                LOC_LOGV("reportPosition: fire callback\n");
769e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                enum loc_sess_status fixStatus =
770e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    (location_report_ptr->session_status
771e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     == RPC_LOC_SESS_STATUS_IN_PROGESS ?
772e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     LOC_SESS_INTERMEDIATE : LOC_SESS_SUCCESS);
773e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                LocApiBase::reportPosition(location,
774e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                           locationExtended,
775e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                           (void*)location_report_ptr,
776e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                           fixStatus,
777e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                           tech_Mask);
778e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
779e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
780e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        else
781e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
782e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LocApiBase::reportPosition(location,
783e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                       locationExtended,
784e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                       NULL,
785e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                       LOC_SESS_FAILURE);
786e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGV("loc_eng_report_position: ignore position report "
787e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     "when session status = %d\n",
788e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     location_report_ptr->session_status);
789e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
790e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
791e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    else
792e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
793e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGV("loc_eng_report_position: ignore position report "
794e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 "when session status is not set\n");
795e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
796e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
797e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
798e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid LocApiRpc::reportSv(const rpc_loc_gnss_info_s_type *gnss_report_ptr)
799e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
8002e0c5f2f0d31e06a817de185fda694ba79f82ce0Dante Russo    QtiGnssSvStatus     SvStatus = {0};
801e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    GpsLocationExtended locationExtended = {0};
802e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    locationExtended.size = sizeof(locationExtended);
803e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int             num_svs_max = 0;
804e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    const rpc_loc_sv_info_s_type *sv_info_ptr;
805e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
806e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_SV_COUNT)
807e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
808e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        num_svs_max = gnss_report_ptr->sv_count;
809e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (num_svs_max > GPS_MAX_SVS)
810e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
811e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            num_svs_max = GPS_MAX_SVS;
812e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
813e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
814e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
815e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_SV_LIST)
816e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
817e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        SvStatus.num_svs = 0;
818e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
819e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        for (int i = 0; i < num_svs_max; i++)
820e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
821e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            sv_info_ptr = &(gnss_report_ptr->sv_list.sv_list_val[i]);
822e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if (sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_SYSTEM)
823e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
824e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                if (sv_info_ptr->system == RPC_LOC_SV_SYSTEM_GPS)
825e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
826e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    SvStatus.sv_list[SvStatus.num_svs].size = sizeof(GpsSvInfo);
827e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    SvStatus.sv_list[SvStatus.num_svs].prn = sv_info_ptr->prn;
828e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
829e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    // We only have the data field to report gps eph and alm mask
830e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    if ((sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_HAS_EPH) &&
831e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        (sv_info_ptr->has_eph == 1))
832e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    {
833e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        SvStatus.ephemeris_mask |= (1 << (sv_info_ptr->prn-1));
834e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    }
835e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
836e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    if ((sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_HAS_ALM) &&
837e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        (sv_info_ptr->has_alm == 1))
838e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    {
839e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        SvStatus.almanac_mask |= (1 << (sv_info_ptr->prn-1));
840e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    }
841e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
842e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    if ((sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_PROCESS_STATUS) &&
843e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        (sv_info_ptr->process_status == RPC_LOC_SV_STATUS_TRACK))
844e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    {
845e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        SvStatus.gps_used_in_fix_mask |= (1 << (sv_info_ptr->prn-1));
846e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    }
847e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
848e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // SBAS: GPS RPN: 120-151,
849e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // In exteneded measurement report, we follow nmea standard, which is from 33-64.
850e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                else if (sv_info_ptr->system == RPC_LOC_SV_SYSTEM_SBAS)
851e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
852e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    SvStatus.sv_list[SvStatus.num_svs].prn = sv_info_ptr->prn + 33 - 120;
853e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
854e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // Gloness: Slot id: 1-32
855e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // In extended measurement report, we follow nmea standard, which is 65-96
856e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                else if (sv_info_ptr->system == RPC_LOC_SV_SYSTEM_GLONASS)
857e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
858e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    if ((sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_PROCESS_STATUS) &&
859e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        (sv_info_ptr->process_status == RPC_LOC_SV_STATUS_TRACK))
860e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    {
861e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                        SvStatus.glo_used_in_fix_mask |= (1 << (sv_info_ptr->prn-1));
862e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    }
863e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
864e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    SvStatus.sv_list[SvStatus.num_svs].prn = sv_info_ptr->prn + (65-1);
865e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
866e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                // Unsupported SV system
867e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                else
868e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                {
869e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    continue;
870e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                }
871e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
872e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
873e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if (sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_SNR)
874e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
875e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                SvStatus.sv_list[SvStatus.num_svs].snr = sv_info_ptr->snr;
876e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
877e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
878e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if (sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_ELEVATION)
879e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
880e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                SvStatus.sv_list[SvStatus.num_svs].elevation = sv_info_ptr->elevation;
881e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
882e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
883e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if (sv_info_ptr->valid_mask & RPC_LOC_SV_INFO_VALID_AZIMUTH)
884e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
885e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                SvStatus.sv_list[SvStatus.num_svs].azimuth = sv_info_ptr->azimuth;
886e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
887e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
888e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            SvStatus.num_svs++;
889e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
890e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
891e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
892e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if ((gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_POS_DOP) &&
893e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        (gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_HOR_DOP) &&
894e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        (gnss_report_ptr->valid_mask & RPC_LOC_GNSS_INFO_VALID_VERT_DOP))
895e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
896e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        locationExtended.flags |= GPS_LOCATION_EXTENDED_HAS_DOP;
897e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        locationExtended.pdop = gnss_report_ptr->position_dop;
898e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        locationExtended.hdop = gnss_report_ptr->horizontal_dop;
899e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        locationExtended.vdop = gnss_report_ptr->vertical_dop;
900e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
901e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
902e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (SvStatus.num_svs >= 0)
903e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
904e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LocApiBase::reportSv(SvStatus,
905e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             locationExtended,
906e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                             (void*)gnss_report_ptr);
907e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
908e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
909e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
910e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid LocApiRpc::reportStatus(const rpc_loc_status_event_s_type *status_report_ptr)
911e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
912e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
913e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (status_report_ptr->event == RPC_LOC_STATUS_EVENT_ENGINE_STATE) {
914e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (status_report_ptr->payload.rpc_loc_status_event_payload_u_type_u.engine_state == RPC_LOC_ENGINE_STATE_ON)
915e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
916e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LocApiBase::reportStatus(GPS_STATUS_ENGINE_ON);
917e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LocApiBase::reportStatus(GPS_STATUS_SESSION_BEGIN);
918e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
919e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        else if (status_report_ptr->payload.rpc_loc_status_event_payload_u_type_u.engine_state == RPC_LOC_ENGINE_STATE_OFF)
920e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
921e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LocApiBase::reportStatus(GPS_STATUS_SESSION_END);
922e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LocApiBase::reportStatus(GPS_STATUS_ENGINE_OFF);
923e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
924e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        else
925e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
926e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LocApiBase::reportStatus(GPS_STATUS_NONE);
927e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
928e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
929e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
930e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
931e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
932e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid LocApiRpc::reportNmea(const rpc_loc_nmea_report_s_type *nmea_report_ptr)
933e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
934e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
935e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#if (AMSS_VERSION==3200)
936e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LocApiBase::reportNmea(nmea_report_ptr->nmea_sentences.nmea_sentences_val,
937e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                           nmea_report_ptr->nmea_sentences.nmea_sentences_len);
938e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#else
939e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LocApiBase::reportNmea(nmea_report_ptr->nmea_sentences,
940e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                           nmea_report_ptr->length);
941e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD("loc_eng_report_nmea: $%c%c%c\n",
942e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti             nmea_report_ptr->nmea_sentences[3],
943e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti             nmea_report_ptr->nmea_sentences[4],
944e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti             nmea_report_ptr->nmea_sentences[5]);
945e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* #if (AMSS_VERSION==3200) */
946e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
947e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
948e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
949e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::setXtraData(char* data, int length)
950e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
951e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int     rpc_ret_val = RPC_LOC_API_GENERAL_FAILURE;
952e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int     total_parts;
953e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    uint8   part;
954e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    uint16  part_len;
955e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    uint16  len_injected;
956e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type            ioctl_data;
957e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_e_type                 ioctl_type = RPC_LOC_IOCTL_INJECT_PREDICTED_ORBITS_DATA;
958e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_predicted_orbits_data_s_type *predicted_orbits_data_ptr;
959e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
960e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD("qct_loc_eng_inject_xtra_data, xtra size = %d, data ptr = 0x%lx\n", length, (long) data);
961e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
962e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    predicted_orbits_data_ptr = &ioctl_data.rpc_loc_ioctl_data_u_type_u.predicted_orbits_data;
963e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    predicted_orbits_data_ptr->format_type = RPC_LOC_PREDICTED_ORBITS_XTRA;
964e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    predicted_orbits_data_ptr->total_size = length;
965e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    total_parts = (length - 1) / XTRA_BLOCK_SIZE + 1;
966e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    predicted_orbits_data_ptr->total_parts = total_parts;
967e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
968e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    len_injected = 0; // O bytes injected
969e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_data.disc = ioctl_type;
970e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
971e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // XTRA injection starts with part 1
972e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    for (part = 1; part <= total_parts; part++)
973e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
974e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        predicted_orbits_data_ptr->part = part;
975e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        predicted_orbits_data_ptr->part_len = XTRA_BLOCK_SIZE;
976e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (XTRA_BLOCK_SIZE > (length - len_injected))
977e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
978e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            predicted_orbits_data_ptr->part_len = length - len_injected;
979e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
980e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        predicted_orbits_data_ptr->data_ptr.data_ptr_len = predicted_orbits_data_ptr->part_len;
981e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        predicted_orbits_data_ptr->data_ptr.data_ptr_val = data + len_injected;
982e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
983e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGD("qct_loc_eng_inject_xtra_data, part %d/%d, len = %d, total = %d\n",
984e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 predicted_orbits_data_ptr->part,
985e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 total_parts,
986e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 predicted_orbits_data_ptr->part_len,
987e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 len_injected);
988e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
989e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (part < total_parts)
990e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
991e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            // No callback in this case
992e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            rpc_ret_val = loc_ioctl (client_handle,
993e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                     ioctl_type,
994e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                     &ioctl_data);
995e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
996e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if (rpc_ret_val != RPC_LOC_API_SUCCESS)
997e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
998e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                LOC_LOGE("loc_ioctl for xtra error: %s\n", loc_get_ioctl_status_name(rpc_ret_val));
999e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                break;
1000e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
1001e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            //Add a delay of 10 ms so that repeated RPC calls dont starve the modem processor
1002e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            usleep(10 * 1000);
1003e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1004e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        else // part == total_parts
1005e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
1006e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            // Last part injection, will need to wait for callback
1007e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if (!loc_eng_ioctl(client_handle,
1008e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               ioctl_type,
1009e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               &ioctl_data,
1010e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               LOC_XTRA_INJECT_DEFAULT_TIMEOUT,
1011e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                               NULL))
1012e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
1013e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                rpc_ret_val = RPC_LOC_API_GENERAL_FAILURE;
1014e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
1015e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            break; // done with injection
1016e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1017e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1018e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        len_injected += predicted_orbits_data_ptr->part_len;
1019e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGD("loc_ioctl XTRA injected length: %d\n", len_injected);
1020e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1021e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1022e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(rpc_ret_val);
1023e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1024e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1025e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/* Request the Xtra Server Url from the modem */
1026e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
1027e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::requestXtraServer()
1028e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1029e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    loc_api_adapter_err           err;
1030e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type     data;
1031e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_callback_s_type callback_data;
1032e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1033e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    err = convertErr(loc_eng_ioctl(client_handle,
1034e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                   RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE,
1035e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                   &data,
1036e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                   LOC_IOCTL_DEFAULT_TIMEOUT,
1037e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                   &callback_data));
1038e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1039e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (LOC_API_ADAPTER_ERR_SUCCESS != err)
1040e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
1041e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGE("RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE failed!: err=%d\n", err);
1042e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return err;
1043e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1044e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    else if (RPC_LOC_SESS_STATUS_SUCCESS != callback_data.status)
1045e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
1046e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGE("RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE failed!: status=%ld\n", callback_data.status);
1047e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
1048e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1049e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    else if (RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE != callback_data.type)
1050e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
1051e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGE("RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE is not the type expected! type=%d\n", callback_data.type);
1052e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
1053e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1054e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    else if (RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE != callback_data.data.disc)
1055e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
1056e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGE("RPC_LOC_IOCTL_QUERY_PREDICTED_ORBITS_DATA_SOURCE is not the disc expected! disc=%d\n", callback_data.data.disc);
1057e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return LOC_API_ADAPTER_ERR_GENERAL_FAILURE;
1058e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1059e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1060e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    reportXtraServer(callback_data.data.rpc_loc_ioctl_callback_data_u_type_u.
1061e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     predicted_orbits_data_source.servers[0],
1062e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     callback_data.data.rpc_loc_ioctl_callback_data_u_type_u.
1063e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     predicted_orbits_data_source.servers[1],
1064e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     callback_data.data.rpc_loc_ioctl_callback_data_u_type_u.
1065e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     predicted_orbits_data_source.servers[2],
1066e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                     255);
1067e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1068e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return LOC_API_ADAPTER_ERR_SUCCESS;
1069e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1070e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1071e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
1072e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::atlOpenStatus(int handle, int is_succ, char* apn, AGpsBearerType bearer, AGpsType agpsType)
1073e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1074e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_server_open_status_e_type open_status = is_succ ? RPC_LOC_SERVER_OPEN_SUCCESS : RPC_LOC_SERVER_OPEN_FAIL;
1075e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   rpc_loc_ioctl_data_u_type           ioctl_data;
1076e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1077e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if (AGPS_TYPE_INVALID == agpsType) {
1078e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        rpc_loc_server_open_status_s_type  *conn_open_status_ptr =
1079e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            &ioctl_data.rpc_loc_ioctl_data_u_type_u.conn_open_status;
1080e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1081e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // Fill in data
1082e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        ioctl_data.disc = RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS;
1083e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        conn_open_status_ptr->conn_handle = handle;
1084e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        conn_open_status_ptr->open_status = open_status;
1085e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#if (AMSS_VERSION==3200)
1086e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        conn_open_status_ptr->apn_name = apn; /* requires APN */
1087e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#else
1088e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (is_succ) {
1089e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            strlcpy(conn_open_status_ptr->apn_name, apn,
1090e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    sizeof conn_open_status_ptr->apn_name);
1091e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        } else {
1092e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            conn_open_status_ptr->apn_name[0] = 0;
1093e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1094e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* #if (AMSS_VERSION==3200) */
1095e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1096e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGD("ATL RPC_LOC_IOCTL_INFORM_SERVER_OPEN_STATUS open %s, APN name = [%s]\n",
1097e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 log_succ_fail_string(is_succ),
1098e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 apn);
1099e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    } else {
1100e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        rpc_loc_server_multi_open_status_s_type  *conn_multi_open_status_ptr =
1101e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            &ioctl_data.rpc_loc_ioctl_data_u_type_u.multi_conn_open_status;
1102e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1103e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // Fill in data
1104e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        ioctl_data.disc = RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS;
1105e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        conn_multi_open_status_ptr->conn_handle = handle;
1106e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        conn_multi_open_status_ptr->open_status = open_status;
1107e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (is_succ) {
1108e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            strlcpy(conn_multi_open_status_ptr->apn_name, apn,
1109e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    sizeof conn_multi_open_status_ptr->apn_name);
1110e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        } else {
1111e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            conn_multi_open_status_ptr->apn_name[0] = 0;
1112e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1113e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1114e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        switch(bearer)
1115e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
1116e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        case AGPS_APN_BEARER_IPV4:
1117e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_IP;
1118e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            break;
1119e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        case AGPS_APN_BEARER_IPV6:
1120e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_IPV6;
1121e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            break;
1122e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        case AGPS_APN_BEARER_IPV4V6:
1123e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_IPV4V6;
1124e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            break;
1125e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        default:
1126e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            conn_multi_open_status_ptr->pdp_type = RPC_LOC_SERVER_PDP_PPP;
1127e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1128e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1129e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGD("ATL RPC_LOC_IOCTL_INFORM_SERVER_MULTI_OPEN_STATUS open %s, APN name = [%s], pdp_type = %d\n",
1130e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 log_succ_fail_string(is_succ),
1131e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 apn,
1132e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                 conn_multi_open_status_ptr->pdp_type);
1133e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1134e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1135e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // Make the IOCTL call
1136e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(
1137e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        loc_eng_ioctl(client_handle,
1138e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      ioctl_data.disc,
1139e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      &ioctl_data,
1140e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      LOC_IOCTL_DEFAULT_TIMEOUT,
1141e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      NULL)
1142e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        );
1143e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1144e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1145e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
1146e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::atlCloseStatus(int handle, int is_succ)
1147e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1148e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type           ioctl_data;
1149e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_data.disc = RPC_LOC_IOCTL_INFORM_SERVER_CLOSE_STATUS;
1150e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1151e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_server_close_status_s_type *conn_close_status_ptr =
1152e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        &ioctl_data.rpc_loc_ioctl_data_u_type_u.conn_close_status;
1153e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    conn_close_status_ptr->conn_handle = handle;
1154e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    conn_close_status_ptr->close_status = is_succ ? RPC_LOC_SERVER_CLOSE_SUCCESS : RPC_LOC_SERVER_CLOSE_FAIL;
1155e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1156e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // Make the IOCTL call
1157e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return convertErr(
1158e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        loc_eng_ioctl(client_handle,
1159e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      ioctl_data.disc,
1160e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      &ioctl_data,
1161e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      LOC_IOCTL_DEFAULT_TIMEOUT,
1162e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      NULL)
1163e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        );
1164e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1165e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1166e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid LocApiRpc::ATLEvent(const rpc_loc_server_request_s_type *server_request_ptr)
1167e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1168e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int connHandle;
1169e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    AGpsType agps_type;
1170e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1171e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGV("RPC_LOC_EVENT_ASSISTANCE_DATA_REQUEST event %s)",
1172e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti             loc_get_event_atl_open_name(server_request_ptr->event));
1173e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    switch (server_request_ptr->event)
1174e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
1175e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_SERVER_REQUEST_MULTI_OPEN:
1176e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        connHandle = server_request_ptr->payload.rpc_loc_server_request_u_type_u.multi_open_req.conn_handle;
1177e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (server_request_ptr->payload.rpc_loc_server_request_u_type_u.multi_open_req.connection_type
1178e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            == RPC_LOC_SERVER_CONNECTION_LBS) {
1179e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            agps_type = AGPS_TYPE_SUPL;
1180e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_MULTI_OPEN\n            type - AGPS_TYPE_SUPL\n            handle - %d", connHandle);
1181e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        } else {
1182e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            agps_type = AGPS_TYPE_WWAN_ANY;
1183e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_MULTI_OPEN\n            type - AGPS_TYPE_WWAN_ANY\n            handle - %d", connHandle);
1184e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1185e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        requestATL(connHandle, agps_type);
1186e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
1187e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_SERVER_REQUEST_OPEN:
1188e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        connHandle = server_request_ptr->payload.rpc_loc_server_request_u_type_u.open_req.conn_handle;
1189e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_OPEN\n            handle - %d", connHandle);
1190e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        requestATL(connHandle, AGPS_TYPE_INVALID);
1191e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
1192e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_SERVER_REQUEST_CLOSE:
1193e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        connHandle = server_request_ptr->payload.rpc_loc_server_request_u_type_u.close_req.conn_handle;
1194e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGV("ATLEvent: event - RPC_LOC_SERVER_REQUEST_CLOSE\n            handle - %d", connHandle);
1195e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        releaseATL(connHandle);
1196e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
1197e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    default:
1198e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGE("ATLEvent: event type %d invalid", server_request_ptr->event);
1199e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   }
1200e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1201e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1202e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletivoid LocApiRpc::NIEvent(const rpc_loc_ni_event_s_type *ni_req)
1203e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1204e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    GpsNiNotification notif = {0};
1205e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1206e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    switch (ni_req->event)
1207e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
1208e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_NI_EVENT_VX_NOTIFY_VERIFY_REQ:
1209e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
1210e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        const rpc_loc_ni_vx_notify_verify_req_s_type *vx_req =
1211e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            &ni_req->payload.rpc_loc_ni_event_payload_u_type_u.vx_req;
1212e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGI("VX Notification");
1213e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        notif.ni_type = GPS_NI_TYPE_VOICE;
1214e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // Requestor ID
1215e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        hexcode(notif.requestor_id, sizeof notif.requestor_id,
1216e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                vx_req->requester_id.requester_id,
1217e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                vx_req->requester_id.requester_id_length);
1218e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        notif.text_encoding = 0; // No text and no encoding
1219e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        notif.requestor_id_encoding = convertNiEncodingType(vx_req->encoding_scheme);
1220e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        NIEventFillVerfiyType(notif, vx_req->notification_priv_type);
1221e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1222e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
1223e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1224e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_NI_EVENT_UMTS_CP_NOTIFY_VERIFY_REQ:
1225e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
1226e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        const rpc_loc_ni_umts_cp_notify_verify_req_s_type *umts_cp_req =
1227e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            &ni_req->payload.rpc_loc_ni_event_payload_u_type_u.umts_cp_req;
1228e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGI("UMTS CP Notification\n");
1229e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        notif.ni_type= GPS_NI_TYPE_UMTS_CTRL_PLANE;         // Stores notification text
1230e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#if (AMSS_VERSION==3200)
1231e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        hexcode(notif.text, sizeof notif.text,
1232e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                umts_cp_req->notification_text.notification_text_val,
1233e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                umts_cp_req->notification_length);
1234e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        hexcode(notif.requestor_id, sizeof notif.requestor_id,
1235e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                umts_cp_req->requestor_id.requestor_id_string.requestor_id_string_val,
1236e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                umts_cp_req->requestor_id.string_len);
1237e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#else
1238e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        hexcode(notif.text, sizeof notif.text,
1239e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                umts_cp_req->notification_text,
1240e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                umts_cp_req->notification_length);
1241e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        hexcode(notif.requestor_id, sizeof notif.requestor_id,
1242e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                umts_cp_req->requestor_id.requestor_id_string,
1243e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                umts_cp_req->requestor_id.string_len);
1244e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif
1245e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        notif.text_encoding = convertNiEncodingType(umts_cp_req->datacoding_scheme);
1246e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        notif.requestor_id_encoding = notif.text_encoding;
1247e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        NIEventFillVerfiyType(notif, umts_cp_req->notification_priv_type);
1248e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1249e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // LCS address (using extras field)
1250e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (umts_cp_req->ext_client_address_data.ext_client_address_len != 0)
1251e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
1252e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            // Copy LCS Address into notif.extras in the format: Address = 012345
1253e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            strlcat(notif.extras, LOC_NI_NOTIF_KEY_ADDRESS, sizeof notif.extras);
1254e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            strlcat(notif.extras, " = ", sizeof notif.extras);
1255e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            int addr_len = 0;
1256e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            const char *address_source = NULL;
1257e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1258e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#if (AMSS_VERSION==3200)
1259e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            address_source = umts_cp_req->ext_client_address_data.ext_client_address.ext_client_address_val;
1260e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#else
1261e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            address_source = umts_cp_req->ext_client_address_data.ext_client_address;
1262e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* #if (AMSS_VERSION==3200) */
1263e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1264e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            char lcs_addr[32]; // Decoded LCS address for UMTS CP NI
1265e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            addr_len = decodeAddress(lcs_addr, sizeof lcs_addr, address_source,
1266e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                     umts_cp_req->ext_client_address_data.ext_client_address_len);
1267e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1268e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            // The address is ASCII string
1269e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            if (addr_len)
1270e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            {
1271e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                strlcat(notif.extras, lcs_addr, sizeof notif.extras);
1272e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            }
1273e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1274e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1275e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
1276e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1277e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    case RPC_LOC_NI_EVENT_SUPL_NOTIFY_VERIFY_REQ:
1278e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    {
1279e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        const rpc_loc_ni_supl_notify_verify_req_s_type *supl_req =
1280e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            &ni_req->payload.rpc_loc_ni_event_payload_u_type_u.supl_req;
1281e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGI("SUPL Notification\n");
1282e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        notif.ni_type = GPS_NI_TYPE_UMTS_SUPL;
1283e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1284e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (supl_req->flags & RPC_LOC_NI_CLIENT_NAME_PRESENT)
1285e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
1286e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#if (AMSS_VERSION==3200)
1287e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            hexcode(notif.text, sizeof notif.text,
1288e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    supl_req->client_name.client_name_string.client_name_string_val,   /* buffer */
1289e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    supl_req->client_name.string_len                                   /* length */
1290e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            );
1291e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#else
1292e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            hexcode(notif.text, sizeof notif.text,
1293e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            supl_req->client_name.client_name_string,   /* buffer */
1294e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            supl_req->client_name.string_len            /* length */
1295e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            );
1296e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* #if (AMSS_VERSION==3200) */
1297e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGV("SUPL NI: client_name: %s len=%d", notif.text, supl_req->client_name.string_len);
1298e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1299e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        else {
1300e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGV("SUPL NI: client_name not present.");
1301e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1302e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1303e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // Requestor ID
1304e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (supl_req->flags & RPC_LOC_NI_REQUESTOR_ID_PRESENT)
1305e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
1306e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#if (AMSS_VERSION==3200)
1307e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            hexcode(notif.requestor_id, sizeof notif.requestor_id,
1308e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    supl_req->requestor_id.requestor_id_string.requestor_id_string_val,  /* buffer */
1309e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    supl_req->requestor_id.string_len                                    /* length */
1310e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                );
1311e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#else
1312e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            hexcode(notif.requestor_id, sizeof notif.requestor_id,
1313e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    supl_req->requestor_id.requestor_id_string,  /* buffer */
1314e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                    supl_req->requestor_id.string_len            /* length */
1315e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                );
1316e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti#endif /* #if (AMSS_VERSION==3200) */
1317e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGV("SUPL NI: requestor_id: %s len=%d", notif.requestor_id, supl_req->requestor_id.string_len);
1318e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1319e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        else {
1320e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            LOC_LOGV("SUPL NI: requestor_id not present.");
1321e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1322e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1323e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        // Encoding type
1324e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        if (supl_req->flags & RPC_LOC_NI_ENCODING_TYPE_PRESENT)
1325e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        {
1326e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            notif.text_encoding = convertNiEncodingType(supl_req->datacoding_scheme);
1327e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            notif.requestor_id_encoding = notif.text_encoding;
1328e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1329e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        else {
1330e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti            notif.text_encoding = notif.requestor_id_encoding = GPS_ENC_UNKNOWN;
1331e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        }
1332e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1333e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        NIEventFillVerfiyType(notif, ni_req->payload.rpc_loc_ni_event_payload_u_type_u.supl_req.notification_priv_type);
1334e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1335e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        break;
1336e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1337e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    default:
1338e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGE("Unknown NI event: %x\n", (int) ni_req->event);
1339e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        return;
1340e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1341e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1342e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    // this copy will get freed in loc_eng_ni when loc_ni_respond() is called
1343e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ni_event_s_type *copy = (rpc_loc_ni_event_s_type *)malloc(sizeof(*copy));
1344e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    memcpy(copy, ni_req, sizeof(*copy));
1345e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    requestNiNotify(notif, (const void*)copy);
1346e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1347e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1348e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint LocApiRpc::NIEventFillVerfiyType(GpsNiNotification &notif,
1349e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                                rpc_loc_ni_notify_verify_e_type notif_priv)
1350e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1351e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   switch (notif_priv)
1352e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   {
1353e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   case RPC_LOC_NI_USER_NO_NOTIFY_NO_VERIFY:
1354e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.notify_flags = 0;
1355e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.default_response = GPS_NI_RESPONSE_NORESP;
1356e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       return 1;
1357e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   case RPC_LOC_NI_USER_NOTIFY_ONLY:
1358e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.notify_flags = GPS_NI_NEED_NOTIFY;
1359e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.default_response = GPS_NI_RESPONSE_NORESP;
1360e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       return 1;
1361e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   case RPC_LOC_NI_USER_NOTIFY_VERIFY_ALLOW_NO_RESP:
1362e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY;
1363e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.default_response = GPS_NI_RESPONSE_ACCEPT;
1364e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       return 1;
1365e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   case RPC_LOC_NI_USER_NOTIFY_VERIFY_NOT_ALLOW_NO_RESP:
1366e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.notify_flags = GPS_NI_NEED_NOTIFY | GPS_NI_NEED_VERIFY;
1367e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.default_response = GPS_NI_RESPONSE_DENY;
1368e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       return 1;
1369e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   case RPC_LOC_NI_USER_PRIVACY_OVERRIDE:
1370e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.notify_flags = GPS_NI_PRIVACY_OVERRIDE;
1371e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       notif.default_response = GPS_NI_RESPONSE_NORESP;
1372e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       return 1;
1373e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   default:
1374e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti      return 0;
1375e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   }
1376e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1377e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1378e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletienum loc_api_adapter_err
1379e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiRpc::setSUPLVersion(uint32_t version)
1380e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1381e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   rpc_loc_ioctl_data_u_type ioctl_data = {RPC_LOC_IOCTL_SET_SUPL_VERSION, {0}};
1382e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   ioctl_data.rpc_loc_ioctl_data_u_type_u.supl_version = (int)version;
1383e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   return convertErr(
1384e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       loc_eng_ioctl (client_handle,
1385e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      RPC_LOC_IOCTL_SET_SUPL_VERSION,
1386e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      &ioctl_data,
1387e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      LOC_IOCTL_DEFAULT_TIMEOUT,
1388e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      NULL)
1389e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       );
1390e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1391e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1392e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiGpsNiEncodingType LocApiRpc::convertNiEncodingType(int loc_encoding)
1393e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1394e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   switch (loc_encoding)
1395e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   {
1396e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   case RPC_LOC_NI_SUPL_UTF8:
1397e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       return GPS_ENC_SUPL_UTF8;
1398e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   case RPC_LOC_NI_SUPL_UCS2:
1399e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       return GPS_ENC_SUPL_UCS2;
1400e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   case RPC_LOC_NI_SUPL_GSM_DEFAULT:
1401e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti      return GPS_ENC_SUPL_GSM_DEFAULT;
1402e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   case RPC_LOC_NI_SS_LANGUAGE_UNSPEC:
1403e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti      return GPS_ENC_SUPL_GSM_DEFAULT; // SS_LANGUAGE_UNSPEC = GSM
1404e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   default:
1405e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti       return GPS_ENC_UNKNOWN;
1406e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti   }
1407e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1408e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1409e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore PasupuletiLocApiBase* getLocApi(const MsgTask* msgTask,
1410e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      LOC_API_ADAPTER_EVENT_MASK_T exMask,
1411e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                      ContextBase *context) {
1412e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return new LocApiRpc(msgTask, exMask, context);
1413e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1414e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1415e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*Values for lock
1416e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  1 = Do not lock any position sessions
1417e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  2 = Lock MI position sessions
1418e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  3 = Lock MT position sessions
1419e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  4 = Lock all position sessions
1420e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti*/
1421e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint LocApiRpc::setGpsLock(LOC_GPS_LOCK_MASK lockMask)
1422e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1423e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type    ioctl_data;
1424e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    boolean ret_val;
1425e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD("%s:%d]: lock: %x\n", __func__, __LINE__, lockMask);
1426e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_data.rpc_loc_ioctl_data_u_type_u.engine_lock = convertGpsLockMask(lockMask);
1427e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ioctl_data.disc = RPC_LOC_IOCTL_SET_ENGINE_LOCK;
1428e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ret_val = loc_eng_ioctl (loc_eng_data.client_handle,
1429e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            RPC_LOC_IOCTL_SET_ENGINE_LOCK,
1430e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            &ioctl_data,
1431e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            LOC_IOCTL_DEFAULT_TIMEOUT,
1432e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            NULL /* No output information is expected*/);
1433e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1434e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD("%s:%d]: ret_val: %d\n", __func__, __LINE__, (int)ret_val);
1435e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return (ret_val == TRUE ? 0 : -1);
1436e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1437e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti
1438e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti/*
1439e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  Returns
1440e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  Current value of GPS lock on success
1441e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti  -1 on failure
1442e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti*/
1443e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuletiint LocApiRpc :: getGpsLock()
1444e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti{
1445e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_data_u_type    ioctl_data;
1446e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    rpc_loc_ioctl_callback_s_type callback_payload;
1447e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    boolean ret_val;
1448e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    int ret=0;
1449e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD("%s:%d]: Enter\n", __func__, __LINE__);
1450e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    ret_val = loc_eng_ioctl (loc_eng_data.client_handle,
1451e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            RPC_LOC_IOCTL_GET_ENGINE_LOCK,
1452e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            &ioctl_data,
1453e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            LOC_IOCTL_DEFAULT_TIMEOUT,
1454e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti                            &callback_payload);
1455e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    if(ret_val == TRUE) {
1456e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        ret = (int)callback_payload.data.engine_lock;
1457e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGD("%s:%d]: Lock type: %d\n", __func__, __LINE__, ret);
1458e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1459e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    else {
1460e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        LOC_LOGE("%s:%d]: Ioctl failed", __func__, __LINE__);
1461e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti        ret = -1;
1462e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    }
1463e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    LOC_LOGD("%s:%d]: Exit\n", __func__, __LINE__);
1464e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti    return ret;
1465e7c98642e1e156ea6cde1238cd0006f669cfb696Uday Kishore Pasupuleti}
1466