1bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/* Copyright (c) 2009-2013, The Linux Foundation. All rights reserved. 2bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * 3bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * Redistribution and use in source and binary forms, with or without 4bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * modification, are permitted provided that the following conditions are 5bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * met: 6bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * * Redistributions of source code must retain the above copyright 7bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * notice, this list of conditions and the following disclaimer. 8bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * * Redistributions in binary form must reproduce the above 9bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * copyright notice, this list of conditions and the following 10bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * disclaimer in the documentation and/or other materials provided 11bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * with the distribution. 12bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * * Neither the name of The Linux Foundation, nor the names of its 13bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * contributors may be used to endorse or promote products derived 14bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * from this software without specific prior written permission. 15bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * 16bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 17bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 19bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 20bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 23bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 25bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo * 28bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo */ 29bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 30bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#define LOG_NDDEBUG 0 31bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#define LOG_TAG "LocSvc_eng" 32bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 33bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <loc_eng.h> 34bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include <MsgTask.h> 35bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include "log_util.h" 36bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo#include "platform_lib_includes.h" 37bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 38bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russousing namespace loc_core; 39bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 40bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostruct LocEngRequestXtraServer : public LocMsg { 41bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocEngAdapter* mAdapter; 42bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline LocEngRequestXtraServer(LocEngAdapter* adapter) : 43bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocMsg(), mAdapter(adapter) 44bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 45bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo locallog(); 46bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 47bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline virtual void proc() const { 48bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo mAdapter->requestXtraServer(); 49bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 50bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline void locallog() const { 51bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGV("LocEngRequestXtraServer"); 52bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 53bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline virtual void log() const { 54bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo locallog(); 55bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 56bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 57bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 58bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russostruct LocEngInjectXtraData : public LocMsg { 59bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocEngAdapter* mAdapter; 60bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo char* mData; 61bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo const int mLen; 62bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline LocEngInjectXtraData(LocEngAdapter* adapter, 63bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo char* data, int len): 64bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocMsg(), mAdapter(adapter), 65bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo mData(new char[len]), mLen(len) 66bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 67bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo memcpy((void*)mData, (void*)data, len); 68bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo locallog(); 69bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 70bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline ~LocEngInjectXtraData() 71bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo { 72bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo delete[] mData; 73bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 74bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline virtual void proc() const { 75bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo mAdapter->setXtraData(mData, mLen); 76bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 77bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline void locallog() const { 78bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGV("length: %d\n data: %p", mLen, mData); 79bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 80bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo inline virtual void log() const { 81bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo locallog(); 82bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 83bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo}; 84bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 85bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 86bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_eng_xtra_init 87bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 88bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 89bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Initialize XTRA module. 90bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 91bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 92bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 93bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 94bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 95bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 96bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 97bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 98bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 99bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 100bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 101bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data, 102bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo GpsXtraExtCallbacks* callbacks) 103bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 104bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo int ret_val = -1; 105bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo loc_eng_xtra_data_s_type *xtra_module_data_ptr; 106bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 107bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo if(callbacks == NULL) { 108bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LOC_LOGE("loc_eng_xtra_init: failed, cb is NULL"); 109bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } else { 110bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo xtra_module_data_ptr = &loc_eng_data.xtra_module_data; 111bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo xtra_module_data_ptr->download_request_cb = callbacks->download_request_cb; 112bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo xtra_module_data_ptr->report_xtra_server_cb = callbacks->report_xtra_server_cb; 113bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 114bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo ret_val = 0; 115bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo } 116bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return ret_val; 117bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 118bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 119bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 120bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_eng_xtra_inject_data 121bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 122bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 123bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Injects XTRA file into the engine but buffers the data if engine is busy. 124bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 125bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 126bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 127bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 128bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 129bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 0: success 130bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo >0: failure 131bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 132bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 133bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 134bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 135bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 136bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint loc_eng_xtra_inject_data(loc_eng_data_s_type &loc_eng_data, 137bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo char* data, int length) 138bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 139bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocEngAdapter* adapter = loc_eng_data.adapter; 140bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo adapter->sendMsg(new LocEngInjectXtraData(adapter, data, length)); 141bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 142bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return 0; 143bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 144bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo/*=========================================================================== 145bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoFUNCTION loc_eng_xtra_request_server 146bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 147bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDESCRIPTION 148bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo Request the Xtra server url from the modem 149bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 150bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoDEPENDENCIES 151bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 152bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 153bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoRETURN VALUE 154bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo length of server string 155bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 156bfff6343845ad9ff062c5fd97bb3b9be1053340eDante RussoSIDE EFFECTS 157bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo N/A 158bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 159bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo===========================================================================*/ 160bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russoint loc_eng_xtra_request_server(loc_eng_data_s_type &loc_eng_data) 161bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo{ 162bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo LocEngAdapter* adapter = loc_eng_data.adapter; 163bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo adapter->sendMsg(new LocEngRequestXtraServer(adapter)); 164bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 165bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo return 0; 166bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo 167bfff6343845ad9ff062c5fd97bb3b9be1053340eDante Russo} 168