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