|
1 /* |
|
2 * Copyright (c) 2006-2008 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: Battery state monitoring class methods implementation |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 // ==================== INCLUDE FILES ==================== |
|
20 #include "cpeparsermanufacturerhandler.h" |
|
21 #include "mpephonemodelinternal.h" |
|
22 #include <mpecallhandling.h> |
|
23 #include <mpedatastore.h> |
|
24 #include <sysutil.h> |
|
25 #include <talogger.h> |
|
26 |
|
27 |
|
28 // CONSTANTS |
|
29 const TInt KPESwVersionLineCount = 3; |
|
30 const TInt KPEVersionLineFeed = '\n'; |
|
31 const TInt KPESalesModelNameMaxLength = 20; |
|
32 _LIT( KPESalesModelFileName, "Z:\\resource\\versions\\model.txt"); |
|
33 |
|
34 // ================= MEMBER FUNCTIONS ======================= |
|
35 |
|
36 // C++ default constructor can NOT contain any code, that |
|
37 // might leave. |
|
38 // |
|
39 CPEParserManufacturerHandler::CPEParserManufacturerHandler( |
|
40 MPEPhoneModelInternal& aModel, |
|
41 MPECallHandling& aCallHandling, |
|
42 RFs& aFsSession ) |
|
43 : iModel( aModel ), |
|
44 iCallHandling( aCallHandling ), |
|
45 iFsSession( aFsSession ) |
|
46 { |
|
47 TEFLOGSTRING( KTAOBJECT, "PE CPEParserManufacturerHandler::CPEParserManufacturerHandler()" ); |
|
48 } |
|
49 |
|
50 // Destructor |
|
51 CPEParserManufacturerHandler::~CPEParserManufacturerHandler() |
|
52 { |
|
53 TEFLOGSTRING( KTAOBJECT, "PE CPEParserManufacturerHandler::~CPEParserManufacturerHandler()" ); |
|
54 } |
|
55 |
|
56 // ----------------------------------------------------------------------------- |
|
57 // CPhoneManufacturerHandler::ProcessCommandL |
|
58 // ----------------------------------------------------------------------------- |
|
59 // |
|
60 void CPEParserManufacturerHandler::ProcessCommandL( |
|
61 TUint aCommand ) // aCommand command enumeration. |
|
62 { |
|
63 TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::ProcessCommandL" ); |
|
64 |
|
65 switch ( aCommand ) |
|
66 { |
|
67 case EShowVersion: // *#0000# |
|
68 { |
|
69 TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::ProcessCommandL, EShowVersion" ); |
|
70 |
|
71 TPEPhoneIdentityParameters phoneIdentity; |
|
72 phoneIdentity = iModel.DataStore()->PhoneIdentityParameters(); |
|
73 if ( GetSwVersionAndPhoneModelL( phoneIdentity.iRevision ) == KErrNone ) |
|
74 { |
|
75 iModel.DataStore()->SetPhoneIdentityParameters( phoneIdentity ); |
|
76 iModel.SendMessage( MEngineMonitor::EPEMessageShowVersion ); |
|
77 } |
|
78 else |
|
79 { |
|
80 iModel.SendMessage( MEngineMonitor::EPEMessageError ); |
|
81 TEFLOGSTRING( KTAERROR, |
|
82 "PE CPEGSMPARSERMANUFACTURERHANDLER::PROCESSCOMMANDL: FAILED TO RETRIEVE SW VERSION" ); |
|
83 } |
|
84 break; |
|
85 } |
|
86 case EBadPinChange: |
|
87 { |
|
88 iModel.SendMessage( MEngineMonitor::EPEMessageBadPin1Change ); |
|
89 break; |
|
90 } |
|
91 case EBadPin2Change: |
|
92 { |
|
93 iModel.SendMessage( MEngineMonitor::EPEMessageBadPin2Change ); |
|
94 break; |
|
95 } |
|
96 case EBadPinUnblock: |
|
97 { |
|
98 iModel.SendMessage( MEngineMonitor::EPEMessageBadPin1Unblock ); |
|
99 break; |
|
100 } |
|
101 case EBadPin2Unblock: |
|
102 { |
|
103 iModel.SendMessage( MEngineMonitor::EPEMessageBadPin2Unblock ); |
|
104 break; |
|
105 } |
|
106 case EActivateRfsNormal: |
|
107 { |
|
108 iModel.SendMessage( MEngineMonitor::EPEMessageActivateRfsNormal ); |
|
109 break; |
|
110 } |
|
111 case EActivateRfsDeep: |
|
112 { |
|
113 iModel.SendMessage( MEngineMonitor::EPEMessageActivateRfsDeep ); |
|
114 break; |
|
115 } |
|
116 case EActivateWarranty: |
|
117 //lint -fallthrough |
|
118 case ELifeTimer: |
|
119 { |
|
120 iModel.SendMessage( MEngineMonitor::EPEMessageActivateWarrantyMode ); |
|
121 break; |
|
122 } |
|
123 case EShowBtAddress: // *#2820# |
|
124 { |
|
125 iModel.SendMessage( MEngineMonitor::EPEMessageShowBTDeviceAddress ); |
|
126 break; |
|
127 } |
|
128 case EBTLoopback: // *#9990# |
|
129 { |
|
130 iModel.SendMessage( MEngineMonitor::EPEMessageShowBTLoopback ); |
|
131 break; |
|
132 } |
|
133 case EShowWlanMac: // *#62209526# |
|
134 { |
|
135 iModel.SendMessage( MEngineMonitor::EPEMessageShowWlanMacAddress ); |
|
136 break; |
|
137 } |
|
138 case EBTDebugMode: // *#2873# |
|
139 { |
|
140 iModel.SendMessage( MEngineMonitor::EPEMessageBTDebugMode ); |
|
141 break; |
|
142 } |
|
143 default: |
|
144 { |
|
145 TEFLOGSTRING( KTAERROR, "PE CPEGSMPARSERMANUFACTURERHANDLER::PROCESSCOMMANDL: UNEXPECTED COMMAND" ); |
|
146 break; |
|
147 } |
|
148 } |
|
149 } |
|
150 |
|
151 // ----------------------------------------------------------------------------- |
|
152 // CPEParserManufacturerHandler::ProcessDebugL |
|
153 // ----------------------------------------------------------------------------- |
|
154 // |
|
155 void CPEParserManufacturerHandler::ProcessDebugL( |
|
156 const TDesC& aCode |
|
157 ) |
|
158 { |
|
159 TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::ProcessDebugL" ); |
|
160 |
|
161 if ( aCode.Length() ) |
|
162 { |
|
163 TInt cmd = KErrNotFound; |
|
164 TLex( aCode.Left( 1 ) ).Val( cmd ); // first character. |
|
165 |
|
166 TInt param = KErrNotFound; |
|
167 TLex( aCode.Mid( 1 ) ).Val( param ); // rest |
|
168 |
|
169 switch ( cmd ) |
|
170 { |
|
171 case EPhoneCmdDebugPrint: |
|
172 { |
|
173 //Copied from S60 Telephony. To be migrated to CoTe |
|
174 TEFLOGSTRING( KTAERROR, "PE CPEGSMPARSERMANUFACTURERHANDLER::PROCESSDEBUGL EPHONECMDDEBUGPRINT" ); |
|
175 } |
|
176 break; |
|
177 |
|
178 case EPhoneCmdHeapFailure: |
|
179 { |
|
180 #ifdef PHONE_HEAP_FAILURE_SUPPORT |
|
181 if ( param <= 0 ) |
|
182 { |
|
183 // Reset alloc failure |
|
184 User::__DbgSetAllocFail( |
|
185 RHeap::EUser, |
|
186 RHeap::ENone, |
|
187 1 ); |
|
188 } |
|
189 else |
|
190 { |
|
191 // Set heap failure |
|
192 User::__DbgSetAllocFail( |
|
193 RHeap::EUser, |
|
194 RHeap::ERandom, |
|
195 param ); |
|
196 } |
|
197 #endif // PHONE_HEAP_FAILURE_SUPPORT |
|
198 } |
|
199 break; |
|
200 |
|
201 default: |
|
202 break; |
|
203 } |
|
204 } |
|
205 } |
|
206 |
|
207 // ----------------------------------------------------------------------------- |
|
208 // CPEParserManufacturerHandler::GetSwVersionAndPhoneModelL |
|
209 // Gets sw version from SysUtil::GetSwVersion and loads phone model information |
|
210 // from file. This information is set to aSwVersion. |
|
211 // ----------------------------------------------------------------------------- |
|
212 // |
|
213 TInt CPEParserManufacturerHandler::GetSwVersionAndPhoneModelL( |
|
214 TDes& aSwVersion ) |
|
215 { |
|
216 TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::GetSwVersionAndPhoneModelL" ); |
|
217 |
|
218 TInt errorCode = SysUtil::GetSWVersion( aSwVersion ) ; |
|
219 |
|
220 TEFLOGSTRING2( KTAINT, |
|
221 "PE CPEParserManufacturerHandler::GetSwVersionAndPhoneModelL > SysUtil::GetSWVersion, error code: %d", |
|
222 errorCode ); |
|
223 |
|
224 if ( errorCode == KErrNone ) |
|
225 { |
|
226 // Remove needless lines |
|
227 RemoveLinesAfterThreeLines( aSwVersion ); |
|
228 // Add phone model |
|
229 AppendPhoneModelL( aSwVersion ); |
|
230 } |
|
231 |
|
232 return errorCode; |
|
233 } |
|
234 |
|
235 // ----------------------------------------------------------------------------- |
|
236 // CPEParserManufacturerHandler::RemoveNeedlessLinesL |
|
237 // Removes lines after 3 end-of-line (\n) chars. |
|
238 // ----------------------------------------------------------------------------- |
|
239 // |
|
240 void CPEParserManufacturerHandler::RemoveLinesAfterThreeLines( |
|
241 TDes& aSwVersion ) |
|
242 { |
|
243 TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::RemoveLinesAfterThreeLines" ); |
|
244 |
|
245 TInt lineFeedCount = 0; |
|
246 |
|
247 const TInt swVersionLength( aSwVersion.Length() ); |
|
248 for( TInt i = 0; i < swVersionLength ; i++ ) |
|
249 { |
|
250 if( aSwVersion[i] == KPEVersionLineFeed ) |
|
251 { |
|
252 lineFeedCount++; |
|
253 if( lineFeedCount == KPESwVersionLineCount ) |
|
254 { |
|
255 const TInt charsToDelete( aSwVersion.Length() - i ); |
|
256 |
|
257 // Dont delete the last line feed characted, thats why |
|
258 // i + 1. |
|
259 aSwVersion.Delete( i + 1, charsToDelete ); |
|
260 return; |
|
261 } |
|
262 } |
|
263 } |
|
264 } |
|
265 |
|
266 // ----------------------------------------------------------------------------- |
|
267 // CPEParserManufacturerHandler::AppendPhoneModelL |
|
268 // Reads phone model info from disk and appends it to aSwVersion. |
|
269 // ----------------------------------------------------------------------------- |
|
270 // |
|
271 void CPEParserManufacturerHandler::AppendPhoneModelL( |
|
272 TDes& aSwVersion ) |
|
273 { |
|
274 RFile file; |
|
275 User::LeaveIfError( file.Open( iFsSession, |
|
276 KPESalesModelFileName, |
|
277 EFileShareReadersOnly | EFileRead ) ); |
|
278 CleanupClosePushL( file ); |
|
279 |
|
280 HBufC* model = HBufC::NewLC( KPESalesModelNameMaxLength ); |
|
281 TPtr ptr = model->Des(); |
|
282 |
|
283 // Read the data from file. |
|
284 TFileText reader; |
|
285 reader.Set( file ); |
|
286 User::LeaveIfError( reader.Read( ptr ) ); |
|
287 |
|
288 // Append the phone model to aSwVersion |
|
289 aSwVersion.Append( *model ); |
|
290 |
|
291 CleanupStack::PopAndDestroy( 2 ); // model, file |
|
292 } |
|
293 |
|
294 // End of File |