1 /* Copyright (c) 2009-2013, The Linux Foundation. All rights reserved.
2 *
3 * Redistribution and use in source and binary forms, with or without
4 * modification, are permitted provided that the following conditions are
5 * met:
6 * * Redistributions of source code must retain the above copyright
7 * notice, this list of conditions and the following disclaimer.
8 * * Redistributions in binary form must reproduce the above
9 * copyright notice, this list of conditions and the following
10 * disclaimer in the documentation and/or other materials provided
11 * with the distribution.
12 * * Neither the name of The Linux Foundation, nor the names of its
13 * contributors may be used to endorse or promote products derived
14 * from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
20 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
23 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
24 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
25 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
26 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 */
29
30 #define LOG_NDDEBUG 0
31 #define LOG_TAG "LocSvc_eng"
32
33 #include <loc_eng.h>
34 #include <MsgTask.h>
35 #include "log_util.h"
36 #include "platform_lib_includes.h"
37
38 using namespace loc_core;
39
40 struct LocEngRequestXtraServer : public LocMsg {
41 LocEngAdapter* mAdapter;
LocEngRequestXtraServerLocEngRequestXtraServer42 inline LocEngRequestXtraServer(LocEngAdapter* adapter) :
43 LocMsg(), mAdapter(adapter)
44 {
45 locallog();
46 }
procLocEngRequestXtraServer47 inline virtual void proc() const {
48 mAdapter->requestXtraServer();
49 }
locallogLocEngRequestXtraServer50 inline void locallog() const {
51 LOC_LOGV("LocEngRequestXtraServer");
52 }
logLocEngRequestXtraServer53 inline virtual void log() const {
54 locallog();
55 }
56 };
57
58 struct LocEngInjectXtraData : public LocMsg {
59 LocEngAdapter* mAdapter;
60 char* mData;
61 const int mLen;
LocEngInjectXtraDataLocEngInjectXtraData62 inline LocEngInjectXtraData(LocEngAdapter* adapter,
63 char* data, int len):
64 LocMsg(), mAdapter(adapter),
65 mData(new char[len]), mLen(len)
66 {
67 memcpy((void*)mData, (void*)data, len);
68 locallog();
69 }
~LocEngInjectXtraDataLocEngInjectXtraData70 inline ~LocEngInjectXtraData()
71 {
72 delete[] mData;
73 }
procLocEngInjectXtraData74 inline virtual void proc() const {
75 mAdapter->setXtraData(mData, mLen);
76 }
locallogLocEngInjectXtraData77 inline void locallog() const {
78 LOC_LOGV("length: %d\n data: %p", mLen, mData);
79 }
logLocEngInjectXtraData80 inline virtual void log() const {
81 locallog();
82 }
83 };
84
85 struct LocEngSetXtraVersionCheck : public LocMsg {
86 LocEngAdapter *mAdapter;
87 int mCheck;
LocEngSetXtraVersionCheckLocEngSetXtraVersionCheck88 inline LocEngSetXtraVersionCheck(LocEngAdapter* adapter,
89 int check):
90 mAdapter(adapter), mCheck(check) {}
procLocEngSetXtraVersionCheck91 inline virtual void proc() const {
92 locallog();
93 mAdapter->setXtraVersionCheck(mCheck);
94 }
locallogLocEngSetXtraVersionCheck95 inline void locallog() const {
96 LOC_LOGD("%s:%d]: mCheck: %d",
97 __func__, __LINE__, mCheck);
98 }
logLocEngSetXtraVersionCheck99 inline virtual void log() const {
100 locallog();
101 }
102 };
103
104 /*===========================================================================
105 FUNCTION loc_eng_xtra_init
106
107 DESCRIPTION
108 Initialize XTRA module.
109
110 DEPENDENCIES
111 N/A
112
113 RETURN VALUE
114 0: success
115
116 SIDE EFFECTS
117 N/A
118
119 ===========================================================================*/
loc_eng_xtra_init(loc_eng_data_s_type & loc_eng_data,GpsXtraExtCallbacks * callbacks)120 int loc_eng_xtra_init (loc_eng_data_s_type &loc_eng_data,
121 GpsXtraExtCallbacks* callbacks)
122 {
123 int ret_val = -1;
124 loc_eng_xtra_data_s_type *xtra_module_data_ptr;
125 ENTRY_LOG();
126
127 if(callbacks == NULL) {
128 LOC_LOGE("loc_eng_xtra_init: failed, cb is NULL");
129 } else {
130 xtra_module_data_ptr = &loc_eng_data.xtra_module_data;
131 xtra_module_data_ptr->download_request_cb = callbacks->download_request_cb;
132 xtra_module_data_ptr->report_xtra_server_cb = callbacks->report_xtra_server_cb;
133
134 ret_val = 0;
135 }
136 EXIT_LOG(%d, ret_val);
137 return ret_val;
138 }
139
140 /*===========================================================================
141 FUNCTION loc_eng_xtra_inject_data
142
143 DESCRIPTION
144 Injects XTRA file into the engine but buffers the data if engine is busy.
145
146 DEPENDENCIES
147 N/A
148
149 RETURN VALUE
150 0
151
152 SIDE EFFECTS
153 N/A
154
155 ===========================================================================*/
loc_eng_xtra_inject_data(loc_eng_data_s_type & loc_eng_data,char * data,int length)156 int loc_eng_xtra_inject_data(loc_eng_data_s_type &loc_eng_data,
157 char* data, int length)
158 {
159 ENTRY_LOG();
160 LocEngAdapter* adapter = loc_eng_data.adapter;
161 adapter->sendMsg(new LocEngInjectXtraData(adapter, data, length));
162 EXIT_LOG(%d, 0);
163 return 0;
164 }
165 /*===========================================================================
166 FUNCTION loc_eng_xtra_request_server
167
168 DESCRIPTION
169 Request the Xtra server url from the modem
170
171 DEPENDENCIES
172 N/A
173
174 RETURN VALUE
175 0
176
177 SIDE EFFECTS
178 N/A
179
180 ===========================================================================*/
loc_eng_xtra_request_server(loc_eng_data_s_type & loc_eng_data)181 int loc_eng_xtra_request_server(loc_eng_data_s_type &loc_eng_data)
182 {
183 ENTRY_LOG();
184 LocEngAdapter* adapter = loc_eng_data.adapter;
185 adapter->sendMsg(new LocEngRequestXtraServer(adapter));
186 EXIT_LOG(%d, 0);
187 return 0;
188 }
189 /*===========================================================================
190 FUNCTION loc_eng_xtra_version_check
191
192 DESCRIPTION
193 Injects the enable/disable value for checking XTRA version
194 that is specified in gps.conf
195
196 DEPENDENCIES
197 N/A
198
199 RETURN VALUE
200 none
201
202 SIDE EFFECTS
203 N/A
204
205 ===========================================================================*/
loc_eng_xtra_version_check(loc_eng_data_s_type & loc_eng_data,int check)206 void loc_eng_xtra_version_check(loc_eng_data_s_type &loc_eng_data,
207 int check)
208 {
209 ENTRY_LOG();
210 LocEngAdapter *adapter = loc_eng_data.adapter;
211 adapter->sendMsg(new LocEngSetXtraVersionCheck(adapter, check));
212 EXIT_LOG(%d, 0);
213 }
214