1b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Copyright (c) 2012-2017, The Linux Foundation. All rights reserved. 2b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 3b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Redistribution and use in source and binary forms, with or without 4b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * modification, are permitted provided that the following conditions are 5b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * met: 6b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * * Redistributions of source code must retain the above copyright 7b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * notice, this list of conditions and the following disclaimer. 8b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * * Redistributions in binary form must reproduce the above 9b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * copyright notice, this list of conditions and the following 10b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * disclaimer in the documentation and/or other materials provided 11b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * with the distribution. 12b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * * Neither the name of The Linux Foundation, nor the names of its 13b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * contributors may be used to endorse or promote products derived 14b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * from this software without specific prior written permission. 15b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 16b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 28b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */ 29b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 30b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#ifndef AGPS_H 31b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#define AGPS_H 32b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 33b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <functional> 34b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <list> 35b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <MsgTask.h> 36b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <gps_extended_c.h> 37b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#include <platform_lib_log_util.h> 38b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 39b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* ATL callback function pointers 40b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Passed in by Adapter to AgpsManager */ 41b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void( 42b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int handle, int isSuccess, char* apn, 43b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsBearerType bearerType, AGpsExtType agpsType)> AgpsAtlOpenStatusCb; 44b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 45b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void(int handle, int isSuccess)> AgpsAtlCloseStatusCb; 46b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 47b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* DS Client control APIs 48b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Passed in by Adapter to AgpsManager */ 49b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<int(bool isDueToSSR)> AgpsDSClientInitFn; 50b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<int()> AgpsDSClientOpenAndStartDataCallFn; 51b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void()> AgpsDSClientStopDataCallFn; 52b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void()> AgpsDSClientCloseDataCallFn; 53b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void()> AgpsDSClientReleaseFn; 54b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 55b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Post message to adapter's message queue */ 56b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef std::function<void(LocMsg* msg)> SendMsgToAdapterMsgQueueFn; 57b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 58b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* AGPS States */ 59b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 60b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_STATE_INVALID = 0, 61b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_STATE_RELEASED, 62b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_STATE_PENDING, 63b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_STATE_ACQUIRED, 64b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_STATE_RELEASING 65b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} AgpsState; 66b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 67b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 68b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_EVENT_INVALID = 0, 69b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_EVENT_SUBSCRIBE, 70b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_EVENT_UNSUBSCRIBE, 71b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_EVENT_GRANTED, 72b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_EVENT_RELEASED, 73b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_EVENT_DENIED 74b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} AgpsEvent; 75b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 76b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Notification Types sent to subscribers */ 77b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudeltypedef enum { 78b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_NOTIFICATION_TYPE_INVALID = 0, 79b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 80b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Meant for all subscribers, either active or inactive */ 81b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_NOTIFICATION_TYPE_FOR_ALL_SUBSCRIBERS, 82b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 83b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Meant for only inactive subscribers */ 84b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_NOTIFICATION_TYPE_FOR_INACTIVE_SUBSCRIBERS, 85b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 86b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Meant for only active subscribers */ 87b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGPS_NOTIFICATION_TYPE_FOR_ACTIVE_SUBSCRIBERS 88b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} AgpsNotificationType; 89b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 90b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Framework AGNSS interface 91b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * This interface is defined in IAGnssCallback provided by 92b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Android Framework. 93b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Must be kept in sync with that interface. */ 94b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelnamespace AgpsFrameworkInterface { 95b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 96b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /** AGNSS type **/ 97b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel enum AGnssType : uint8_t { 98b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel TYPE_SUPL = 1, 99b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel TYPE_C2K = 2 100b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel }; 101b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 102b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel enum AGnssStatusValue : uint8_t { 103b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /** GNSS requests data connection for AGNSS. */ 104b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel REQUEST_AGNSS_DATA_CONN = 1, 105b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /** GNSS releases the AGNSS data connection. */ 106b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel RELEASE_AGNSS_DATA_CONN = 2, 107b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /** AGNSS data connection initiated */ 108b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGNSS_DATA_CONNECTED = 3, 109b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /** AGNSS data connection completed */ 110b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGNSS_DATA_CONN_DONE = 4, 111b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /** AGNSS data connection failed */ 112b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGNSS_DATA_CONN_FAILED = 5 113b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel }; 114b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 115b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* 116b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Represents the status of AGNSS augmented to support IPv4. 117b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */ 118b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel struct AGnssStatusIpV4 { 119b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGnssType type; 120b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGnssStatusValue status; 121b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* 122b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 32-bit IPv4 address. 123b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */ 124b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel unsigned int ipV4Addr; 125b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel }; 126b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 127b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* 128b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Represents the status of AGNSS augmented to support IPv6. 129b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */ 130b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel struct AGnssStatusIpV6 { 131b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGnssType type; 132b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGnssStatusValue status; 133b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* 134b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 128-bit IPv6 address. 135b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */ 136b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel unsigned char ipV6Addr[16]; 137b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel }; 138b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 139b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* 140b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Callback with AGNSS(IpV4) status information. 141b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 142b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * @param status Will be of type AGnssStatusIpV4. 143b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */ 144b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel typedef void (*AgnssStatusIpV4Cb)(AGnssStatusIpV4 status); 145b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 146b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* 147b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Callback with AGNSS(IpV6) status information. 148b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * 149b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * @param status Will be of type AGnssStatusIpV6. 150b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel */ 151b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel typedef void (*AgnssStatusIpV6Cb)(AGnssStatusIpV6 status); 152b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 153b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 154b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Classes in this header */ 155b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass AgpsSubscriber; 156b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass AgpsManager; 157b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass AgpsStateMachine; 158b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass DSStateMachine; 159b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 160b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 161b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* SUBSCRIBER 162b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Each Subscriber instance corresponds to one AGPS request, 163b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * received by the AGPS state machine */ 164b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass AgpsSubscriber { 165b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 166b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelpublic: 167b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int mConnHandle; 168b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 169b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Does this subscriber wait for data call close complete, 170b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * before being notified ATL close ? 171b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * While waiting for data call close, subscriber will be in 172b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * inactive state. */ 173b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel bool mWaitForCloseComplete; 174b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel bool mIsInactive; 175b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 176338013142871f4617375d772f47015779debfc5dDante Russo inline AgpsSubscriber( 177338013142871f4617375d772f47015779debfc5dDante Russo int connHandle, bool waitForCloseComplete, bool isInactive) : 178338013142871f4617375d772f47015779debfc5dDante Russo mConnHandle(connHandle), 179338013142871f4617375d772f47015779debfc5dDante Russo mWaitForCloseComplete(waitForCloseComplete), 180338013142871f4617375d772f47015779debfc5dDante Russo mIsInactive(isInactive) {} 181b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline virtual ~AgpsSubscriber() {} 182b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 183b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline virtual bool equals(const AgpsSubscriber *s) const 184b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel { return (mConnHandle == s->mConnHandle); } 185b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 186b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline virtual AgpsSubscriber* clone() 187338013142871f4617375d772f47015779debfc5dDante Russo { return new AgpsSubscriber( 188338013142871f4617375d772f47015779debfc5dDante Russo mConnHandle, mWaitForCloseComplete, mIsInactive); } 189b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 190b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 191b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* AGPS STATE MACHINE */ 192b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass AgpsStateMachine { 193b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprotected: 194b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* AGPS Manager instance, from where this state machine is created */ 195b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsManager* mAgpsManager; 196b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 197b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* List of all subscribers for this State Machine. 198b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Once a subscriber is notified for ATL open/close status, 199b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * it is deleted */ 200b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel std::list<AgpsSubscriber*> mSubscriberList; 201b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 202b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Current subscriber, whose request this State Machine is 203b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * currently processing */ 204b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsSubscriber* mCurrentSubscriber; 205b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 206b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Current state for this state machine */ 207b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsState mState; 208b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 209b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 210b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* AGPS Type for this state machine 211b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_AGPS_TYPE_ANY 0 212b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_AGPS_TYPE_SUPL 1 213b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_AGPS_TYPE_WWAN_ANY 3 214b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_AGPS_TYPE_SUPL_ES 5 */ 215b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType mAgpsType; 216b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 217b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* APN and IP Type info for AGPS Call */ 218b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel char* mAPN; 219b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel unsigned int mAPNLen; 220b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsBearerType mBearer; 221b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 222b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelpublic: 223b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* CONSTRUCTOR */ 224b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine(AgpsManager* agpsManager, AGpsExtType agpsType): 225b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAgpsManager(agpsManager), mSubscriberList(), 226b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mCurrentSubscriber(NULL), mState(AGPS_STATE_RELEASED), 227b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAgpsType(agpsType), mAPN(NULL), mAPNLen(0), 228b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mBearer(AGPS_APN_BEARER_INVALID) {}; 229b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 230b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel virtual ~AgpsStateMachine() { if(NULL != mAPN) delete[] mAPN; }; 231b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 232b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Getter/Setter methods */ 233b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void setAPN(char* apn, unsigned int len); 234b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline char* getAPN() const { return (char*)mAPN; } 235b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline void setBearer(AGpsBearerType bearer) { mBearer = bearer; } 236b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline AGpsBearerType getBearer() const { return mBearer; } 237b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline AGpsExtType getType() const { return mAgpsType; } 238b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline void setCurrentSubscriber(AgpsSubscriber* subscriber) 239b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel { mCurrentSubscriber = subscriber; } 240b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 241b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Fetch subscriber with specified handle */ 242b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsSubscriber* getSubscriber(int connHandle); 243b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 244b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Fetch first active or inactive subscriber in list 245b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * isInactive = true : fetch first inactive subscriber 246b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * isInactive = false : fetch first active subscriber */ 247b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsSubscriber* getFirstSubscriber(bool isInactive); 248b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 249b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Process LOC AGPS Event being passed in 250b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * onRsrcEvent */ 251b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel virtual void processAgpsEvent(AgpsEvent event); 252b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 253b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Drop all subscribers, in case of Modem SSR */ 254b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void dropAllSubscribers(); 255b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 256b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprotected: 257b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Remove the specified subscriber from list if present. 258b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Also delete the subscriber instance. */ 259b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void deleteSubscriber(AgpsSubscriber* subscriber); 260b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 261b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 262b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Send call setup request to framework 263b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * sendRsrcRequest(LOC_GPS_REQUEST_AGPS_DATA_CONN) 264b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * sendRsrcRequest(LOC_GPS_RELEASE_AGPS_DATA_CONN) */ 265b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel virtual int requestOrReleaseDataConn(bool request); 266b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 267b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Individual event processing methods */ 268b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventSubscribe(); 269b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventUnsubscribe(); 270b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventGranted(); 271b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventReleased(); 272b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventDenied(); 273b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 274b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Clone the passed in subscriber and add to the subscriber list 275b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * if not already present */ 276b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void addSubscriber(AgpsSubscriber* subscriber); 277b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 278b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Notify subscribers about AGPS events */ 279b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void notifyAllSubscribers( 280b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsEvent event, bool deleteSubscriberPostNotify, 281b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsNotificationType notificationType); 282b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel virtual void notifyEventToSubscriber( 283b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsEvent event, AgpsSubscriber* subscriber, 284b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel bool deleteSubscriberPostNotify); 285b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 286b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Do we have any subscribers in active state */ 287b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel bool anyActiveSubscribers(); 288b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 289b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Transition state */ 290b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void transitionState(AgpsState newState); 291b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 292b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 293b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* DS STATE MACHINE */ 294b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass DSStateMachine : public AgpsStateMachine { 295b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 296b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 297b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel static const int MAX_START_DATA_CALL_RETRIES; 298b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel static const int DATA_CALL_RETRY_DELAY_MSEC; 299b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 300b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int mRetries; 301b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 302b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelpublic: 303b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* CONSTRUCTOR */ 304b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel DSStateMachine(AgpsManager* agpsManager): 305b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine(agpsManager, LOC_AGPS_TYPE_SUPL_ES), mRetries(0) {} 306b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 307b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Overridden method 308b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * DS SM needs to handle one event differently */ 309b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEvent(AgpsEvent event); 310b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 311b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Retry callback, used in case call failure */ 312b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void retryCallback(); 313b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 314b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 315b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Overridden method, different functionality for DS SM 316b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Send call setup request to framework 317b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * sendRsrcRequest(LOC_GPS_REQUEST_AGPS_DATA_CONN) 318b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * sendRsrcRequest(LOC_GPS_RELEASE_AGPS_DATA_CONN) */ 319b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int requestOrReleaseDataConn(bool request); 320b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 321b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Overridden method, different functionality for DS SM */ 322b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void notifyEventToSubscriber( 323b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsEvent event, AgpsSubscriber* subscriber, 324b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel bool deleteSubscriberPostNotify); 325b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 326b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 327b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* LOC AGPS MANAGER */ 328b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass AgpsManager { 329b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 330b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel friend class AgpsStateMachine; 331b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel friend class DSStateMachine; 332b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 333b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelpublic: 334b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* CONSTRUCTOR */ 335b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsManager(): 336b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mFrameworkStatusV4Cb(NULL), 337b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAtlOpenStatusCb(), mAtlCloseStatusCb(), 338b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientInitFn(), mDSClientOpenAndStartDataCallFn(), 339b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientStopDataCallFn(), mDSClientCloseDataCallFn(), mDSClientReleaseFn(), 340b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mSendMsgToAdapterQueueFn(), 341b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAgnssNif(NULL), mInternetNif(NULL), mDsNif(NULL) {} 342b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 343b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Register callbacks */ 344b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void registerCallbacks( 345b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsFrameworkInterface::AgnssStatusIpV4Cb 346b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel frameworkStatusV4Cb, 347b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 348b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsAtlOpenStatusCb atlOpenStatusCb, 349b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsAtlCloseStatusCb atlCloseStatusCb, 350b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 351b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientInitFn dsClientInitFn, 352b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientOpenAndStartDataCallFn dsClientOpenAndStartDataCallFn, 353b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientStopDataCallFn dsClientStopDataCallFn, 354b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientCloseDataCallFn dsClientCloseDataCallFn, 355b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientReleaseFn dsClientReleaseFn, 356b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 357b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel SendMsgToAdapterMsgQueueFn sendMsgToAdapterQueueFn ){ 358b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 359b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mFrameworkStatusV4Cb = frameworkStatusV4Cb; 360b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 361b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAtlOpenStatusCb = atlOpenStatusCb; 362b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAtlCloseStatusCb = atlCloseStatusCb; 363b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 364b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientInitFn = dsClientInitFn; 365b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientOpenAndStartDataCallFn = dsClientOpenAndStartDataCallFn; 366b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientStopDataCallFn = dsClientStopDataCallFn; 367b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientCloseDataCallFn = dsClientCloseDataCallFn; 368b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientReleaseFn = dsClientReleaseFn; 369b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 370b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mSendMsgToAdapterQueueFn = sendMsgToAdapterQueueFn; 371b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 372b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 373b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Create all AGPS state machines */ 374b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void createAgpsStateMachines(); 375b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 376b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Process incoming ATL requests */ 377b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void requestATL(int connHandle, AGpsExtType agpsType); 378b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void releaseATL(int connHandle); 379b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 380b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Process incoming DS Client data call events */ 381b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportDataCallOpened(); 382b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportDataCallClosed(); 383b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 384b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Process incoming framework data call events */ 385b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportAtlOpenSuccess( 386b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType agpsType, char* apnName, int apnLen, 387b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocApnIpType ipType); 388b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportAtlOpenFailed(AGpsExtType agpsType); 389b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportAtlClosed(AGpsExtType agpsType); 390b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 391b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Handle Modem SSR */ 392b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void handleModemSSR(); 393b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 394b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprotected: 395b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsFrameworkInterface::AgnssStatusIpV4Cb mFrameworkStatusV4Cb; 396b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 397b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsAtlOpenStatusCb mAtlOpenStatusCb; 398b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsAtlCloseStatusCb mAtlCloseStatusCb; 399b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 400b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientInitFn mDSClientInitFn; 401b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientOpenAndStartDataCallFn mDSClientOpenAndStartDataCallFn; 402b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientStopDataCallFn mDSClientStopDataCallFn; 403b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientCloseDataCallFn mDSClientCloseDataCallFn; 404b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientReleaseFn mDSClientReleaseFn; 405b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 406b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel SendMsgToAdapterMsgQueueFn mSendMsgToAdapterQueueFn; 407b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 408b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine* mAgnssNif; 409b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine* mInternetNif; 410b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine* mDsNif; 411b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 412b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 413b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Fetch state machine for handling request ATL call */ 414b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine* getAgpsStateMachine(AGpsExtType agpsType); 415b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 416b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 417b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Request SUPL/INTERNET/SUPL_ES ATL 418b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * This LocMsg is defined in this header since it has to be used from more 419b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * than one place, other Agps LocMsg are restricted to GnssAdapter and 420b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * declared inline */ 421b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstruct AgpsMsgRequestATL: public LocMsg { 422b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 423b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsManager* mAgpsManager; 424b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int mConnHandle; 425b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType mAgpsType; 426b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 427b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline AgpsMsgRequestATL(AgpsManager* agpsManager, int connHandle, 428b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType agpsType) : 429b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocMsg(), mAgpsManager(agpsManager), mConnHandle(connHandle), mAgpsType( 430b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsType) { 431b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 432b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_LOGV("AgpsMsgRequestATL"); 433b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 434b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 435b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline virtual void proc() const { 436b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 437b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_LOGV("AgpsMsgRequestATL::proc()"); 438b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAgpsManager->requestATL(mConnHandle, mAgpsType); 439b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 440b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 441b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 442b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelnamespace AgpsUtils { 443b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 444b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry StrudelAGpsBearerType ipTypeToBearerType(LocApnIpType ipType); 445b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry StrudelLocApnIpType bearerTypeToIpType(AGpsBearerType bearerType); 446b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 447b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 448b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 449b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#endif /* AGPS_H */ 450