|
1 /* |
|
2 * Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: This module contains the implementation of CNWNetworkModeMonitor class |
|
15 * member functions. |
|
16 * |
|
17 */ |
|
18 |
|
19 |
|
20 // INCLUDE FILES |
|
21 #include "CNWMessageHandler.h" |
|
22 #include "CNWNetworkModeMonitor.h" |
|
23 #include "NWHandlingEngine.h" |
|
24 #include "NWPanic.pan" |
|
25 #include "NWLogger.h" |
|
26 |
|
27 |
|
28 |
|
29 // ================= MEMBER FUNCTIONS ========================================= |
|
30 |
|
31 // ---------------------------------------------------------------------------- |
|
32 // CNWNetworkModeMonitor::CNWNetworkModeMonitor |
|
33 // C++ default constructor can NOT contain any code, that |
|
34 // might leave. |
|
35 // ---------------------------------------------------------------------------- |
|
36 // |
|
37 CNWNetworkModeMonitor::CNWNetworkModeMonitor |
|
38 ( |
|
39 CNWMessageHandler& aOwner, // ref. to class owner |
|
40 RMobilePhone& aPhone, // ref. to mobile phone |
|
41 TNWInfo& aNetworkInfo, // ref. to network info struct |
|
42 RMmCustomAPI& aCustomAPI ) //ref. to customAPI |
|
43 : CNWNetworkMonitorBase( aOwner, |
|
44 aPhone, |
|
45 aNetworkInfo, |
|
46 aCustomAPI ) |
|
47 { |
|
48 NWLOGSTRING( KNWOBJECT, |
|
49 "NW: CNWNetworkModeMonitor::CNWNetworkModeMonitor() Begin." ); |
|
50 |
|
51 CActiveScheduler::Add( this ); |
|
52 |
|
53 NWLOGSTRING( KNWOBJECT, |
|
54 "NW: CNWNetworkModeMonitor::CNWNetworkModeMonitor() End" ); |
|
55 } |
|
56 |
|
57 // ---------------------------------------------------------------------------- |
|
58 // CNWNetworkModeMonitor::ConstructL |
|
59 // Symbian 2nd phase constructor can leave. |
|
60 // ---------------------------------------------------------------------------- |
|
61 // |
|
62 void CNWNetworkModeMonitor::ConstructL() |
|
63 { |
|
64 NWLOGSTRING( KNWOBJECT, |
|
65 "NW: CNWNetworkModeMonitor::ConstructL() Begin." ); |
|
66 |
|
67 RProperty::TType type( RProperty::EInt ); |
|
68 TSecurityPolicy readPolicy( ECapability_None ); |
|
69 TSecurityPolicy writePolicy( ECapabilityWriteDeviceData ); |
|
70 TInt error = RProperty::Define( KPSUidNetworkInfo, |
|
71 KNWTelephonyNetworkMode, |
|
72 type, |
|
73 readPolicy, |
|
74 writePolicy ); |
|
75 |
|
76 //An error of KErrAlready exists should be ignored, as this only |
|
77 //indicates that some other code int system is also interested in the |
|
78 //value and has created the property. |
|
79 if ( (error != KErrNone) && (error != KErrAlreadyExists) ) |
|
80 { |
|
81 NWLOGSTRING2( KNWOBJECT, |
|
82 "NW: CNWNetworkModeMonitor::CNWNetworkModeMonitor(), error\ |
|
83 code = %d.", error ); |
|
84 User::Leave(error); |
|
85 } |
|
86 |
|
87 NWLOGSTRING( KNWOBJECT, |
|
88 "NW: CNWNetworkModeMonitor::ConstructL() End." ); |
|
89 } |
|
90 |
|
91 // ---------------------------------------------------------------------------- |
|
92 // CNWNetworkModeMonitor::NewL |
|
93 // Two-phased constructor. |
|
94 // ---------------------------------------------------------------------------- |
|
95 // |
|
96 EXPORT_C CNWNetworkModeMonitor* CNWNetworkModeMonitor::NewL( |
|
97 CNWMessageHandler& aOwner, |
|
98 RMobilePhone& aPhone, |
|
99 TNWInfo& aNetworkInfo, |
|
100 RMmCustomAPI& aCustomAPI ) |
|
101 { |
|
102 NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkModeMonitor::NewL() Begin." ); |
|
103 CNWNetworkModeMonitor* self = |
|
104 new( ELeave ) CNWNetworkModeMonitor( aOwner, |
|
105 aPhone, |
|
106 aNetworkInfo, |
|
107 aCustomAPI ); |
|
108 |
|
109 CleanupStack::PushL( self ); |
|
110 self->ConstructL(); |
|
111 CleanupStack::Pop( self ); |
|
112 |
|
113 NWLOGSTRING( KNWOBJECT, "NW: CNWNetworkModeMonitor::NewL() End." ); |
|
114 return self; |
|
115 } |
|
116 |
|
117 // Destructor |
|
118 CNWNetworkModeMonitor::~CNWNetworkModeMonitor() |
|
119 { |
|
120 NWLOGSTRING( KNWOBJECT, |
|
121 "NW: CNWNetworkModeMonitor::~CNWNetworkModeMonitor start." ); |
|
122 |
|
123 Cancel(); |
|
124 |
|
125 NWLOGSTRING( KNWOBJECT, |
|
126 "NW: CNWNetworkModeMonitor::~CNWNetworkModeMonitor complete." ); |
|
127 } |
|
128 |
|
129 // ---------------------------------------------------------------------------- |
|
130 // CNWNetworkModeMonitor::DoCancel |
|
131 // Cancels the pending async. command. |
|
132 // (other items were commented in a header). |
|
133 // ---------------------------------------------------------------------------- |
|
134 // |
|
135 void CNWNetworkModeMonitor::DoCancel() |
|
136 { |
|
137 NWLOGSTRING( KNWREQEND, |
|
138 "NW: CNWNetworkModeMonitor::DoCancel: \ |
|
139 Request RMobilePhone::CancelAsyncRequest(\ |
|
140 EMobilePhoneNotifyModeChange)" ); |
|
141 |
|
142 iPhone.CancelAsyncRequest( EMobilePhoneNotifyModeChange ); |
|
143 |
|
144 NWLOGSTRING( KNWOBJECT, |
|
145 "NW: CNWNetworkModeMonitor::DoCancel() End." ); |
|
146 } |
|
147 |
|
148 // ---------------------------------------------------------------------------- |
|
149 // CNWNetworkModeMonitor::RunL |
|
150 // Receives the completion of the pending async. command, saves possible |
|
151 // values from async. function call and sends notification to CNWSession object. |
|
152 // (other items were commented in a header). |
|
153 // ---------------------------------------------------------------------------- |
|
154 // |
|
155 void CNWNetworkModeMonitor::RunL() |
|
156 { |
|
157 NWLOGSTRING2( KNWREQEND, |
|
158 "CNWNetworkModeMonitor::RunL() Begin, iStatus = %d", iStatus.Int()); |
|
159 |
|
160 if ( iStatus != KErrNone ) |
|
161 { |
|
162 NWLOGSTRING2( KNWERROR, |
|
163 "NW: CNWNetworkModeMonitor::RunL, Unknown error situation, \ |
|
164 iStatus = %d", iStatus.Int() ); |
|
165 iIsInitialised = EFalse; // Ensure we get current net info. |
|
166 } |
|
167 else |
|
168 { |
|
169 UpdateNetworkInfo(); |
|
170 UpdateNetworkMode(); |
|
171 iOwner.SendMessage ( MNWMessageObserver::ENWMessageNetworkModeChange ); |
|
172 iOwner.SendMessage( MNWMessageObserver::ENWMessageNetworkInfoChange ); |
|
173 iIsInitialised = ETrue; |
|
174 } |
|
175 // Check if monitor can be restarted. |
|
176 if ( iStatus != KErrCancel && iStatus != KErrServerTerminated ) |
|
177 { |
|
178 IssueRequest(); |
|
179 } |
|
180 |
|
181 NWLOGSTRING( KNWOBJECT, |
|
182 "NW: CNWNetworkModeMonitor::RunL() End." ); |
|
183 } |
|
184 |
|
185 // ---------------------------------------------------------------------------- |
|
186 // CNWNetworkModeMonitor::UpdateNetworkInfo |
|
187 // Updates MMEtel network mode value to NW value and assigns the value to |
|
188 // the TNWInfo structure. |
|
189 // (other items were commented in a header). |
|
190 // ---------------------------------------------------------------------------- |
|
191 // |
|
192 void CNWNetworkModeMonitor::UpdateNetworkInfo() |
|
193 { |
|
194 NWLOGSTRING2( KNWREQEND, |
|
195 "CNWNetworkModeMonitor::UpdateNetworkInfo() Begin, iNetworkMode = %d", |
|
196 iNetworkMode ); |
|
197 |
|
198 switch ( iNetworkMode ) |
|
199 { |
|
200 case RMobilePhone::ENetworkModeUnknown: |
|
201 { |
|
202 iNWNetworkInfo.iNetworkMode = ENWModeUnknown; |
|
203 break; |
|
204 } |
|
205 case RMobilePhone::ENetworkModeUnregistered: |
|
206 { |
|
207 iNWNetworkInfo.iNetworkMode = ENWModeUnregistered; |
|
208 break; |
|
209 } |
|
210 case RMobilePhone::ENetworkModeGsm: |
|
211 { |
|
212 iNWNetworkInfo.iNetworkMode = ENWModeGsm; |
|
213 break; |
|
214 } |
|
215 case RMobilePhone::ENetworkModeAmps: |
|
216 { |
|
217 iNWNetworkInfo.iNetworkMode = ENWModeAmps; |
|
218 break; |
|
219 } |
|
220 case RMobilePhone::ENetworkModeCdma95: |
|
221 { |
|
222 iNWNetworkInfo.iNetworkMode = ENWModeCdma95; |
|
223 break; |
|
224 } |
|
225 case RMobilePhone::ENetworkModeCdma2000: |
|
226 { |
|
227 iNWNetworkInfo.iNetworkMode = ENWModeCdma2000; |
|
228 break; |
|
229 } |
|
230 case RMobilePhone::ENetworkModeWcdma: |
|
231 { |
|
232 iNWNetworkInfo.iNetworkMode = ENWModeWcdma; |
|
233 break; |
|
234 } |
|
235 case RMobilePhone::ENetworkModeTdcdma: |
|
236 { |
|
237 iNWNetworkInfo.iNetworkMode = ENWModeTdcdma; |
|
238 break; |
|
239 } |
|
240 default: |
|
241 { |
|
242 iNWNetworkInfo.iNetworkMode = ENWModeUnknown; |
|
243 __ASSERT_DEBUG( !iNetworkMode, Panic( ENWPanicInvalidMode ) ); |
|
244 } |
|
245 } |
|
246 |
|
247 NWLOGSTRING( KNWOBJECT, |
|
248 "NW: CNWNetworkModeMonitor::UpdateNetworkInfo() End." ); |
|
249 } |
|
250 |
|
251 // ---------------------------------------------------------------------------- |
|
252 // CNWNetworkModeMonitor::IssueRequest |
|
253 // Executes the async. NotifyModeChange function. |
|
254 // If the network mode monitor is not yet initialised, gets the initial |
|
255 // mode with sync. GetCurrentModen function. Then starts monitoring |
|
256 // the mode changes. |
|
257 // (other items were commented in a header). |
|
258 // ---------------------------------------------------------------------------- |
|
259 void CNWNetworkModeMonitor::IssueRequest() |
|
260 { |
|
261 NWLOGSTRING( KNWOBJECT, |
|
262 "NW: CNWNetworkModeMonitor::IssueRequest() Begin." ); |
|
263 |
|
264 if ( !IsActive() ) |
|
265 { |
|
266 // Start monitoring mode changes. |
|
267 NWLOGSTRING( KNWREQOUT, |
|
268 "NW: CNWNetworkModeMonitor::IssueRequest: Request RMobilePhone::\ |
|
269 NotifyModeChange" ); |
|
270 iPhone.NotifyModeChange( iStatus, iNetworkMode ); |
|
271 SetActive(); |
|
272 |
|
273 // Get initial value for the mode, if not initialised yet. |
|
274 if ( !iIsInitialised ) |
|
275 { |
|
276 iIsInitialised = ETrue; |
|
277 TInt error = iPhone.GetCurrentMode( iNetworkMode ); |
|
278 if ( error ) |
|
279 { |
|
280 NWLOGSTRING2( KNWERROR, |
|
281 "NW: CNWNetworkModeMonitor::IssueRequest > RMobilePhone::\ |
|
282 GetCurrentMode, ErrorCode = %d", error ); |
|
283 return; |
|
284 } |
|
285 else |
|
286 { |
|
287 UpdateNetworkMode(); |
|
288 NWLOGSTRING2( KNWREQEND, "CNWNetworkModeMonitor::IssueRequest(), iNetworkMode = %d", iNetworkMode ); |
|
289 } |
|
290 } |
|
291 } |
|
292 else |
|
293 { |
|
294 NWLOGSTRING( KNWERROR, |
|
295 "NW: CNWNetworkModeMonitor::IssueRequest: Already active" ); |
|
296 } |
|
297 |
|
298 NWLOGSTRING( KNWOBJECT, |
|
299 "NW: CNWNetworkModeMonitor::IssueRequest() End." ); |
|
300 } |
|
301 |
|
302 // ---------------------------------------------------------------------------- |
|
303 // CNWNetworkModeMonitor::UpdateNetworkModeL |
|
304 // Update networkMode PS key |
|
305 // ---------------------------------------------------------------------------- |
|
306 void CNWNetworkModeMonitor::UpdateNetworkMode() |
|
307 { |
|
308 NWLOGSTRING( KNWOBJECT, |
|
309 "NW: CNWNetworkModeMonitor::UpdateNetworkMode() Begin." ); |
|
310 |
|
311 TInt networkMode( ENWNetworkModeUnknown ); |
|
312 |
|
313 switch ( iNetworkMode ) |
|
314 { |
|
315 case RMobilePhone::ENetworkModeUnknown: |
|
316 case RMobilePhone::ENetworkModeUnregistered: |
|
317 { |
|
318 networkMode = ENWNetworkModeUnknown; |
|
319 break; |
|
320 } |
|
321 case RMobilePhone::ENetworkModeGsm: |
|
322 { |
|
323 networkMode = ENWNetworkModeGsm; |
|
324 break; |
|
325 } |
|
326 case RMobilePhone::ENetworkModeAmps: |
|
327 case RMobilePhone::ENetworkModeCdma95: |
|
328 case RMobilePhone::ENetworkModeCdma2000: |
|
329 { |
|
330 networkMode = ENWNetworkModeCdma; |
|
331 break; |
|
332 } |
|
333 case RMobilePhone::ENetworkModeWcdma: |
|
334 case RMobilePhone::ENetworkModeTdcdma: |
|
335 { |
|
336 networkMode = ENWNetworkModeWcdma; |
|
337 break; |
|
338 } |
|
339 default: |
|
340 { |
|
341 networkMode = ENWNetworkModeUnknown; |
|
342 __ASSERT_DEBUG( !iNetworkMode, Panic( ENWPanicInvalidMode ) ); |
|
343 } |
|
344 } |
|
345 |
|
346 TInt err = RProperty::Set( |
|
347 KPSUidNetworkInfo, KNWTelephonyNetworkMode, networkMode ); |
|
348 |
|
349 if ( err != KErrNone ) |
|
350 { |
|
351 NWLOGSTRING2( KNWOBJECT, |
|
352 "NW: CNWNetworkModeMonitor::UpdateNetworkMode(), error code = \ |
|
353 %d.", err ); |
|
354 |
|
355 RProperty::Delete( KPSUidNetworkInfo, KNWTelephonyNetworkMode ); |
|
356 } |
|
357 else |
|
358 { |
|
359 NWLOGSTRING( KNWREQIN, |
|
360 "NW: CNWNetworkModeMonitor::RunL: RProperty::Set() called" ); |
|
361 } |
|
362 |
|
363 NWLOGSTRING( KNWOBJECT, |
|
364 "NW: CNWNetworkModeMonitor::UpdateNetworkMode() End." ); |
|
365 } |
|
366 |
|
367 // ---------------------------------------------------------------------------- |
|
368 // CNWNetworkModeMonitor::RunError |
|
369 // ---------------------------------------------------------------------------- |
|
370 // |
|
371 TInt CNWNetworkModeMonitor::RunError( TInt /*aError*/ ) |
|
372 { |
|
373 NWLOGSTRING( KNWERROR, "NW:CNWNetworkModeMonitor::RunL() Called\ |
|
374 : rproperty::set error" ); |
|
375 |
|
376 return KErrNone; |
|
377 } |
|
378 |
|
379 // End of File |