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 176b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline AgpsSubscriber(int connHandle) : 177b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mConnHandle(connHandle), mWaitForCloseComplete(false), 178b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mIsInactive(false) {} 179b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline virtual ~AgpsSubscriber() {} 180b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 181b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline virtual bool equals(const AgpsSubscriber *s) const 182b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel { return (mConnHandle == s->mConnHandle); } 183b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 184b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline virtual AgpsSubscriber* clone() 185b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel { return new AgpsSubscriber(mConnHandle); } 186b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 187b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 188b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* AGPS STATE MACHINE */ 189b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass AgpsStateMachine { 190b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprotected: 191b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* AGPS Manager instance, from where this state machine is created */ 192b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsManager* mAgpsManager; 193b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 194b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* List of all subscribers for this State Machine. 195b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Once a subscriber is notified for ATL open/close status, 196b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * it is deleted */ 197b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel std::list<AgpsSubscriber*> mSubscriberList; 198b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 199b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Current subscriber, whose request this State Machine is 200b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * currently processing */ 201b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsSubscriber* mCurrentSubscriber; 202b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 203b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Current state for this state machine */ 204b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsState mState; 205b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 206b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 207b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* AGPS Type for this state machine 208b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_AGPS_TYPE_ANY 0 209b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_AGPS_TYPE_SUPL 1 210b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_AGPS_TYPE_WWAN_ANY 3 211b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_AGPS_TYPE_SUPL_ES 5 */ 212b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType mAgpsType; 213b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 214b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* APN and IP Type info for AGPS Call */ 215b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel char* mAPN; 216b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel unsigned int mAPNLen; 217b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsBearerType mBearer; 218b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 219b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelpublic: 220b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* CONSTRUCTOR */ 221b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine(AgpsManager* agpsManager, AGpsExtType agpsType): 222b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAgpsManager(agpsManager), mSubscriberList(), 223b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mCurrentSubscriber(NULL), mState(AGPS_STATE_RELEASED), 224b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAgpsType(agpsType), mAPN(NULL), mAPNLen(0), 225b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mBearer(AGPS_APN_BEARER_INVALID) {}; 226b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 227b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel virtual ~AgpsStateMachine() { if(NULL != mAPN) delete[] mAPN; }; 228b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 229b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Getter/Setter methods */ 230b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void setAPN(char* apn, unsigned int len); 231b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline char* getAPN() const { return (char*)mAPN; } 232b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline void setBearer(AGpsBearerType bearer) { mBearer = bearer; } 233b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline AGpsBearerType getBearer() const { return mBearer; } 234b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline AGpsExtType getType() const { return mAgpsType; } 235b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline void setCurrentSubscriber(AgpsSubscriber* subscriber) 236b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel { mCurrentSubscriber = subscriber; } 237b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 238b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Fetch subscriber with specified handle */ 239b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsSubscriber* getSubscriber(int connHandle); 240b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 241b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Fetch first active or inactive subscriber in list 242b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * isInactive = true : fetch first inactive subscriber 243b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * isInactive = false : fetch first active subscriber */ 244b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsSubscriber* getFirstSubscriber(bool isInactive); 245b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 246b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Process LOC AGPS Event being passed in 247b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * onRsrcEvent */ 248b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel virtual void processAgpsEvent(AgpsEvent event); 249b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 250b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Drop all subscribers, in case of Modem SSR */ 251b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void dropAllSubscribers(); 252b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 253b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprotected: 254b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Remove the specified subscriber from list if present. 255b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Also delete the subscriber instance. */ 256b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void deleteSubscriber(AgpsSubscriber* subscriber); 257b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 258b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 259b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Send call setup request to framework 260b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * sendRsrcRequest(LOC_GPS_REQUEST_AGPS_DATA_CONN) 261b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * sendRsrcRequest(LOC_GPS_RELEASE_AGPS_DATA_CONN) */ 262b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel virtual int requestOrReleaseDataConn(bool request); 263b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 264b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Individual event processing methods */ 265b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventSubscribe(); 266b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventUnsubscribe(); 267b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventGranted(); 268b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventReleased(); 269b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEventDenied(); 270b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 271b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Clone the passed in subscriber and add to the subscriber list 272b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * if not already present */ 273b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void addSubscriber(AgpsSubscriber* subscriber); 274b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 275b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Notify subscribers about AGPS events */ 276b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void notifyAllSubscribers( 277b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsEvent event, bool deleteSubscriberPostNotify, 278b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsNotificationType notificationType); 279b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel virtual void notifyEventToSubscriber( 280b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsEvent event, AgpsSubscriber* subscriber, 281b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel bool deleteSubscriberPostNotify); 282b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 283b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Do we have any subscribers in active state */ 284b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel bool anyActiveSubscribers(); 285b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 286b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Transition state */ 287b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void transitionState(AgpsState newState); 288b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 289b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 290b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* DS STATE MACHINE */ 291b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass DSStateMachine : public AgpsStateMachine { 292b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 293b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 294b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel static const int MAX_START_DATA_CALL_RETRIES; 295b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel static const int DATA_CALL_RETRY_DELAY_MSEC; 296b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 297b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int mRetries; 298b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 299b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelpublic: 300b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* CONSTRUCTOR */ 301b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel DSStateMachine(AgpsManager* agpsManager): 302b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine(agpsManager, LOC_AGPS_TYPE_SUPL_ES), mRetries(0) {} 303b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 304b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Overridden method 305b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * DS SM needs to handle one event differently */ 306b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void processAgpsEvent(AgpsEvent event); 307b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 308b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Retry callback, used in case call failure */ 309b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void retryCallback(); 310b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 311b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 312b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Overridden method, different functionality for DS SM 313b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * Send call setup request to framework 314b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * sendRsrcRequest(LOC_GPS_REQUEST_AGPS_DATA_CONN) 315b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * sendRsrcRequest(LOC_GPS_RELEASE_AGPS_DATA_CONN) */ 316b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int requestOrReleaseDataConn(bool request); 317b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 318b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Overridden method, different functionality for DS SM */ 319b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void notifyEventToSubscriber( 320b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsEvent event, AgpsSubscriber* subscriber, 321b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel bool deleteSubscriberPostNotify); 322b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 323b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 324b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* LOC AGPS MANAGER */ 325b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelclass AgpsManager { 326b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 327b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel friend class AgpsStateMachine; 328b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel friend class DSStateMachine; 329b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 330b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelpublic: 331b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* CONSTRUCTOR */ 332b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsManager(): 333b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mFrameworkStatusV4Cb(NULL), 334b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAtlOpenStatusCb(), mAtlCloseStatusCb(), 335b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientInitFn(), mDSClientOpenAndStartDataCallFn(), 336b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientStopDataCallFn(), mDSClientCloseDataCallFn(), mDSClientReleaseFn(), 337b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mSendMsgToAdapterQueueFn(), 338b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAgnssNif(NULL), mInternetNif(NULL), mDsNif(NULL) {} 339b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 340b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Register callbacks */ 341b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void registerCallbacks( 342b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsFrameworkInterface::AgnssStatusIpV4Cb 343b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel frameworkStatusV4Cb, 344b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 345b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsAtlOpenStatusCb atlOpenStatusCb, 346b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsAtlCloseStatusCb atlCloseStatusCb, 347b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 348b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientInitFn dsClientInitFn, 349b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientOpenAndStartDataCallFn dsClientOpenAndStartDataCallFn, 350b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientStopDataCallFn dsClientStopDataCallFn, 351b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientCloseDataCallFn dsClientCloseDataCallFn, 352b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientReleaseFn dsClientReleaseFn, 353b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 354b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel SendMsgToAdapterMsgQueueFn sendMsgToAdapterQueueFn ){ 355b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 356b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mFrameworkStatusV4Cb = frameworkStatusV4Cb; 357b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 358b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAtlOpenStatusCb = atlOpenStatusCb; 359b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAtlCloseStatusCb = atlCloseStatusCb; 360b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 361b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientInitFn = dsClientInitFn; 362b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientOpenAndStartDataCallFn = dsClientOpenAndStartDataCallFn; 363b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientStopDataCallFn = dsClientStopDataCallFn; 364b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientCloseDataCallFn = dsClientCloseDataCallFn; 365b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mDSClientReleaseFn = dsClientReleaseFn; 366b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 367b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mSendMsgToAdapterQueueFn = sendMsgToAdapterQueueFn; 368b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 369b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 370b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Create all AGPS state machines */ 371b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void createAgpsStateMachines(); 372b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 373b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Process incoming ATL requests */ 374b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void requestATL(int connHandle, AGpsExtType agpsType); 375b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void releaseATL(int connHandle); 376b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 377b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Process incoming DS Client data call events */ 378b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportDataCallOpened(); 379b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportDataCallClosed(); 380b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 381b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Process incoming framework data call events */ 382b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportAtlOpenSuccess( 383b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType agpsType, char* apnName, int apnLen, 384b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocApnIpType ipType); 385b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportAtlOpenFailed(AGpsExtType agpsType); 386b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void reportAtlClosed(AGpsExtType agpsType); 387b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 388b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Handle Modem SSR */ 389b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel void handleModemSSR(); 390b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 391b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprotected: 392b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsFrameworkInterface::AgnssStatusIpV4Cb mFrameworkStatusV4Cb; 393b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 394b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsAtlOpenStatusCb mAtlOpenStatusCb; 395b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsAtlCloseStatusCb mAtlCloseStatusCb; 396b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 397b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientInitFn mDSClientInitFn; 398b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientOpenAndStartDataCallFn mDSClientOpenAndStartDataCallFn; 399b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientStopDataCallFn mDSClientStopDataCallFn; 400b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientCloseDataCallFn mDSClientCloseDataCallFn; 401b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsDSClientReleaseFn mDSClientReleaseFn; 402b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 403b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel SendMsgToAdapterMsgQueueFn mSendMsgToAdapterQueueFn; 404b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 405b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine* mAgnssNif; 406b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine* mInternetNif; 407b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine* mDsNif; 408b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 409b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelprivate: 410b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel /* Fetch state machine for handling request ATL call */ 411b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsStateMachine* getAgpsStateMachine(AGpsExtType agpsType); 412b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 413b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 414b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel/* Request SUPL/INTERNET/SUPL_ES ATL 415b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * This LocMsg is defined in this header since it has to be used from more 416b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * than one place, other Agps LocMsg are restricted to GnssAdapter and 417b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel * declared inline */ 418b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelstruct AgpsMsgRequestATL: public LocMsg { 419b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 420b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AgpsManager* mAgpsManager; 421b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel int mConnHandle; 422b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType mAgpsType; 423b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 424b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline AgpsMsgRequestATL(AgpsManager* agpsManager, int connHandle, 425b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel AGpsExtType agpsType) : 426b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LocMsg(), mAgpsManager(agpsManager), mConnHandle(connHandle), mAgpsType( 427b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel agpsType) { 428b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 429b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_LOGV("AgpsMsgRequestATL"); 430b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 431b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 432b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel inline virtual void proc() const { 433b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 434b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel LOC_LOGV("AgpsMsgRequestATL::proc()"); 435b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel mAgpsManager->requestATL(mConnHandle, mAgpsType); 436b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel } 437b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel}; 438b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 439b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudelnamespace AgpsUtils { 440b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 441b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry StrudelAGpsBearerType ipTypeToBearerType(LocApnIpType ipType); 442b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry StrudelLocApnIpType bearerTypeToIpType(AGpsBearerType bearerType); 443b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 444b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel} 445b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel 446b4dcb0e3da7f3f737289d237b53b6b5e904b5284Thierry Strudel#endif /* AGPS_H */ 447