diff -r 000000000000 -r 5f000ab63145 phoneengine/phonemodel/src/cpeparsermanufacturerhandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneengine/phonemodel/src/cpeparsermanufacturerhandler.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,294 @@ +/* +* Copyright (c) 2006-2008 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Battery state monitoring class methods implementation +* +*/ + + +// ==================== INCLUDE FILES ==================== +#include "cpeparsermanufacturerhandler.h" +#include "mpephonemodelinternal.h" +#include +#include +#include +#include + + +// CONSTANTS +const TInt KPESwVersionLineCount = 3; +const TInt KPEVersionLineFeed = '\n'; +const TInt KPESalesModelNameMaxLength = 20; +_LIT( KPESalesModelFileName, "Z:\\resource\\versions\\model.txt"); + +// ================= MEMBER FUNCTIONS ======================= + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CPEParserManufacturerHandler::CPEParserManufacturerHandler( + MPEPhoneModelInternal& aModel, + MPECallHandling& aCallHandling, + RFs& aFsSession ) + : iModel( aModel ), + iCallHandling( aCallHandling ), + iFsSession( aFsSession ) + { + TEFLOGSTRING( KTAOBJECT, "PE CPEParserManufacturerHandler::CPEParserManufacturerHandler()" ); + } + +// Destructor +CPEParserManufacturerHandler::~CPEParserManufacturerHandler() + { + TEFLOGSTRING( KTAOBJECT, "PE CPEParserManufacturerHandler::~CPEParserManufacturerHandler()" ); + } + +// ----------------------------------------------------------------------------- +// CPhoneManufacturerHandler::ProcessCommandL +// ----------------------------------------------------------------------------- +// +void CPEParserManufacturerHandler::ProcessCommandL( + TUint aCommand ) // aCommand command enumeration. + { + TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::ProcessCommandL" ); + + switch ( aCommand ) + { + case EShowVersion: // *#0000# + { + TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::ProcessCommandL, EShowVersion" ); + + TPEPhoneIdentityParameters phoneIdentity; + phoneIdentity = iModel.DataStore()->PhoneIdentityParameters(); + if ( GetSwVersionAndPhoneModelL( phoneIdentity.iRevision ) == KErrNone ) + { + iModel.DataStore()->SetPhoneIdentityParameters( phoneIdentity ); + iModel.SendMessage( MEngineMonitor::EPEMessageShowVersion ); + } + else + { + iModel.SendMessage( MEngineMonitor::EPEMessageError ); + TEFLOGSTRING( KTAERROR, + "PE CPEGSMPARSERMANUFACTURERHANDLER::PROCESSCOMMANDL: FAILED TO RETRIEVE SW VERSION" ); + } + break; + } + case EBadPinChange: + { + iModel.SendMessage( MEngineMonitor::EPEMessageBadPin1Change ); + break; + } + case EBadPin2Change: + { + iModel.SendMessage( MEngineMonitor::EPEMessageBadPin2Change ); + break; + } + case EBadPinUnblock: + { + iModel.SendMessage( MEngineMonitor::EPEMessageBadPin1Unblock ); + break; + } + case EBadPin2Unblock: + { + iModel.SendMessage( MEngineMonitor::EPEMessageBadPin2Unblock ); + break; + } + case EActivateRfsNormal: + { + iModel.SendMessage( MEngineMonitor::EPEMessageActivateRfsNormal ); + break; + } + case EActivateRfsDeep: + { + iModel.SendMessage( MEngineMonitor::EPEMessageActivateRfsDeep ); + break; + } + case EActivateWarranty: + //lint -fallthrough + case ELifeTimer: + { + iModel.SendMessage( MEngineMonitor::EPEMessageActivateWarrantyMode ); + break; + } + case EShowBtAddress: // *#2820# + { + iModel.SendMessage( MEngineMonitor::EPEMessageShowBTDeviceAddress ); + break; + } + case EBTLoopback: // *#9990# + { + iModel.SendMessage( MEngineMonitor::EPEMessageShowBTLoopback ); + break; + } + case EShowWlanMac: // *#62209526# + { + iModel.SendMessage( MEngineMonitor::EPEMessageShowWlanMacAddress ); + break; + } + case EBTDebugMode: // *#2873# + { + iModel.SendMessage( MEngineMonitor::EPEMessageBTDebugMode ); + break; + } + default: + { + TEFLOGSTRING( KTAERROR, "PE CPEGSMPARSERMANUFACTURERHANDLER::PROCESSCOMMANDL: UNEXPECTED COMMAND" ); + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CPEParserManufacturerHandler::ProcessDebugL +// ----------------------------------------------------------------------------- +// +void CPEParserManufacturerHandler::ProcessDebugL( + const TDesC& aCode + ) + { + TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::ProcessDebugL" ); + + if ( aCode.Length() ) + { + TInt cmd = KErrNotFound; + TLex( aCode.Left( 1 ) ).Val( cmd ); // first character. + + TInt param = KErrNotFound; + TLex( aCode.Mid( 1 ) ).Val( param ); // rest + + switch ( cmd ) + { + case EPhoneCmdDebugPrint: + { + //Copied from S60 Telephony. To be migrated to CoTe + TEFLOGSTRING( KTAERROR, "PE CPEGSMPARSERMANUFACTURERHANDLER::PROCESSDEBUGL EPHONECMDDEBUGPRINT" ); + } + break; + + case EPhoneCmdHeapFailure: + { +#ifdef PHONE_HEAP_FAILURE_SUPPORT + if ( param <= 0 ) + { + // Reset alloc failure + User::__DbgSetAllocFail( + RHeap::EUser, + RHeap::ENone, + 1 ); + } + else + { + // Set heap failure + User::__DbgSetAllocFail( + RHeap::EUser, + RHeap::ERandom, + param ); + } +#endif // PHONE_HEAP_FAILURE_SUPPORT + } + break; + + default: + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CPEParserManufacturerHandler::GetSwVersionAndPhoneModelL +// Gets sw version from SysUtil::GetSwVersion and loads phone model information +// from file. This information is set to aSwVersion. +// ----------------------------------------------------------------------------- +// +TInt CPEParserManufacturerHandler::GetSwVersionAndPhoneModelL( + TDes& aSwVersion ) + { + TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::GetSwVersionAndPhoneModelL" ); + + TInt errorCode = SysUtil::GetSWVersion( aSwVersion ) ; + + TEFLOGSTRING2( KTAINT, + "PE CPEParserManufacturerHandler::GetSwVersionAndPhoneModelL > SysUtil::GetSWVersion, error code: %d", + errorCode ); + + if ( errorCode == KErrNone ) + { + // Remove needless lines + RemoveLinesAfterThreeLines( aSwVersion ); + // Add phone model + AppendPhoneModelL( aSwVersion ); + } + + return errorCode; + } + +// ----------------------------------------------------------------------------- +// CPEParserManufacturerHandler::RemoveNeedlessLinesL +// Removes lines after 3 end-of-line (\n) chars. +// ----------------------------------------------------------------------------- +// +void CPEParserManufacturerHandler::RemoveLinesAfterThreeLines( + TDes& aSwVersion ) + { + TEFLOGSTRING( KTAINT, "PE CPEParserManufacturerHandler::RemoveLinesAfterThreeLines" ); + + TInt lineFeedCount = 0; + + const TInt swVersionLength( aSwVersion.Length() ); + for( TInt i = 0; i < swVersionLength ; i++ ) + { + if( aSwVersion[i] == KPEVersionLineFeed ) + { + lineFeedCount++; + if( lineFeedCount == KPESwVersionLineCount ) + { + const TInt charsToDelete( aSwVersion.Length() - i ); + + // Dont delete the last line feed characted, thats why + // i + 1. + aSwVersion.Delete( i + 1, charsToDelete ); + return; + } + } + } + } + +// ----------------------------------------------------------------------------- +// CPEParserManufacturerHandler::AppendPhoneModelL +// Reads phone model info from disk and appends it to aSwVersion. +// ----------------------------------------------------------------------------- +// +void CPEParserManufacturerHandler::AppendPhoneModelL( + TDes& aSwVersion ) + { + RFile file; + User::LeaveIfError( file.Open( iFsSession, + KPESalesModelFileName, + EFileShareReadersOnly | EFileRead ) ); + CleanupClosePushL( file ); + + HBufC* model = HBufC::NewLC( KPESalesModelNameMaxLength ); + TPtr ptr = model->Des(); + + // Read the data from file. + TFileText reader; + reader.Set( file ); + User::LeaveIfError( reader.Read( ptr ) ); + + // Append the phone model to aSwVersion + aSwVersion.Append( *model ); + + CleanupStack::PopAndDestroy( 2 ); // model, file + } + +// End of File