phoneengine/phonemodel/src/cpeparsermanufacturerhandler.cpp
changeset 37 ba76fc04e6c2
child 45 6b911d05207e
equal deleted inserted replaced
36:2eacb6118286 37:ba76fc04e6c2
       
     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