testexecfw/stf/stffw/testinterference/src/StifTestInterference.cpp
changeset 2 8bb370ba6d1d
equal deleted inserted replaced
1:bbd31066657e 2:8bb370ba6d1d
       
     1 /*
       
     2 * Copyright (c) 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 
       
    15 * MSTIFTestInterference class member functions.
       
    16 *
       
    17 */
       
    18 
       
    19 // INCLUDE FILES
       
    20 #include <StifTestInterference.h>
       
    21 #include "TestInterferenceImplementation.h"
       
    22 
       
    23 // EXTERNAL DATA STRUCTURES
       
    24 //extern  ?external_data;
       
    25 
       
    26 // EXTERNAL FUNCTION PROTOTYPES  
       
    27 //extern ?external_function( ?arg_type,?arg_type );
       
    28 
       
    29 // CONSTANTS
       
    30 //const ?type ?constant_var = ?constant;
       
    31 
       
    32 // For test interference thread's heap size
       
    33 const TUint KMaxHeapSize        = 0x20000; // 128 K
       
    34 
       
    35 // MACROS
       
    36 //#define ?macro ?macro_def
       
    37 
       
    38 // LOCAL CONSTANTS AND MACROS
       
    39 //const ?type ?constant_var = ?constant;
       
    40 //#define ?macro_name ?macro_def
       
    41 
       
    42 // MODULE DATA STRUCTURES
       
    43 //enum ?declaration
       
    44 //typedef ?declaration
       
    45 
       
    46 // LOCAL FUNCTION PROTOTYPES
       
    47 //?type ?function_name( ?arg_type, ?arg_type );
       
    48 
       
    49 // FORWARD DECLARATIONS
       
    50 //class ?FORWARD_CLASSNAME;
       
    51 
       
    52 // ============================= LOCAL FUNCTIONS ===============================
       
    53 
       
    54 // -----------------------------------------------------------------------------
       
    55 // ?function_name ?description.
       
    56 // ?description
       
    57 // Returns: ?value_1: ?description
       
    58 //          ?value_n: ?description_line1
       
    59 //                    ?description_line2
       
    60 // -----------------------------------------------------------------------------
       
    61 //
       
    62 /*
       
    63 ?type ?function_name(
       
    64     ?arg_type arg,  // ?description
       
    65     ?arg_type arg)  // ?description
       
    66     {
       
    67 
       
    68     ?code  // ?comment
       
    69 
       
    70     // ?comment
       
    71     ?code
       
    72     }
       
    73 */
       
    74 
       
    75 // ============================ MEMBER FUNCTIONS ===============================
       
    76 
       
    77 /*
       
    78 -------------------------------------------------------------------------------
       
    79 
       
    80     Class: MSTIFTestInterference
       
    81 
       
    82     Method: MSTIFTestInterference
       
    83 
       
    84     Description: Create test interference object according to the paramater.
       
    85 
       
    86     Parameters: CTestModuleBase* aTestModuleBase: inout: CTestModuleBase object
       
    87                 for get test interference handle to STIF's side(Used if test
       
    88                 case panic so test interference thread can be kill by STIF).
       
    89                 TStifTestInterferenceCategory aCategory: in: Test interference
       
    90                 category
       
    91 
       
    92     Return Values: MSTIFTestInterference*: pointer to MSTIFTestInterference 
       
    93                    object
       
    94 
       
    95     Errors/Exceptions: Leaves if object creation fails.
       
    96 
       
    97     Status: Approved
       
    98 
       
    99 -------------------------------------------------------------------------------
       
   100 */
       
   101 EXPORT_C MSTIFTestInterference* MSTIFTestInterference::NewL(
       
   102                                     CTestModuleBase* aTestModuleBase,
       
   103                                     TStifTestInterferenceCategory aCategory )
       
   104     {
       
   105     if( aCategory == EActiveObject )        // Active object
       
   106         {
       
   107         CSTIFInterferenceAO* self = NULL;
       
   108         self = CSTIFInterferenceAO::NewL();
       
   109         return (MSTIFTestInterference*)self;
       
   110         }
       
   111     else                                    // EThread
       
   112         {
       
   113         CSTIFInterferenceThread* self = NULL;
       
   114         self = CSTIFInterferenceThread::NewL( aTestModuleBase );
       
   115         return (MSTIFTestInterference*)self;
       
   116         }
       
   117 
       
   118     }
       
   119 
       
   120 /*
       
   121 -------------------------------------------------------------------------------
       
   122 
       
   123     Class: MSTIFTestInterference
       
   124 
       
   125     Method: MSTIFTestInterference
       
   126 
       
   127     Description: Destructor
       
   128 
       
   129     Parameters: None
       
   130 
       
   131     Return Values: None
       
   132 
       
   133     Errors/Exceptions: None
       
   134 
       
   135     Status: Approved
       
   136 
       
   137 -------------------------------------------------------------------------------
       
   138 */
       
   139 MSTIFTestInterference::~MSTIFTestInterference()
       
   140     {
       
   141     // None
       
   142 
       
   143     }
       
   144 
       
   145 /*
       
   146 -------------------------------------------------------------------------------
       
   147 
       
   148     DESCRIPTION
       
   149 
       
   150     This module contains the implementation of CSTIFInterferenceAO class 
       
   151     member functions.
       
   152 
       
   153 -------------------------------------------------------------------------------
       
   154 */
       
   155 
       
   156 // ============================ MEMBER FUNCTIONS ===============================
       
   157 
       
   158 /*
       
   159 -------------------------------------------------------------------------------
       
   160 
       
   161     Class: CSTIFInterferenceAO
       
   162 
       
   163     Method: CSTIFInterferenceAO
       
   164 
       
   165     Description: C++ default constructor can NOT contain any code, that
       
   166                  might leave 
       
   167 
       
   168     Parameters: None
       
   169 
       
   170     Return Values: None
       
   171 
       
   172     Errors/Exceptions: None
       
   173 
       
   174     Status: Approved
       
   175 
       
   176 -------------------------------------------------------------------------------
       
   177 */
       
   178 CSTIFInterferenceAO::CSTIFInterferenceAO() :
       
   179                                     CActive ( CActive::EPriorityStandard )
       
   180     {
       
   181     iInterferenceType = ENone;
       
   182     iIdleTime = 0;
       
   183     iActiveTime = 0;
       
   184     iExecuteInterference = NULL;
       
   185 
       
   186     }
       
   187 
       
   188 /*
       
   189 -------------------------------------------------------------------------------
       
   190 
       
   191     Class: CSTIFInterferenceAO
       
   192 
       
   193     Method: ConstructL
       
   194 
       
   195     Description: Symbian 2nd phase constructor can leave.
       
   196 
       
   197     Parameters: None
       
   198 
       
   199     Return Values: None
       
   200 
       
   201     Errors/Exceptions: Leave if CreateLocal fails
       
   202 
       
   203     Status: Approved
       
   204 
       
   205 -------------------------------------------------------------------------------
       
   206 */
       
   207 void CSTIFInterferenceAO::ConstructL()
       
   208     {
       
   209     CActiveScheduler::Add ( this );
       
   210 
       
   211     User::LeaveIfError( iAOIdleTimer.CreateLocal() );
       
   212 
       
   213     iExecuteInterference = CExecuteInterference::NewL();
       
   214 
       
   215     }
       
   216 
       
   217 /*
       
   218 -------------------------------------------------------------------------------
       
   219 
       
   220     Class: CSTIFInterferenceAO
       
   221 
       
   222     Method: NewL
       
   223 
       
   224     Description: Two-phased constructor.
       
   225 
       
   226     Parameters: None
       
   227 
       
   228     Return Values: CSTIFInterferenceAO*: pointer to CSTIFInterferenceAO object
       
   229 
       
   230     Errors/Exceptions: Leaves if object creation fails.
       
   231 
       
   232     Status: Approved
       
   233 
       
   234 -------------------------------------------------------------------------------
       
   235 */
       
   236 CSTIFInterferenceAO* CSTIFInterferenceAO::NewL()
       
   237     {
       
   238     CSTIFInterferenceAO* self = new (ELeave) CSTIFInterferenceAO();
       
   239 
       
   240     CleanupStack::PushL( self );
       
   241     self->ConstructL();
       
   242     CleanupStack::Pop();
       
   243 
       
   244     return self;
       
   245 
       
   246     }
       
   247 
       
   248 /*
       
   249 -------------------------------------------------------------------------------
       
   250 
       
   251     Class: CSTIFInterferenceAO
       
   252 
       
   253     Method: ~CSTIFInterferenceAO
       
   254 
       
   255     Description: Destructor.
       
   256 
       
   257     Parameters: None
       
   258 
       
   259     Return Values: None
       
   260 
       
   261     Errors/Exceptions: None
       
   262 
       
   263     Status: Approved
       
   264 
       
   265 -------------------------------------------------------------------------------
       
   266 */
       
   267 CSTIFInterferenceAO::~CSTIFInterferenceAO()
       
   268     {
       
   269     Cancel(); // Cancel itself
       
   270     // If test case panic etc. do close operations here.
       
   271     delete iExecuteInterference;
       
   272     iExecuteInterference = NULL;
       
   273 
       
   274     iAOIdleTimer.Close();
       
   275 
       
   276     }
       
   277 
       
   278 /*
       
   279 -------------------------------------------------------------------------------
       
   280 
       
   281     Class: CSTIFInterferenceAO
       
   282 
       
   283     Method: RunL
       
   284 
       
   285     Description: Derived from CActive, handles test interference execution.
       
   286 
       
   287     Parameters: None
       
   288 
       
   289     Return Values: None
       
   290 
       
   291     Errors/Exceptions: Leaves if InterferenceL leaves.
       
   292 
       
   293     Status: Approved
       
   294 
       
   295 -------------------------------------------------------------------------------
       
   296 */
       
   297 void CSTIFInterferenceAO::RunL( )
       
   298     {
       
   299     iExecuteInterference->InterferenceL( iInterferenceType, iActiveTime );
       
   300     
       
   301     // Start idle timer
       
   302     iAOIdleTimer.After( iStatus, iIdleTime );
       
   303     SetActive();
       
   304 
       
   305     }
       
   306 
       
   307 /*
       
   308 -------------------------------------------------------------------------------
       
   309 
       
   310     Class: CSTIFInterferenceAO
       
   311 
       
   312     Method: DoCancel
       
   313 
       
   314     Description: Derived from CActive handles the Cancel
       
   315 
       
   316     Parameters: None
       
   317 
       
   318     Return Values: None
       
   319 
       
   320     Errors/Exceptions: None
       
   321 
       
   322     Status: Approved
       
   323 
       
   324 -------------------------------------------------------------------------------
       
   325 */
       
   326 void CSTIFInterferenceAO::DoCancel( )
       
   327     {
       
   328     iAOIdleTimer.Cancel();
       
   329 
       
   330     }
       
   331 
       
   332 /*
       
   333 -------------------------------------------------------------------------------
       
   334 
       
   335     Class: CSTIFInterferenceAO
       
   336 
       
   337     Method: RunError
       
   338 
       
   339     Description: Derived from CActive handles errors from active handler.
       
   340 
       
   341     Parameters: TInt aError: in: error from CActive 
       
   342 
       
   343     Return Values: TInt: Symbian error code
       
   344 
       
   345     Errors/Exceptions: None
       
   346 
       
   347     Status: Approved
       
   348 
       
   349 -------------------------------------------------------------------------------
       
   350 */
       
   351 TInt CSTIFInterferenceAO::RunError( TInt aError )
       
   352     {
       
   353     RDebug::Print( _L( "CSTIFInterferenceAO::RunError() with [%d]" ), aError );
       
   354 
       
   355     return aError;
       
   356 
       
   357     }
       
   358 
       
   359 /*
       
   360 -------------------------------------------------------------------------------
       
   361 
       
   362     Class: CSTIFInterferenceAO
       
   363 
       
   364     Method: StartL
       
   365 
       
   366     Description: StartL method starts test interference.
       
   367 
       
   368     Parameters: TStifTestInterferenceType aType: in: Test interference type.
       
   369                 TInt aIdleTime: in: Test interference idle time.
       
   370                 TInt aActiveTime: in: Test interference active time.
       
   371 
       
   372     Return Values: TInt: Symbian error code.
       
   373 
       
   374     Errors/Exceptions: Leaves if active object is active.
       
   375 
       
   376     Status: Approved
       
   377 
       
   378 -------------------------------------------------------------------------------
       
   379 */
       
   380 TInt CSTIFInterferenceAO::StartL( TStifTestInterferenceType aType,
       
   381                                     TInt aIdleTime,
       
   382                                     TInt aActiveTime )
       
   383     {
       
   384     if( IsActive() )
       
   385         {
       
   386         User::Leave( KErrAlreadyExists );
       
   387         }
       
   388 
       
   389     switch( aType )
       
   390     	{
       
   391     	case ENone:
       
   392     	case ECpuLoad:
       
   393     	case EFileSystemReadC:
       
   394     	case EFileSystemReadD:
       
   395     	case EFileSystemReadE:
       
   396     	case EFileSystemReadZ:
       
   397     	case EFileSystemWriteC:
       
   398     	case EFileSystemWriteD:
       
   399     	case EFileSystemWriteE:
       
   400     	case EFileSystemFillAndEmptyC:
       
   401     	case EFileSystemFillAndEmptyD:
       
   402     	case EFileSystemFillAndEmptyE:
       
   403     		aIdleTime = aIdleTime * 1000;
       
   404     		aActiveTime = aActiveTime * 1000;
       
   405     		break;
       
   406     	case ENoneMicroSeconds:
       
   407     		aType = ENone;
       
   408     		break;
       
   409     	case ECpuLoadMicroSeconds:
       
   410 			aType = ECpuLoad;
       
   411 			break;
       
   412     	case EFileSystemReadCMicroSeconds:
       
   413 			aType = EFileSystemReadC;
       
   414 			break;
       
   415     	case EFileSystemReadDMicroSeconds:
       
   416 			aType = EFileSystemReadD;
       
   417 			break;
       
   418     	case EFileSystemReadEMicroSeconds:
       
   419 			aType = EFileSystemReadE;
       
   420 			break;
       
   421     	case EFileSystemReadZMicroSeconds:
       
   422 			aType = EFileSystemReadZ;
       
   423 			break;
       
   424     	case EFileSystemWriteCMicroSeconds:
       
   425 			aType = EFileSystemWriteC;
       
   426 			break;
       
   427     	case EFileSystemWriteDMicroSeconds:
       
   428 			aType = EFileSystemWriteD;
       
   429 			break;
       
   430     	case EFileSystemWriteEMicroSeconds:
       
   431 			aType = EFileSystemWriteE;
       
   432 			break;
       
   433     	case EFileSystemFillAndEmptyCMicroSeconds:
       
   434 			aType = EFileSystemFillAndEmptyC;
       
   435 			break;
       
   436     	case EFileSystemFillAndEmptyDMicroSeconds:
       
   437 			aType = EFileSystemFillAndEmptyD;
       
   438 			break;
       
   439     	case EFileSystemFillAndEmptyEMicroSeconds:
       
   440 			aType = EFileSystemFillAndEmptyE;
       
   441 			break;
       
   442     	}    
       
   443     
       
   444     iInterferenceType = aType;
       
   445     iIdleTime = aIdleTime;
       
   446     iActiveTime = aActiveTime;
       
   447 
       
   448     // Set request to pending and active object to active
       
   449     iStatus = KRequestPending;
       
   450     SetActive();
       
   451     // Complete request immediately
       
   452     TRequestStatus* status = &iStatus;
       
   453     User::RequestComplete( status, KErrNone );
       
   454 
       
   455     return KErrNone;
       
   456 
       
   457     }
       
   458 
       
   459 /*
       
   460 -------------------------------------------------------------------------------
       
   461 
       
   462     Class: CSTIFInterferenceAO
       
   463 
       
   464     Method: Stop
       
   465 
       
   466     Description: Stop method stops test interference.
       
   467 
       
   468     Parameters: None
       
   469 
       
   470     Return Values: TInt: Symbian error code.
       
   471 
       
   472     Errors/Exceptions: None
       
   473 
       
   474     Status: Approved
       
   475 
       
   476 -------------------------------------------------------------------------------
       
   477 */
       
   478 TInt CSTIFInterferenceAO::Stop()
       
   479     {
       
   480     Cancel();
       
   481 
       
   482     return KErrNone;
       
   483 
       
   484     }
       
   485 
       
   486 /*
       
   487 -------------------------------------------------------------------------------
       
   488 
       
   489     Class: CSTIFInterferenceAO
       
   490 
       
   491     Method: SetPriority
       
   492 
       
   493     Description: Sets thread or active object priority. This should use before
       
   494                  test interference is started otherwise error code will return.
       
   495 
       
   496     Parameters: TInt aPriority: in: New priority for active object given by
       
   497                 user.
       
   498 
       
   499     Return Values: TInt: Symbian error code.
       
   500 
       
   501     Errors/Exceptions: None
       
   502 
       
   503     Status: Approved
       
   504 
       
   505 -------------------------------------------------------------------------------
       
   506 */
       
   507 TInt CSTIFInterferenceAO::SetPriority( TInt aPriority )
       
   508     {
       
   509     if( IsActive() )
       
   510         {
       
   511         RDebug::Print( _L( "STIF: Priority cannot set because active object is active" ) );
       
   512         return KErrGeneral;
       
   513         }
       
   514 
       
   515     CActive::SetPriority( (TPriority)aPriority );
       
   516 
       
   517     return KErrNone;
       
   518 
       
   519     }
       
   520 
       
   521 /*
       
   522 -------------------------------------------------------------------------------
       
   523 
       
   524     DESCRIPTION
       
   525 
       
   526     This module contains the implementation of CSTIFInterferenceThread class 
       
   527     member functions.
       
   528 
       
   529 -------------------------------------------------------------------------------
       
   530 */
       
   531 
       
   532 
       
   533 // ============================ MEMBER FUNCTIONS ===============================
       
   534 
       
   535 /*
       
   536 -------------------------------------------------------------------------------
       
   537 
       
   538     Class: CSTIFInterferenceThread
       
   539 
       
   540     Method: CSTIFInterferenceThread
       
   541 
       
   542     Description: C++ default constructor can NOT contain any code, that
       
   543                  might leave.
       
   544 
       
   545     Parameters: None
       
   546 
       
   547     Return Values: None
       
   548 
       
   549     Errors/Exceptions: None
       
   550 
       
   551     Status: Approved
       
   552 
       
   553 -------------------------------------------------------------------------------
       
   554 */
       
   555 CSTIFInterferenceThread::CSTIFInterferenceThread()
       
   556     {
       
   557     // None
       
   558 
       
   559     }
       
   560 
       
   561 /*
       
   562 -------------------------------------------------------------------------------
       
   563 
       
   564     Class: CSTIFInterferenceThread
       
   565 
       
   566     Method: ConstructL
       
   567 
       
   568     Description: C++ default constructor can NOT contain any code, that
       
   569                  might leave.
       
   570 
       
   571     Parameters: None
       
   572 
       
   573     Return Values: None
       
   574 
       
   575     Errors/Exceptions: None
       
   576 
       
   577     Status: Approved
       
   578 
       
   579 -------------------------------------------------------------------------------
       
   580 */
       
   581 void CSTIFInterferenceThread::ConstructL( CTestModuleBase* aTestModuleBase )
       
   582     {
       
   583     iTestModuleBase = aTestModuleBase;
       
   584 
       
   585     }
       
   586 
       
   587 /*
       
   588 -------------------------------------------------------------------------------
       
   589 
       
   590     Class: CSTIFInterferenceThread
       
   591 
       
   592     Method: NewL
       
   593 
       
   594     Description: Two-phased constructor.
       
   595 
       
   596     Parameters: None
       
   597 
       
   598     Return Values: CSTIFInterferenceThread*: pointer to CSTIFInterferenceThread
       
   599                    object
       
   600 
       
   601     Errors/Exceptions: Leaves if object creation fails.
       
   602 
       
   603     Status: Approved
       
   604 
       
   605 -------------------------------------------------------------------------------
       
   606 */
       
   607 CSTIFInterferenceThread* CSTIFInterferenceThread::NewL( 
       
   608                                             CTestModuleBase* aTestModuleBase )
       
   609     {
       
   610     CSTIFInterferenceThread* self = new (ELeave) CSTIFInterferenceThread();
       
   611 
       
   612     CleanupStack::PushL( self );
       
   613     self->ConstructL( aTestModuleBase );
       
   614     CleanupStack::Pop();
       
   615 
       
   616     return self;
       
   617 
       
   618     }
       
   619 
       
   620 /*
       
   621 -------------------------------------------------------------------------------
       
   622 
       
   623     Class: CSTIFInterferenceThread
       
   624 
       
   625     Method: ~CSTIFInterferenceThread
       
   626 
       
   627     Description: Destructor
       
   628 
       
   629     Parameters: None
       
   630 
       
   631     Return Values: None
       
   632 
       
   633     Errors/Exceptions: None
       
   634 
       
   635     Status: Approved
       
   636 
       
   637 -------------------------------------------------------------------------------
       
   638 */
       
   639 CSTIFInterferenceThread::~CSTIFInterferenceThread()
       
   640     {
       
   641     // If test case crash etc. do stop operations here also
       
   642     if( iThreadParam != NULL )
       
   643         {
       
   644         iThreadParam->iStarted.Close();
       
   645         }
       
   646     delete iThreadParam;
       
   647     iThreadParam = NULL;
       
   648     if( iThread.Handle() != NULL )
       
   649         {
       
   650         iThread.Kill( KErrNone );
       
   651         iThread.Close();
       
   652         }    
       
   653 
       
   654     }
       
   655 
       
   656 /*
       
   657 -------------------------------------------------------------------------------
       
   658 
       
   659     Class: CSTIFInterferenceThread
       
   660 
       
   661     Method: StartL
       
   662 
       
   663     Description: StartL method starts test interference.
       
   664 
       
   665     Parameters: TStifTestInterferenceType aType: in: Test interference type.
       
   666                 TInt aIdleTime: in: Test interference idle time.
       
   667                 TInt aActiveTime: in: Test interference active time.
       
   668 
       
   669     Return Values: TInt: Symbian error code.
       
   670 
       
   671     Errors/Exceptions: Leaves if iThreadParam exists.
       
   672                        Leaves if thread creation fails.
       
   673 
       
   674     Status: Approved
       
   675 
       
   676 -------------------------------------------------------------------------------
       
   677 */
       
   678 TInt CSTIFInterferenceThread::StartL( TStifTestInterferenceType aType,
       
   679                                         TInt aIdleTime,
       
   680                                         TInt aActiveTime )
       
   681     {
       
   682     //__UHEAP_MARK;
       
   683 
       
   684     if( iThreadParam )
       
   685         {
       
   686         User::Leave( KErrAlreadyExists );
       
   687         }
       
   688 
       
   689     // Thread related parameters
       
   690     iThreadParam = new TThreadParam;
       
   691     iThreadParam->iStarted.CreateLocal( 0 );
       
   692     iThreadParam->iType = aType;
       
   693     iThreadParam->iIdleTime = aIdleTime;
       
   694     iThreadParam->iActiveTime = aActiveTime;
       
   695 
       
   696     // Temporary thread unique name
       
   697     _LIT( KThreadFirstName, "STIFInterference_%x" );
       
   698      
       
   699     TBuf<32> tmpThreadName;
       
   700     TInt uniqueCounter = 1;
       
   701     
       
   702     TInt ret = KErrNone;
       
   703     do
       
   704     	{
       
   705     	tmpThreadName.Format( KThreadFirstName, uniqueCounter );
       
   706     	// Create thread
       
   707     	ret = iThread.Create(
       
   708     		    					tmpThreadName,       // thread name
       
   709     		                        ThreadFunction,         // thread function
       
   710     		                        KDefaultStackSize*4,    // stack
       
   711     		                        KMinHeapSize,           // Heap, min
       
   712     		                        KMaxHeapSize*2,         // Heap, max
       
   713     		                        (TAny*) iThreadParam    // parameter to thread function
       
   714     		                        );
       
   715     	uniqueCounter++;
       
   716     	}
       
   717     while( ret == KErrAlreadyExists );
       
   718     
       
   719     // If thread creation failed
       
   720     if( ret != KErrNone )        
       
   721         {
       
   722         iThreadParam->iStarted.Close();         // Close semaphore
       
   723         delete iThreadParam;
       
   724         iThreadParam = NULL;
       
   725         //__UHEAP_MARKEND;
       
   726         User::Leave( ret );
       
   727         }
       
   728 
       
   729     // Add thread pointer to STIF side for cases where need to kill
       
   730     // thread e.g. if test case is crashed etc. before Stop(give by user).
       
   731     iTestModuleBase->iTestModuleIf->AddInterferenceThread( iThread );
       
   732 
       
   733     // Create unique thread name
       
   734     const TInt name = 17; // Name parts
       
   735     const TInt id = 8;    // Unique id parts
       
   736     _LIT( KThreadUniqueName, "STIFInterference_" );
       
   737     TBuf<name+id> threadUniqueName;
       
   738     threadUniqueName.Copy( KThreadUniqueName );
       
   739     // Appends id in hexadesimal format 
       
   740     threadUniqueName.AppendFormat(  _L( "%x" ), (TInt)iThread.Id() );
       
   741     //RDebug::Print(threadUniqueName);
       
   742 
       
   743     // Reneme thread with unique name
       
   744     iThread.RenameMe( threadUniqueName );
       
   745 
       
   746     // Thread is currently in suspend state
       
   747 
       
   748     // Now start thread
       
   749     iThread.SetPriority( EPriorityMuchMore ); // set its priority
       
   750     iThread.Resume();                         // kick it into life in
       
   751                                               // sometimes(depend on scheduler)
       
   752 
       
   753     // This block execution here and continue when signal is said in thread
       
   754     // execution side.
       
   755     // Wait until the thread is started
       
   756     iThreadParam->iStarted.Wait();
       
   757 
       
   758     //__UHEAP_MARKEND;
       
   759 
       
   760     return KErrNone;
       
   761 
       
   762     }
       
   763 
       
   764 /*
       
   765 -------------------------------------------------------------------------------
       
   766 
       
   767     Class: CSTIFInterferenceThread
       
   768 
       
   769     Method: Stop
       
   770 
       
   771     Description:  Stop method stops test interference.
       
   772 
       
   773     Parameters: None
       
   774 
       
   775     Return Values: TInt: Symbian error code.
       
   776 
       
   777     Errors/Exceptions: None
       
   778 
       
   779     Status: Approved
       
   780 
       
   781 -------------------------------------------------------------------------------
       
   782 */
       
   783 TInt CSTIFInterferenceThread::Stop()
       
   784     {
       
   785     // Ensures that remove(Stop()) sequence won't do two times for one thread.
       
   786     if( iThread.Handle() != NULL )
       
   787         {
       
   788         // Remove pointer from array
       
   789         iTestModuleBase->iTestModuleIf->RemoveInterferenceThread( iThread );
       
   790         }
       
   791 
       
   792     // If test case crash etc. do stop operations here also
       
   793     if( iThreadParam != NULL )
       
   794         {
       
   795         iThreadParam->iStarted.Close();
       
   796         }
       
   797     delete iThreadParam;
       
   798     iThreadParam = NULL;
       
   799     if( iThread.Handle() != NULL )
       
   800         {
       
   801         iThread.Kill( KErrNone );
       
   802         iThread.Close();
       
   803         }    
       
   804 
       
   805     return KErrNone;
       
   806 
       
   807     }
       
   808 
       
   809 /*
       
   810 -------------------------------------------------------------------------------
       
   811 
       
   812     Class: CSTIFInterferenceThread
       
   813 
       
   814     Method: SetPriority
       
   815 
       
   816     Description: Sets thread or active object priority. This should use before
       
   817                  test interference is started otherwise error code will return.
       
   818 
       
   819     Parameters: TInt aPriority: in: New priority for active object given by
       
   820                 user.
       
   821 
       
   822     Return Values: TInt: Symbian error code.
       
   823 
       
   824     Errors/Exceptions: None
       
   825 
       
   826     Status: Approved
       
   827 
       
   828 -------------------------------------------------------------------------------
       
   829 */
       
   830 TInt CSTIFInterferenceThread::SetPriority( TInt aPriority )
       
   831     {
       
   832     // RThread priority can set during interference executions time. User
       
   833     // should be sure that given value is acceptable, otherwise SetPriority
       
   834     // panics.
       
   835 
       
   836     RThread thisThread;
       
   837     thisThread.SetPriority ( (TThreadPriority) aPriority );
       
   838 
       
   839     return KErrNone;
       
   840 
       
   841     }
       
   842 
       
   843 /*
       
   844 -------------------------------------------------------------------------------
       
   845 
       
   846     Class: CSTIFInterferenceThread
       
   847 
       
   848     Method: ThreadFunction
       
   849 
       
   850     Description: Implements thread code
       
   851 
       
   852     Parameters: TAny* aThreadArg: in : Thread related informations
       
   853 
       
   854     Return Values: TInt: Symbian error code.
       
   855 
       
   856     Errors/Exceptions: None
       
   857 
       
   858     Status: Approved
       
   859 
       
   860 -------------------------------------------------------------------------------
       
   861 */
       
   862 TInt CSTIFInterferenceThread::ThreadFunction( TAny* aThreadArg )
       
   863         {
       
   864         // Thread code here
       
   865 
       
   866         // Create clean-up stack
       
   867         CTrapCleanup* tc = CTrapCleanup::New();
       
   868 
       
   869         // Take local copy of incoming parameters. 
       
   870         // This object is in stack -> no manual deletion
       
   871         TThreadParam params = *(TThreadParam*)aThreadArg;
       
   872         
       
   873         // Signal to continue from CSTIFInterferenceThread::StartL
       
   874         params.iStarted.Signal();
       
   875 
       
   876         TInt ret = KErrNone;
       
   877 
       
   878         // Construct and install active scheduler
       
   879         CActiveScheduler* activeScheduler = new CActiveScheduler;
       
   880         CActiveScheduler::Install( activeScheduler );
       
   881 
       
   882         TRAP( ret, ExecuteInterferenceL( params.iType, params.iIdleTime, params.iActiveTime ) );
       
   883 
       
   884     	User::LeaveIfError( ret );
       
   885         
       
   886         delete activeScheduler;
       
   887         
       
   888         // Delete clean-up stack
       
   889         delete tc;
       
   890         tc = NULL;
       
   891 
       
   892         return KErrNone;
       
   893         }
       
   894 
       
   895 /*
       
   896 -------------------------------------------------------------------------------
       
   897 
       
   898     Class: CSTIFInterferenceThread
       
   899 
       
   900     Method: ExecuteInterferenceL
       
   901 
       
   902     Description: Executes interference.
       
   903 
       
   904     Parameters: aType		Interference type.
       
   905     			aIdleTime	Idle time.
       
   906     			aActiveTime Active time.
       
   907 
       
   908     Return Values: None
       
   909 
       
   910     Errors/Exceptions: None
       
   911 
       
   912     Status: Approved
       
   913 
       
   914 -------------------------------------------------------------------------------
       
   915 */
       
   916 void CSTIFInterferenceThread::ExecuteInterferenceL( TStifTestInterferenceType aType, TInt aIdleTime, TInt aActiveTime )
       
   917 	{
       
   918 	CSTIFInterferenceAO* interferenceAO = CSTIFInterferenceAO::NewL();
       
   919 	CleanupStack::PushL( interferenceAO );
       
   920 
       
   921 	interferenceAO->StartL( aType, aIdleTime, aActiveTime );
       
   922 
       
   923 	CActiveScheduler::Start();
       
   924 	
       
   925 	CleanupStack::PopAndDestroy( interferenceAO );
       
   926 	}
       
   927 
       
   928 /*
       
   929 -------------------------------------------------------------------------------
       
   930 
       
   931     DESCRIPTION
       
   932 
       
   933     This module contains the implementation of CExecuteInterference class 
       
   934     member functions.
       
   935 
       
   936 -------------------------------------------------------------------------------
       
   937 */
       
   938 
       
   939 
       
   940 // ============================ MEMBER FUNCTIONS ===============================
       
   941 
       
   942 /*
       
   943 -------------------------------------------------------------------------------
       
   944 
       
   945     Class: CExecuteInterference
       
   946 
       
   947     Method: CExecuteInterference
       
   948 
       
   949     Description: C++ default constructor can NOT contain any code, that
       
   950                  might leave.
       
   951 
       
   952     Parameters: None
       
   953 
       
   954     Return Values: None
       
   955 
       
   956     Errors/Exceptions: None
       
   957 
       
   958     Status: Approved
       
   959 
       
   960 -------------------------------------------------------------------------------
       
   961 */
       
   962 CExecuteInterference::CExecuteInterference()
       
   963     {
       
   964     iTimer.CreateLocal();
       
   965 
       
   966     }
       
   967 
       
   968 /*
       
   969 -------------------------------------------------------------------------------
       
   970 
       
   971     Class: CExecuteInterference
       
   972 
       
   973     Method: ConstructL
       
   974 
       
   975     Description: C++ default constructor can NOT contain any code, that
       
   976                  might leave.
       
   977 
       
   978     Parameters: None
       
   979 
       
   980     Return Values: None
       
   981 
       
   982     Errors/Exceptions: None
       
   983 
       
   984     Status: Approved
       
   985 
       
   986 -------------------------------------------------------------------------------
       
   987 */
       
   988 void CExecuteInterference::ConstructL()
       
   989     {
       
   990     // None
       
   991 
       
   992     }
       
   993 
       
   994 /*
       
   995 -------------------------------------------------------------------------------
       
   996 
       
   997     Class: CExecuteInterference
       
   998 
       
   999     Method: NewL
       
  1000 
       
  1001     Description: Two-phased constructor.
       
  1002 
       
  1003     Parameters: None
       
  1004 
       
  1005     Return Values: CExecuteInterference*: pointer to CExecuteInterference
       
  1006                    object
       
  1007 
       
  1008     Errors/Exceptions: Leaves if object creation fails.
       
  1009 
       
  1010     Status: Approved
       
  1011 
       
  1012 -------------------------------------------------------------------------------
       
  1013 */
       
  1014 CExecuteInterference* CExecuteInterference::NewL()
       
  1015     {
       
  1016     CExecuteInterference* self = new (ELeave) CExecuteInterference();
       
  1017 
       
  1018     CleanupStack::PushL( self );
       
  1019     self->ConstructL();
       
  1020     CleanupStack::Pop();
       
  1021 
       
  1022     return self;
       
  1023 
       
  1024     }
       
  1025 
       
  1026 /*
       
  1027 -------------------------------------------------------------------------------
       
  1028 
       
  1029     Class: CExecuteInterference
       
  1030 
       
  1031     Method: ~CExecuteInterference
       
  1032 
       
  1033     Description: Destructor
       
  1034 
       
  1035     Parameters: None
       
  1036 
       
  1037     Return Values: None
       
  1038 
       
  1039     Errors/Exceptions: None
       
  1040 
       
  1041     Status: Approved
       
  1042 
       
  1043 -------------------------------------------------------------------------------
       
  1044 */
       
  1045 CExecuteInterference::~CExecuteInterference()
       
  1046     {
       
  1047     iTimer.Cancel();
       
  1048     iTimer.Close();
       
  1049 
       
  1050     }
       
  1051 
       
  1052 /*
       
  1053 -------------------------------------------------------------------------------
       
  1054 
       
  1055     Class: CExecuteInterference
       
  1056 
       
  1057     Method: Interference
       
  1058 
       
  1059     Description: Start implement the test interference according to aType
       
  1060                  parameter.
       
  1061 
       
  1062     Parameters: MSTIFTestInterference::TStifTestInterferenceType aType: in:
       
  1063                     Test interference type.
       
  1064                 TInt aActiveTime: in: Test interference active time
       
  1065 
       
  1066     Return Values: TInt: Symbian error code
       
  1067 
       
  1068     Errors/Exceptions: Leaves if CleanupClosePushL leave
       
  1069 
       
  1070     Status: Proposal
       
  1071 
       
  1072 -------------------------------------------------------------------------------
       
  1073 */
       
  1074 TInt CExecuteInterference::InterferenceL( 
       
  1075                     MSTIFTestInterference::TStifTestInterferenceType aType,
       
  1076                     TInt aActiveTime )
       
  1077     {
       
  1078     TTimeIntervalMicroSeconds32 myActiveTime( aActiveTime );    
       
  1079     
       
  1080     TTime endTime;
       
  1081     endTime.HomeTime();           
       
  1082     endTime = endTime + myActiveTime;   
       
  1083         
       
  1084     TFileName myFile;    
       
  1085         
       
  1086     switch( aType )
       
  1087         {
       
  1088         case MSTIFTestInterference::ECpuLoad:
       
  1089             {
       
  1090             return CPULoad( myActiveTime );
       
  1091             }
       
  1092         case MSTIFTestInterference::EFileSystemReadC:
       
  1093             {           
       
  1094             RDebug::Print( _L( "STIFTestInterference::EFileSystemReadC" ) );
       
  1095             
       
  1096             _LIT( KDrive, "c:\\" );   
       
  1097             myFile.Format( KDrive );
       
  1098             
       
  1099             RFs fileserver;            
       
  1100             TInt err = fileserver.Connect(); 
       
  1101             if( err != KErrNone )
       
  1102                 {
       
  1103                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1104                 return err;
       
  1105                 }          
       
  1106             CleanupClosePushL( fileserver );                                                                        
       
  1107 
       
  1108             err = fileserver.SetSessionPath( myFile );
       
  1109             if( err != KErrNone )
       
  1110                 {
       
  1111                 RDebug::Print( _L( "Drive C is not ready!" ) );                                
       
  1112                 // R Classes have not created with New, no delete needed
       
  1113                 CleanupStack::Pop( &fileserver );
       
  1114                 fileserver.Close();
       
  1115                 return KErrNone;
       
  1116                 }                           
       
  1117                 
       
  1118             RDebug::Print( _L( "SearchAFileForReading" ) );                  
       
  1119             err = SearchAFileForReading( myFile, fileserver );                        
       
  1120             // R Classes have not created with New, no delete needed
       
  1121             CleanupStack::Pop( &fileserver );
       
  1122             fileserver.Close();
       
  1123             if( err != KErrNone )
       
  1124                 {
       
  1125                 RDebug::Print( _L( "File not found!" ) );                  
       
  1126                 return KErrNone;
       
  1127                 }                            
       
  1128 
       
  1129             RDebug::Print( _L( "File's name is: %S" ), &myFile );                     
       
  1130                         
       
  1131             return RepeatReadFromFileL( myFile, myActiveTime );
       
  1132             }
       
  1133         case MSTIFTestInterference::EFileSystemReadD:
       
  1134             {
       
  1135             RDebug::Print( _L( "STIFTestInterference::EFileSystemReadD" ) );            
       
  1136             _LIT( KDrive, "D\x3a\\" );   
       
  1137             myFile.Format( KDrive );
       
  1138             
       
  1139             RFs fileserver;            
       
  1140             TInt err = fileserver.Connect(); 
       
  1141             if( err != KErrNone )
       
  1142                 {
       
  1143                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1144                 return err;
       
  1145                 }          
       
  1146             CleanupClosePushL( fileserver );                                                                        
       
  1147             err = fileserver.SetSessionPath( myFile );
       
  1148             if( err != KErrNone )
       
  1149                 {
       
  1150                 RDebug::Print( _L( "Drive D is not ready!" ) );                                
       
  1151                 // R Classes have not created with New, no delete needed
       
  1152                 CleanupStack::Pop( &fileserver );
       
  1153                 fileserver.Close();
       
  1154                 return KErrNone;
       
  1155                 }                           
       
  1156             RDebug::Print( _L( "Fileserver created" ) );                  
       
  1157                         
       
  1158             err = SearchAFileForReading( myFile, fileserver );                        
       
  1159             // R Classes have not created with New, no delete needed
       
  1160             CleanupStack::Pop( &fileserver );
       
  1161             fileserver.Close();
       
  1162             if( err != KErrNone )
       
  1163                 {
       
  1164                 RDebug::Print( _L( "File not found!" ) );                  
       
  1165                 return KErrNone;
       
  1166                 }                                                  
       
  1167             return RepeatReadFromFileL( myFile, myActiveTime );
       
  1168             }
       
  1169         case MSTIFTestInterference::EFileSystemReadE:
       
  1170             {
       
  1171             RDebug::Print( _L( "STIFTestInterference::EFileSystemReadE" ) );            
       
  1172             _LIT( KDrive, "E\x3a\\" );   
       
  1173             myFile.Format( KDrive );
       
  1174            
       
  1175             RFs fileserver;            
       
  1176             TInt err = fileserver.Connect(); 
       
  1177             if( err != KErrNone )
       
  1178                 {
       
  1179                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1180                 return err;
       
  1181                 }          
       
  1182             CleanupClosePushL( fileserver );                                                                        
       
  1183             RDebug::Print( _L( "Fileserver created" ) );                  
       
  1184             err = fileserver.SetSessionPath( myFile );
       
  1185             if( err != KErrNone )
       
  1186                 {
       
  1187                 RDebug::Print( _L( "Drive E is not ready!" ) );
       
  1188                 // R Classes have not created with New, no delete needed
       
  1189                 CleanupStack::Pop( &fileserver );
       
  1190                 fileserver.Close();
       
  1191                 return KErrNone;
       
  1192                 }                           
       
  1193             
       
  1194             err = SearchAFileForReading( myFile, fileserver );                        
       
  1195             // R Classes have not created with New, no delete needed
       
  1196             CleanupStack::Pop( &fileserver );
       
  1197             fileserver.Close();
       
  1198             if( err != KErrNone )
       
  1199                 {
       
  1200                 RDebug::Print( _L( "File not found!" ) );                  
       
  1201                 return KErrNone;
       
  1202                 }                                                  
       
  1203             
       
  1204             return RepeatReadFromFileL( myFile, myActiveTime );
       
  1205             }
       
  1206         case MSTIFTestInterference::EFileSystemReadZ:
       
  1207             {
       
  1208             RDebug::Print( _L( "STIFTestInterference::EFileSystemReadZ" ) );            
       
  1209             _LIT( KDrive, "Z:\\" );   
       
  1210             myFile.Format( KDrive );
       
  1211 
       
  1212             RFs fileserver;            
       
  1213             TInt err = fileserver.Connect(); 
       
  1214             if( err != KErrNone )
       
  1215                 {
       
  1216                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1217                 return err;
       
  1218                 }          
       
  1219             CleanupClosePushL( fileserver );                                                        
       
  1220             RDebug::Print( _L( "Fileserver created" ) );                  
       
  1221             err = fileserver.SetSessionPath( myFile );
       
  1222             if( err != KErrNone )
       
  1223                 {
       
  1224                 RDebug::Print( _L( "Drive Z is not ready!" ) );                                
       
  1225                 // R Classes have not created with New, no delete needed
       
  1226                 CleanupStack::Pop( &fileserver );
       
  1227                 fileserver.Close();
       
  1228                 return KErrNone;
       
  1229                 }                           
       
  1230 
       
  1231             err = SearchAFileForReading( myFile, fileserver );                        
       
  1232             // R Classes have not created with New, no delete needed
       
  1233             CleanupStack::Pop( &fileserver );
       
  1234             fileserver.Close();
       
  1235             if( err != KErrNone )
       
  1236                 {
       
  1237                 RDebug::Print( _L( "File not found!" ) );                  
       
  1238                 return KErrNone;
       
  1239                 }                                                  
       
  1240             
       
  1241             return RepeatReadFromFileL( myFile, myActiveTime );
       
  1242             }           
       
  1243         case MSTIFTestInterference::EFileSystemWriteC:
       
  1244             {            
       
  1245             RDebug::Print( _L( "STIFTestInterference::EFileSystemWriteC" ) );            
       
  1246             _LIT( KDrive, "C:\\" );
       
  1247             _LIT( KFileName,  "FileSystemWriteC.txt" );                                    
       
  1248             TBufC<20> myFileName( KFileName );            
       
  1249             myFile.Format( KDrive );
       
  1250 
       
  1251             RFs fileserver;            
       
  1252             TInt err = fileserver.Connect(); 
       
  1253             if( err != KErrNone )
       
  1254                 {
       
  1255                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1256                 return err;
       
  1257                 }          
       
  1258             CleanupClosePushL( fileserver );                                                        
       
  1259             RDebug::Print( _L( "Fileserver created" ) );                  
       
  1260                         
       
  1261             err = fileserver.SetSessionPath( myFile );                       
       
  1262             // R Classes have not created with New, no delete needed
       
  1263             CleanupStack::Pop( &fileserver );
       
  1264             fileserver.Close();
       
  1265             if( err != KErrNone )
       
  1266                 {
       
  1267                 RDebug::Print( _L( "Drive C is not ready!" ) );
       
  1268                 return KErrNone;
       
  1269                 }
       
  1270             
       
  1271             PrepareFileSystemL( myFile, myFileName );
       
  1272             myFile.Append( myFileName );
       
  1273             return RepeatWriteToFileL( myFile, endTime );
       
  1274             }
       
  1275         case MSTIFTestInterference::EFileSystemWriteD:
       
  1276             {
       
  1277             RDebug::Print( _L( "STIFTestInterference::EFileSystemWriteD" ) );            
       
  1278             _LIT( KDrive, "D\x3a\\" );
       
  1279             _LIT( KFileName,  "FileSystemWriteD.txt" );                                    
       
  1280             TBufC<20> myFileName( KFileName );            
       
  1281             myFile.Format( KDrive );
       
  1282 
       
  1283             RFs fileserver;            
       
  1284             TInt err = fileserver.Connect(); 
       
  1285             if( err != KErrNone )
       
  1286                 {
       
  1287                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1288                 return err;
       
  1289                 }          
       
  1290             CleanupClosePushL( fileserver );                                            
       
  1291             RDebug::Print( _L( "Fileserver created" ) );                  
       
  1292             err = fileserver.SetSessionPath( myFile );                       
       
  1293                         
       
  1294             // R Classes have not created with New, no delete needed
       
  1295             CleanupStack::Pop( &fileserver );
       
  1296             fileserver.Close();
       
  1297             if( err != KErrNone )
       
  1298                 {
       
  1299                 RDebug::Print( _L( "Drive D is not ready!" ) );
       
  1300                 return KErrNone;
       
  1301                 }
       
  1302                             
       
  1303             PrepareFileSystemL( myFile, myFileName );
       
  1304             myFile.Append( myFileName );
       
  1305             return RepeatWriteToFileL( myFile, endTime );
       
  1306             }
       
  1307         case MSTIFTestInterference::EFileSystemWriteE:
       
  1308             {            
       
  1309             RDebug::Print( _L( "STIFTestInterference::EFileSystemWriteE" ) );            
       
  1310             _LIT( KDrive, "E\x3a\\" );
       
  1311             _LIT( KFileName,  "FileSystemWriteE.txt" );
       
  1312             TBufC<20> myFileName( KFileName );            
       
  1313             myFile.Format( KDrive );
       
  1314             
       
  1315             RFs fileserver;            
       
  1316             TInt err = fileserver.Connect(); 
       
  1317             if( err != KErrNone )
       
  1318                 {
       
  1319                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1320                 return err;
       
  1321                 }          
       
  1322             CleanupClosePushL( fileserver );                                
       
  1323             RDebug::Print( _L( "Fileserver created" ) );                  
       
  1324                         
       
  1325             err = fileserver.SetSessionPath( myFile );                       
       
  1326             // R Classes have not created with New, no delete needed
       
  1327             CleanupStack::Pop( &fileserver );
       
  1328             fileserver.Close();
       
  1329             if( err != KErrNone )
       
  1330                 {
       
  1331                 RDebug::Print( _L( "Drive E is not ready!" ) );
       
  1332                 return KErrNone;
       
  1333                 }            
       
  1334             PrepareFileSystemL( myFile, myFileName );
       
  1335             myFile.Append( myFileName );
       
  1336 
       
  1337             return RepeatWriteToFileL( myFile, endTime );
       
  1338             }
       
  1339         case MSTIFTestInterference::EFileSystemFillAndEmptyC:
       
  1340             {                       
       
  1341             RDebug::Print( _L( "STIFTestInterference::EFileSystemFillAndEmptyC" ) );            
       
  1342             _LIT( KDrive, "C:\\" );
       
  1343             _LIT( KFileName,  "FillAndEmptyFile.txt" );                      
       
  1344             TBufC<20> myFileName( KFileName );            
       
  1345             myFile.Format( KDrive );
       
  1346             
       
  1347             RFs fileserver;            
       
  1348             TInt err = fileserver.Connect();             
       
  1349             if( err != KErrNone )
       
  1350                 {
       
  1351                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1352                 return err;
       
  1353                 }          
       
  1354             CleanupClosePushL( fileserver );                    
       
  1355             RDebug::Print( _L( "Fileserver created" ) );                  
       
  1356                         
       
  1357             err = fileserver.SetSessionPath( myFile );                       
       
  1358             // R Classes have not created with New, no delete needed
       
  1359             CleanupStack::Pop( &fileserver );
       
  1360             fileserver.Close();
       
  1361             if( err != KErrNone )
       
  1362                 {
       
  1363                 RDebug::Print( _L( "Drive C is not ready!" ) );
       
  1364                 return KErrNone;
       
  1365                 }                
       
  1366             PrepareFileSystemL( myFile, myFileName );
       
  1367             myFile.Append( myFileName );
       
  1368 
       
  1369             RepeatWriteToFileL( myFile, endTime );                        
       
  1370             EmptyTheFileSystemL( myFile, endTime );
       
  1371             
       
  1372             return KErrNone;
       
  1373             }
       
  1374         case MSTIFTestInterference::EFileSystemFillAndEmptyD:
       
  1375             {
       
  1376             RDebug::Print( _L( "STIFTestInterference::EFileSystemFillAndEmptyD" ) );            
       
  1377             _LIT( KDrive, "D\x3a\\" );
       
  1378             _LIT( KFileName,  "FillAndEmptyFile.txt" );                      
       
  1379             TBufC<20> myFileName( KFileName );            
       
  1380             myFile.Format( KDrive );
       
  1381             
       
  1382             RFs fileserver;            
       
  1383             TInt err = fileserver.Connect(); 
       
  1384             if( err != KErrNone )
       
  1385                 {
       
  1386                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1387                 return err;
       
  1388                 }      
       
  1389             CleanupClosePushL( fileserver );                    
       
  1390             RDebug::Print( _L( "Fileserver created" ) );                  
       
  1391                         
       
  1392             err = fileserver.SetSessionPath( myFile );                       
       
  1393             // R Classes have not created with New, no delete needed
       
  1394             CleanupStack::Pop( &fileserver );
       
  1395             fileserver.Close();
       
  1396             if( err != KErrNone )
       
  1397                 {
       
  1398                 RDebug::Print( _L( "Drive D is not ready!" ) );
       
  1399                 return KErrNone;
       
  1400                 }                
       
  1401             PrepareFileSystemL( myFile, myFileName );
       
  1402             myFile.Append( myFileName );
       
  1403 
       
  1404             RepeatWriteToFileL( myFile, endTime );                        
       
  1405             EmptyTheFileSystemL( myFile, endTime );
       
  1406             
       
  1407             return KErrNone;
       
  1408             }
       
  1409         case MSTIFTestInterference::EFileSystemFillAndEmptyE:
       
  1410             {
       
  1411             RDebug::Print( _L( "STIFTestInterference::EFileSystemFillAndEmptyE" ) );            
       
  1412             _LIT( KDrive, "E\x3a\\" );
       
  1413             _LIT( KFileName,  "FillAndEmptyFile.txt" );                      
       
  1414             TBufC<20> myFileName( KFileName );            
       
  1415             myFile.Format( KDrive );
       
  1416             
       
  1417             RFs fileserver;            
       
  1418             TInt err = fileserver.Connect(); 
       
  1419             if( err != KErrNone )
       
  1420                 {
       
  1421                 RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1422                 return err;
       
  1423                 }          
       
  1424             CleanupClosePushL( fileserver );
       
  1425             RDebug::Print( _L( "Fileserver created" ) );                  
       
  1426                         
       
  1427             err = fileserver.SetSessionPath( myFile );                       
       
  1428             // R Classes have not created with New, no delete needed
       
  1429             CleanupStack::Pop( &fileserver );
       
  1430             fileserver.Close();
       
  1431 
       
  1432             if( err != KErrNone )
       
  1433                 {
       
  1434                 RDebug::Print( _L( "Drive E is not ready!" ) );
       
  1435                 return KErrNone;
       
  1436                 }                
       
  1437             PrepareFileSystemL( myFile, myFileName );
       
  1438             myFile.Append( myFileName );
       
  1439 
       
  1440             RepeatWriteToFileL( myFile, endTime );                        
       
  1441             EmptyTheFileSystemL( myFile, endTime );
       
  1442             
       
  1443             return KErrNone;
       
  1444             }       
       
  1445         default:
       
  1446             {
       
  1447             return KErrNone;
       
  1448             }
       
  1449         }
       
  1450     }
       
  1451 
       
  1452 /*
       
  1453 -------------------------------------------------------------------------------
       
  1454 
       
  1455     Class: CExecuteInterference
       
  1456 
       
  1457     Method: SearchAFileForReading
       
  1458 
       
  1459     Description: Searches a file from given directory
       
  1460 
       
  1461     Parameters: TDes &aPath, TDes &aFileserver
       
  1462 
       
  1463     Return Values: TInt Symbian error code
       
  1464 
       
  1465     Errors/Exceptions: None
       
  1466 
       
  1467     Status: Approved
       
  1468 
       
  1469 -------------------------------------------------------------------------------
       
  1470 */
       
  1471 TInt CExecuteInterference::SearchAFileForReading( TDes &aPath, RFs &aFileserver )
       
  1472     {
       
  1473     RDebug::Print( _L( "CExecuteInterference::SearchAFileForReading" ) );    
       
  1474     
       
  1475     CDir * filelist;
       
  1476     CDir * dirlist;
       
  1477     TInt ret = KErrNotFound;       
       
  1478     aFileserver.SetSessionPath( aPath );        
       
  1479     
       
  1480     aFileserver.GetDir( aPath, KEntryAttNormal, ESortByName, filelist, dirlist );        
       
  1481     
       
  1482     if( !filelist || !dirlist )
       
  1483         {
       
  1484         return KErrArgument;
       
  1485         }
       
  1486 
       
  1487     if( filelist->Count() > 0 )
       
  1488         {
       
  1489         RDebug::Print( _L( "Filelist > 0" ) );    
       
  1490             
       
  1491         // File found! 
       
  1492         
       
  1493         // Check file size and accept it only if the size is ~10kb
       
  1494         // at miminum, or something like that
       
  1495         aPath.Append( (*filelist)[0].iName );                        
       
  1496         ret = KErrNone;
       
  1497         
       
  1498         RDebug::Print( _L( "File name: %S" ), &(*filelist)[0].iName );        
       
  1499         }
       
  1500     else
       
  1501         {
       
  1502         RDebug::Print( _L( "Filelist < 0, lets check other dirs" ) );            
       
  1503         TFileName tmp;
       
  1504         tmp.Append( aPath );
       
  1505         for( TInt x=0; x<dirlist->Count(); x++ )
       
  1506             {            
       
  1507             aPath.Format( tmp );
       
  1508             aPath.Append( (*dirlist)[0].iName );
       
  1509             aPath.Append( _L("\\") );
       
  1510             ret = SearchAFileForReading( aPath, aFileserver );
       
  1511             if( ret == KErrNone )
       
  1512                 {
       
  1513                 break;
       
  1514                 }
       
  1515             }
       
  1516         }
       
  1517     
       
  1518     delete filelist;
       
  1519     delete dirlist;    
       
  1520        
       
  1521     return ret;        
       
  1522     }
       
  1523 
       
  1524 /*
       
  1525 -------------------------------------------------------------------------------
       
  1526 
       
  1527     Class: CExecuteInterference
       
  1528 
       
  1529     Method: PrepareFileSystemLL
       
  1530 
       
  1531     Description: Creates directory and file for test cases, if necessary
       
  1532 
       
  1533     Parameters: TDes &aDriveName, TDes &aFileName
       
  1534 
       
  1535     Return Values: TInt Symbian error code
       
  1536 
       
  1537     Errors/Exceptions: None
       
  1538 
       
  1539     Status: Approved
       
  1540 
       
  1541 -------------------------------------------------------------------------------
       
  1542 */
       
  1543 TInt CExecuteInterference::PrepareFileSystemL( TDesC &aDriveName,
       
  1544                                               TDesC &aFileName )
       
  1545     {
       
  1546     // Note that aDriveName must be in format drivename:\\, e.g. "c:\\"
       
  1547     
       
  1548     RDebug::Print(_L("CExecuteInterference::PrepareFileSystemL"));
       
  1549     TFileName tmp;
       
  1550     tmp.Append( aDriveName );
       
  1551     
       
  1552     RFs fileserver;
       
  1553     TInt err = fileserver.Connect(); 
       
  1554     if( err != KErrNone )
       
  1555         {
       
  1556         RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1557         return err;
       
  1558         }      
       
  1559     CleanupClosePushL( fileserver );                    
       
  1560             
       
  1561     _LIT( KSTIFDirName, "STIFInterference\\" );                                          
       
  1562 
       
  1563     err = fileserver.SetSessionPath( tmp );                           
       
  1564     if( err != KErrNone )
       
  1565         {
       
  1566         CleanupStack::Pop( &fileserver );
       
  1567         fileserver.Close();
       
  1568         return err;
       
  1569         }
       
  1570     
       
  1571     tmp.Append( KSTIFDirName );
       
  1572     err = fileserver.MkDir( tmp );
       
  1573     if( err != KErrNone && err != KErrAlreadyExists )
       
  1574         {
       
  1575         RDebug::Print( _L( "MkDir failed with error: %d" ), err );
       
  1576         // R Classes have not created with New, no delete needed
       
  1577         CleanupStack::Pop( &fileserver );
       
  1578         fileserver.Close();
       
  1579         return err;
       
  1580         }              
       
  1581     
       
  1582     tmp.Format( aDriveName );
       
  1583     tmp.Append( KSTIFDirName );        
       
  1584     fileserver.SetSessionPath( tmp );                               
       
  1585 
       
  1586     RFile newFile;
       
  1587     CleanupClosePushL( newFile );                    
       
  1588     TInt ret = newFile.Create( fileserver, aFileName, EFileWrite );
       
  1589     if( ret != KErrNone && ret != KErrAlreadyExists )
       
  1590         {
       
  1591         RDebug::Print( _L( "File create failed with error: %d" ), err );            
       
  1592         }
       
  1593         
       
  1594     // R Classes have not created with New, no delete needed
       
  1595     CleanupStack::Pop( &newFile );
       
  1596     CleanupStack::Pop( &fileserver );
       
  1597     newFile.Close();
       
  1598     fileserver.Close();
       
  1599     
       
  1600     return ret;      
       
  1601     }
       
  1602 
       
  1603 /*
       
  1604 -------------------------------------------------------------------------------
       
  1605 
       
  1606     Class: CExecuteInterference
       
  1607 
       
  1608     Method: CPULoad
       
  1609 
       
  1610     Description: Creates CPU load to the system
       
  1611 
       
  1612     Parameters: const TTimeIntervalMicroSeconds32 &aActiveTime
       
  1613 
       
  1614     Return Values: TInt Symbian error code
       
  1615 
       
  1616     Errors/Exceptions: None
       
  1617 
       
  1618     Status: Approved
       
  1619 
       
  1620 -------------------------------------------------------------------------------
       
  1621 */
       
  1622 TInt CExecuteInterference::CPULoad( const TTimeIntervalMicroSeconds32 &aActiveTime )
       
  1623     {
       
  1624     RDebug::Print(_L("CExecuteInterference::CPULoad"));
       
  1625 
       
  1626     TTime endTime;
       
  1627     TTime currentTime;
       
  1628 
       
  1629     currentTime.HomeTime();
       
  1630     endTime.HomeTime();
       
  1631 
       
  1632     endTime = endTime + aActiveTime;  
       
  1633 
       
  1634     while ( currentTime < endTime )
       
  1635        {
       
  1636         currentTime.HomeTime();    
       
  1637        }
       
  1638 
       
  1639     return KErrNone;    
       
  1640     }
       
  1641 
       
  1642 /*
       
  1643 -------------------------------------------------------------------------------
       
  1644 
       
  1645     Class: CExecuteInterference
       
  1646 
       
  1647     Method: DeleteFilesRecursivelyL
       
  1648 
       
  1649     Description: Delete files in current directory and its subdirectories
       
  1650 
       
  1651     Parameters: RFs &aFileserver, 
       
  1652                 TDes &aStartDirectory
       
  1653 
       
  1654     Return Values: TInt Symbian error code
       
  1655 
       
  1656     Errors/Exceptions: Leaves if GetDir fails
       
  1657 
       
  1658     Status: Approved
       
  1659 
       
  1660 -------------------------------------------------------------------------------
       
  1661 */
       
  1662 TInt CExecuteInterference::DeleteFilesRecursivelyL( RFs &aFileserver, 
       
  1663                                                     TDes &aStartDirectory,
       
  1664                                                     const TTime &aEndTime )
       
  1665     { 
       
  1666     TTime currentTime;
       
  1667     currentTime.HomeTime();      
       
  1668     if( currentTime >= aEndTime )
       
  1669         {
       
  1670         return KErrTimedOut;
       
  1671         }
       
  1672     
       
  1673     RDebug::Print( _L( "CExecuteInterference::DeleteFilesRecursivelyL" ) );    
       
  1674     
       
  1675     TFileName currentDir;   
       
  1676     CDir * filelist;
       
  1677     CDir * dirlist;       
       
  1678     
       
  1679     aFileserver.SetSessionPath( aStartDirectory );    
       
  1680     aFileserver.SessionPath( currentDir );
       
  1681     RDebug::Print( _L( "Hakemistopolku = %S" ), &currentDir );       
       
  1682     
       
  1683     User::LeaveIfError( aFileserver.GetDir( 
       
  1684             currentDir, KEntryAttNormal, ESortByName, filelist, dirlist ) );
       
  1685                
       
  1686     // Delete all files
       
  1687     for( TInt x=0; x<filelist->Count(); x++ )
       
  1688         {
       
  1689         RDebug::Print( _L( "CExecuteInterference::DeleteFilesRecursivelyL: delete: %S" ), &(*filelist)[x].iName );                    
       
  1690         aFileserver.Delete( (*filelist)[x].iName );    
       
  1691         }
       
  1692     
       
  1693     // Looping all directories recursively
       
  1694     for( TInt y= 0; y<dirlist->Count(); y++ )
       
  1695         {        
       
  1696         currentDir.Format( aStartDirectory );
       
  1697         currentDir.Append( (*dirlist)[y].iName );
       
  1698         currentDir.Append( _L("\\") );
       
  1699         DeleteFilesRecursivelyL( aFileserver, currentDir, aEndTime );
       
  1700         }    
       
  1701      
       
  1702     delete filelist;
       
  1703     delete dirlist;
       
  1704 
       
  1705     return KErrNone;
       
  1706     }
       
  1707 
       
  1708 /*
       
  1709 -------------------------------------------------------------------------------
       
  1710 
       
  1711     Class: CExecuteInterference
       
  1712 
       
  1713     Method: EmptyTheFileSystemL
       
  1714 
       
  1715     Description: Empty the file system using DeleteFilesRecursivelyL
       
  1716 
       
  1717     Parameters: TDes &aFilePath
       
  1718 
       
  1719     Return Values: TInt Symbian error code
       
  1720 
       
  1721     Errors/Exceptions: None
       
  1722 
       
  1723     Status: Approved
       
  1724 
       
  1725 -------------------------------------------------------------------------------
       
  1726 */
       
  1727 TInt CExecuteInterference::EmptyTheFileSystemL( TDes &aFilePath, 
       
  1728                                                const TTime &aEndTime )
       
  1729     {
       
  1730     TTime currentTime;
       
  1731     currentTime.HomeTime();
       
  1732     if( currentTime >= aEndTime )
       
  1733         {
       
  1734         // End of time
       
  1735         return KErrTimedOut;
       
  1736         }    
       
  1737     
       
  1738     RDebug::Print( _L( "CExecuteInterference::EmptyTheFileSystemL" ) );    
       
  1739     RFs fileserver;
       
  1740     TInt err = fileserver.Connect(); 
       
  1741     if( err != KErrNone )
       
  1742         {
       
  1743         RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1744         return err;
       
  1745         }      
       
  1746     CleanupClosePushL( fileserver );                           
       
  1747     TRAP( err, DeleteFilesRecursivelyL( fileserver, aFilePath, aEndTime ) );        
       
  1748     if( err != KErrNone )
       
  1749         {
       
  1750         RDebug::Print( _L( "DeleteFilesRecursivelyL failed with error: %d" ), err );
       
  1751         }    
       
  1752     // R Classes have not created with New, no delete needed
       
  1753     CleanupStack::Pop( &fileserver );   
       
  1754     fileserver.Close();
       
  1755     return err;
       
  1756     }
       
  1757 
       
  1758 /*
       
  1759 -------------------------------------------------------------------------------
       
  1760 
       
  1761     Class: CExecuteInterference
       
  1762 
       
  1763     Method: WriteToFileAsynchL
       
  1764 
       
  1765     Description: Writes data to a file asynchronously
       
  1766 
       
  1767     Parameters: RFs &aFileserver,
       
  1768                 const TTime &aEndTime 
       
  1769 
       
  1770     Return Values: TInt Symbian error code
       
  1771 
       
  1772     Errors/Exceptions: None
       
  1773 
       
  1774     Status: Approved
       
  1775 
       
  1776 -------------------------------------------------------------------------------
       
  1777 */
       
  1778 TInt CExecuteInterference::WriteToFileAsynchL( TDes &aFilePath,
       
  1779                                               RFs &aFileserver,
       
  1780                                               const TTime &aEndTime )
       
  1781     {
       
  1782     RFile myFile;
       
  1783 
       
  1784     TInt err = myFile.Open( aFileserver, aFilePath, EFileWrite );
       
  1785     if( err != KErrNone )
       
  1786         {
       
  1787         RDebug::Print( _L( "Open file failed with error: %d" ), err );
       
  1788         return err;
       
  1789         }    
       
  1790     CleanupClosePushL( myFile );                      
       
  1791     TInt position = 0;
       
  1792     myFile.Seek( ESeekEnd, position );
       
  1793 
       
  1794     _LIT8( KMyBuffer, "STIF Interference module: WriteToFile");
       
  1795     
       
  1796     // NOTE: this part has previous asynch implementation, doesn't work
       
  1797     // at the moment
       
  1798     /* 
       
  1799     TRequestStatus status;
       
  1800     myFile.Write( position, KMyBuffer, status );    
       
  1801     // Loop until either write operation is completed or the execution 
       
  1802     // time has expired    
       
  1803     while( doAlways ) 
       
  1804         {
       
  1805         if( status != KRequestPending )
       
  1806             {
       
  1807             return status.Int();
       
  1808             }
       
  1809         currentTime.HomeTime();                   
       
  1810         if( currentTime >= aEndTime )
       
  1811             {
       
  1812             return KErrTimedOut;
       
  1813             }
       
  1814          
       
  1815        }
       
  1816     */            
       
  1817 
       
  1818     TTime currentTime;
       
  1819     currentTime.HomeTime();
       
  1820     
       
  1821     while( currentTime <= aEndTime )
       
  1822         {
       
  1823         myFile.Write( position, KMyBuffer );
       
  1824         currentTime.HomeTime();
       
  1825         }
       
  1826     // R Classes have not created with New, no delete needed
       
  1827     CleanupStack::Pop( &myFile );          
       
  1828     myFile.Close();
       
  1829     return KErrNone;      
       
  1830     }
       
  1831 
       
  1832 /*
       
  1833 -------------------------------------------------------------------------------
       
  1834 
       
  1835     Class: CExecuteInterference
       
  1836 
       
  1837     Method: RepeatWriteToFileL
       
  1838 
       
  1839     Description: Repeats file writing using WriteToFileAsynchL method
       
  1840 
       
  1841     Parameters: const TTimeIntervalMicroSeconds32 &aActiveTime
       
  1842 
       
  1843     Return Values: TInt Symbian error code
       
  1844 
       
  1845     Errors/Exceptions: None
       
  1846 
       
  1847     Status: Approved
       
  1848 
       
  1849 -------------------------------------------------------------------------------
       
  1850 */
       
  1851 TInt CExecuteInterference::RepeatWriteToFileL(
       
  1852                     TDes &aFilePath, 
       
  1853                     const TTime &aActiveTime )
       
  1854     {
       
  1855     RFs fileserver;
       
  1856     TInt err = fileserver.Connect(); 
       
  1857     if( err != KErrNone )
       
  1858         {
       
  1859         RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1860         return err;
       
  1861         }      
       
  1862     CleanupClosePushL( fileserver );                           
       
  1863         
       
  1864     TTime currentTime;
       
  1865     currentTime.HomeTime();
       
  1866 
       
  1867     TVolumeInfo myVolume;
       
  1868     fileserver.Volume( myVolume, EDriveC );   
       
  1869 
       
  1870     while( ( currentTime <= aActiveTime ) && ( myVolume.iFree > 0 ) )    
       
  1871         {
       
  1872         WriteToFileAsynchL( aFilePath, fileserver, aActiveTime );        
       
  1873         currentTime.HomeTime();
       
  1874         }
       
  1875     
       
  1876     // R Classes have not created with New, no delete needed
       
  1877     CleanupStack::Pop( &fileserver );        
       
  1878     fileserver.Close();
       
  1879     return KErrNone;
       
  1880     }
       
  1881 
       
  1882 /*
       
  1883 -------------------------------------------------------------------------------
       
  1884 
       
  1885     Class: CExecuteInterference
       
  1886 
       
  1887     Method: RepeatReadFromFileL
       
  1888 
       
  1889     Description: Repeats file reading using ReadFromFileAsynch method
       
  1890 
       
  1891     Parameters: const TTimeIntervalMicroSeconds32 &aActiveTime
       
  1892 
       
  1893     Return Values: TInt Symbian error code
       
  1894 
       
  1895     Errors/Exceptions: None
       
  1896 
       
  1897     Status: Approved
       
  1898 
       
  1899 -------------------------------------------------------------------------------
       
  1900 */
       
  1901 TInt CExecuteInterference::RepeatReadFromFileL( 
       
  1902                                TDes &aFilePath,
       
  1903                                const TTimeIntervalMicroSeconds32 &aActiveTime )
       
  1904     {
       
  1905     RDebug::Print( _L( "CExecuteInterference::RepeatReadFromFileL" ) );
       
  1906     
       
  1907     RFs fileserver;
       
  1908     TInt err = fileserver.Connect(); 
       
  1909     if( err != KErrNone )
       
  1910         {
       
  1911         RDebug::Print( _L( "RFs connection failed with error: %d" ), err );
       
  1912         return err;
       
  1913         }      
       
  1914     CleanupClosePushL( fileserver );                           
       
  1915     
       
  1916     TTime endTime;
       
  1917     TTime currentTime;
       
  1918     RFile myFile;
       
  1919     TBuf8<20> myReadBuffer;
       
  1920 
       
  1921     RDebug::Print( _L( "RepeatReadFromFileL: Open" ) );                  
       
  1922 
       
  1923     // Open file
       
  1924     err = myFile.Open( fileserver, aFilePath, EFileWrite );
       
  1925     if( err != KErrNone )
       
  1926         {
       
  1927         RDebug::Print( _L( "Open file failed with error: %d" ), err );
       
  1928         // R Classes have not created with New, no delete needed
       
  1929         CleanupStack::Pop( &fileserver );
       
  1930         fileserver.Close();
       
  1931         return err;
       
  1932         }        
       
  1933             
       
  1934     CleanupClosePushL( myFile );                                       
       
  1935     // This part has previous async implementation, doesn't work at moment
       
  1936     /*   
       
  1937     RDebug::Print( _L( "ReadFromFileAsynch: trequeststatus" ) );                        
       
  1938            
       
  1939     TRequestStatus timer;
       
  1940     TRequestStatus read;
       
  1941 
       
  1942     RDebug::Print( _L( "ReadFromFileAsynch: asynk timer" ) );                    
       
  1943 
       
  1944     RTimer clock;
       
  1945     clock.CreateLocal();
       
  1946     clock.At( timer, endTime);
       
  1947 
       
  1948     RDebug::Print( _L( "ReadFromFileAsynch: asynk read" ) );
       
  1949     myFile.Read( myReadBuffer, 20, read );
       
  1950 
       
  1951     RDebug::Print( _L( "ReadFromFileAsynch: ennen whilelooppia" ) );
       
  1952     while( timer == KRequestPending )
       
  1953         {
       
  1954         User::WaitForRequest( read, timer );
       
  1955         if( read != KRequestPending)
       
  1956             {
       
  1957             RDebug::Print( _L( "ReadFromFileAsynch: uudelleen asynk read" ) );
       
  1958             read = KRequestPending;                              
       
  1959     	    myFile.Read( myReadBuffer, 20, read );    	    
       
  1960             }
       
  1961         else
       
  1962             {  
       
  1963             RDebug::Print( _L( "ReadFromFileAsynch: cancel luku, timer kompletoitui" ) );                  
       
  1964             // Timer valmis         
       
  1965             //read = KRequestPending;   
       
  1966             myFile.ReadCancel( read );
       
  1967             User::WaitForRequest( read );
       
  1968             break;
       
  1969             }
       
  1970         }      
       
  1971     */
       
  1972 
       
  1973     currentTime.HomeTime();
       
  1974     endTime.HomeTime();
       
  1975     endTime = endTime + aActiveTime;
       
  1976     
       
  1977     while( currentTime <= endTime )
       
  1978         {
       
  1979         myFile.Read( myReadBuffer );
       
  1980         currentTime.HomeTime();    	    
       
  1981         }
       
  1982         
       
  1983     //myFile.Close();
       
  1984     //fileserver.Close();
       
  1985     // R Classes have not created with New, no delete needed
       
  1986     CleanupStack::Pop( &myFile );
       
  1987     CleanupStack::Pop( &fileserver );
       
  1988     myFile.Close();
       
  1989     fileserver.Close();
       
  1990     //CleanupStack::PopAndDestroy( 2 );       
       
  1991    
       
  1992     RDebug::Print( _L( "CExecuteInterference::RepeatReadFromFileL success" ) );
       
  1993     return KErrNone;    
       
  1994     }
       
  1995 
       
  1996 // ========================== OTHER EXPORTED FUNCTIONS =========================
       
  1997 // None
       
  1998 
       
  1999 //  End of File