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 ¬if, 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