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