stif/inc/TestServerModuleIf.h
branchRCL_3
changeset 59 8ad140f3dd41
equal deleted inserted replaced
49:7fdc9a71d314 59:8ad140f3dd41
       
     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 file contains the header file of the CTestExecution.
       
    15 *
       
    16 */
       
    17 
       
    18 #ifndef TEST_SERVER_MODULE_IF_H
       
    19 #define TEST_SERVER_MODULE_IF_H
       
    20 
       
    21 
       
    22 //  INCLUDES
       
    23 #include <e32std.h>
       
    24 #include <e32base.h>
       
    25 #include <StifTestModule.h>
       
    26 #include <StifTestInterface.h>
       
    27 #include "StifTFwIfProt.h"
       
    28 
       
    29 // CONSTANTS
       
    30 
       
    31 // MACROS
       
    32 
       
    33 // DATA TYPES
       
    34 
       
    35 // FUNCTION PROTOTYPES
       
    36 typedef CSTIFTestMeasurementImplementation*( 
       
    37         *CTestMeasurementFactory )( const TDesC&,
       
    38                                     CSTIFTestMeasurement::TSTIFMeasurementType );
       
    39 
       
    40 // FORWARD DECLARATIONS
       
    41 class TEvent;
       
    42 class CTestModule;
       
    43 class CTestModuleContainer;
       
    44 class CPrintQueue;
       
    45 class CPrintHandler;
       
    46 class CEventHandler;
       
    47 class CSndHandler;
       
    48 class CRcvHandler;
       
    49 class CErrorPrintHandler;
       
    50 class CInterferenceHandler;
       
    51 class CMeasurementHandler;
       
    52 class CCommandHandler;
       
    53 
       
    54 // CLASS DECLARATION
       
    55 
       
    56 // DESCRIPTION
       
    57 // TCmdDef represents remote command
       
    58 class TCmdDef
       
    59     {
       
    60     public:
       
    61         TStifCommand    iCommand;
       
    62         TParams         iParam;
       
    63         TInt            iLen;
       
    64         TRequestStatus* iStatus;
       
    65     };
       
    66 
       
    67 // TCommandDef represents command
       
    68 class TCommandDef
       
    69     {
       
    70     public:
       
    71         TCommand                       iCommand;
       
    72         TBuf8<KMaxCommandParamsLength2> iParamsPckg;
       
    73     };
       
    74     
       
    75 // DESCRIPTION
       
    76 // CCommandDef represents command
       
    77 class CCommandDef : public CBase
       
    78     {
       
    79     public: // Enumerations
       
    80 
       
    81     private: // Enumerations
       
    82         
       
    83     public:  // Constructors and destructor
       
    84     		static CCommandDef* NewL();
       
    85         	~CCommandDef();
       
    86 
       
    87     private:  // Constructors and destructor
       
    88     		CCommandDef();
       
    89         	void ConstructL();
       
    90 
       
    91     public: // New functions
       
    92           
       
    93     public: // Functions from base classes
       
    94         
       
    95     protected:  // New functions
       
    96         
       
    97     protected:  // Functions from base classes
       
    98         
       
    99     private:
       
   100         
       
   101     public:		//Data
       
   102             TCommand iCommand;
       
   103             TBuf8<KMaxCommandParamsLength2> iParamsPckg;
       
   104         
       
   105     protected:  // Data
       
   106         
       
   107     private:    // Data
       
   108         
       
   109     public:     // Friend classes
       
   110         
       
   111     protected:  // Friend classes
       
   112         
       
   113     private:    // Friend classes
       
   114         
       
   115     };
       
   116 
       
   117 // CLASS DECLARATION
       
   118 
       
   119 // DESCRIPTION
       
   120 // TCmdDef represents remote command
       
   121 class TEventDef
       
   122     {
       
   123     public:
       
   124         enum TEventCmdType
       
   125             {
       
   126             EEventCmd,
       
   127             EEventCmdCancel,
       
   128             };
       
   129     // Added constructor to TEventDef @js
       
   130         TEventDef():iStatus(NULL){};
       
   131             
       
   132     public:
       
   133         TEventCmdType   iType;
       
   134         TEventIf        iEvent;
       
   135         TRequestStatus* iStatus;
       
   136     };
       
   137 
       
   138 // DESCRIPTION
       
   139 // TTestInterference represents remote command
       
   140 class TTestInterference 
       
   141     {
       
   142     public:
       
   143         enum TOperation
       
   144             {
       
   145             EAppend,
       
   146             ERemove,
       
   147             };
       
   148     public:
       
   149         TTestInterference(){};
       
   150     public:
       
   151         // Thread id.
       
   152         TUint iThreadId;
       
   153         // Is operations append or remove.
       
   154         TOperation iOperation;
       
   155     };
       
   156 
       
   157 // DESCRIPTION
       
   158 // TTestMeasurement contains measurement related information
       
   159 // transfering between TestInterface and TestServer.
       
   160 class TTestMeasurement 
       
   161     {
       
   162     public:
       
   163         TTestMeasurement(){};
       
   164     public:
       
   165         // Struct for information.
       
   166         CSTIFTestMeasurement::TStifMeasurementStruct iMeasurementStruct;
       
   167 
       
   168     };
       
   169 
       
   170 // DESCRIPTION
       
   171 // TMeasurementHandling keeps information for measurement module
       
   172 // dynamic loading, types, etc.
       
   173 class TMeasurementHandling 
       
   174     {
       
   175     public:
       
   176         TMeasurementHandling() : iMeasurement( NULL ),
       
   177                                  iMeasurementModulePtr( NULL ){};
       
   178 
       
   179         ~TMeasurementHandling()
       
   180             { 
       
   181             delete iMeasurement;
       
   182             delete iMeasurementModulePtr;
       
   183             // After close test measurement's pointer is not valid anymore.
       
   184             if ( iMeasurementModule.Handle() )
       
   185                 { 
       
   186                 iMeasurementModule.Close(); 
       
   187                 }
       
   188             };
       
   189     public:
       
   190         RLibrary iMeasurementModule;
       
   191         CTestMeasurementFactory iMeasurementLibEntry;
       
   192         CSTIFTestMeasurementImplementation* iMeasurement;
       
   193         CSTIFTestMeasurement::TSTIFMeasurementType iMeasurementType;
       
   194         CSTIFTestMeasurementImplementation* iMeasurementModulePtr;
       
   195     };
       
   196 
       
   197 // CLASS DECLARATION
       
   198 
       
   199 // DESCRIPTION
       
   200 // CTestExecution represents a subsession object in the CTestServer.
       
   201 // A session may own any number of CTestExecution objects
       
   202 class CTestExecution
       
   203         :public CObject
       
   204     {
       
   205 
       
   206     public: // Enumerations
       
   207         enum TTestState
       
   208             {
       
   209             ENotStarted,
       
   210             EOnGoing,
       
   211             EFinished,
       
   212             ECancelled,
       
   213             };
       
   214         
       
   215         enum TRequestType
       
   216             {
       
   217             ERqPrint,
       
   218             ERqEvent,
       
   219             ERqSnd,
       
   220             ERqRcv,
       
   221             ERqInterference,
       
   222             ERqMeasurement,
       
   223             ERqCommand,
       
   224             };
       
   225 
       
   226         enum TTestThreadFailure
       
   227             {
       
   228             ETestThreadOk       = 0,
       
   229             ETestMemLeak        = 0x00000001,
       
   230             ETestRequestLeak    = 0x00000002,
       
   231             ETestHandleLeak     = 0x00000004,
       
   232             };
       
   233 
       
   234     private: // Enumerations
       
   235         // None
       
   236 
       
   237     public:  // Constructors and destructor
       
   238 
       
   239         /**
       
   240         * NewL is first phase of two-phased constructor.
       
   241         */
       
   242         static CTestExecution* NewL( CTestModule* aModuleSession, 
       
   243                                      TInt aCaseNumber, 
       
   244                                      const TFileName& aConfig
       
   245                                    );
       
   246 
       
   247         /**
       
   248         * Destructor
       
   249         */
       
   250         virtual ~CTestExecution();
       
   251 
       
   252     public: // New functions
       
   253 
       
   254         /**
       
   255         * Close Test Execution
       
   256         */
       
   257         TInt CloseTestExecution( const RMessage2& aMessage );
       
   258 
       
   259         /**
       
   260         * Run a test case
       
   261         */
       
   262         TInt RunTestCase( const RMessage2& aMessage );
       
   263 
       
   264         /**
       
   265         * Sets a print notification
       
   266         */
       
   267         TInt NotifyPrint( const RMessage2& aMessage );
       
   268 
       
   269         /**
       
   270         * Sets a event notification
       
   271         */
       
   272         TInt NotifyEvent( const RMessage2& aMessage );
       
   273 
       
   274         /**
       
   275         * Sets a RemoteCmd notification
       
   276         */
       
   277         TInt NotifyRemoteCmd( const RMessage2& aMessage );
       
   278 
       
   279         /**
       
   280         * Reads a RemoteCmd notification
       
   281         */
       
   282         TInt ReadRemoteCmdInfo( const RMessage2& aMessage );
       
   283 
       
   284         /**
       
   285         * Resumes a paused test case
       
   286         */
       
   287         TInt Resume( const RMessage2& aMessage );
       
   288 
       
   289         /**
       
   290         * Pauses ongoing test case
       
   291         */
       
   292         TInt Pause( const RMessage2& aMessage );
       
   293 
       
   294 
       
   295         /**
       
   296         * Cancels asynchronous request
       
   297         */
       
   298         TInt CancelRequestL( const RMessage2& aMessage );
       
   299 
       
   300 
       
   301         /**
       
   302         * Completes a print request. 
       
   303         */
       
   304         void DoNotifyPrint();
       
   305 
       
   306         /**
       
   307         * Completes a interference request. 
       
   308         */
       
   309         void DoNotifyInterference();
       
   310 
       
   311         /**
       
   312         * Completes a measurement request. 
       
   313         */
       
   314         TInt DoNotifyMeasurement();
       
   315 
       
   316         /**
       
   317         * Completes a print request. 
       
   318         */
       
   319         void DoErrorPrint();
       
   320 
       
   321         /**
       
   322         * Enables remote command receiving. 
       
   323         */
       
   324         void DoRemoteReceive();
       
   325 
       
   326         /**
       
   327         * Sends remote commands. 
       
   328         */
       
   329         void DoRemoteSend();
       
   330         
       
   331         /**
       
   332         * Completes a event request. 
       
   333         */
       
   334         TInt DoNotifyEvent();
       
   335 
       
   336         /**
       
   337         * Completes a event cancel request. 
       
   338         */
       
   339         void CancelEvent();
       
   340         
       
   341         /** 
       
   342         * Set thread State. 
       
   343         * This function can be called from test execution thread.
       
   344         */
       
   345         void SetThreadState( const TTestState aState );
       
   346         
       
   347         /**
       
   348         * Completes print request if print queue is empty
       
   349         */
       
   350         void CompletePrintRequestIfQueueEmpty();
       
   351 
       
   352         /**
       
   353         * Completes print request if print queue is empty
       
   354         */
       
   355         void CleanupEvents();
       
   356 
       
   357         /**
       
   358         * Completes test execution
       
   359         */
       
   360         void CompleteTestExecution( const TInt aCompletionCode, 
       
   361                                     const TFullTestResult::TCaseExecutionResult aCaseExecutionType,
       
   362                                     const TInt aCaseExecutionCode,
       
   363                                     const TInt aCaseResult,
       
   364                                     const TDesC& aText );
       
   365 
       
   366         /**
       
   367         * Unsets all pending state events.
       
   368         */
       
   369         void UnsetStateEvents();
       
   370 
       
   371         /**
       
   372         * Completes test execution
       
   373         */
       
   374         void CompleteTestExecution( const TInt aCompletionCode );
       
   375         
       
   376         /**
       
   377         * Current thread state.
       
   378         */
       
   379         TTestState ThreadState(){ return iThreadState; }
       
   380 
       
   381         /**
       
   382         * Cancels test(s) execution in special cases e.g. timeout, exit etc.
       
   383         */
       
   384         TInt CancelTestExecution();
       
   385 
       
   386         /**
       
   387         * Make sure that any of the test interference thread's won't stay
       
   388         * to run if test case is crashed of test interference object is not
       
   389         * deleted.
       
   390         */
       
   391         TInt KillTestinterferenceThread();
       
   392 
       
   393         /**
       
   394         * Make sure that any of the test measurement process's won't stay
       
   395         * to run if test case is crashed of test measurement object is not
       
   396         * deleted.
       
   397         */
       
   398         TInt KillTestMeasurement();
       
   399 
       
   400         /**
       
   401         * Executes command for ongoing test case.
       
   402         * Created to allow test case to kill itself.
       
   403         */
       
   404         TInt NotifyCommand(const RMessage2& aMessage);
       
   405 
       
   406         /**
       
   407         * Completes a command request.
       
   408         * Created to allow test case to kill itself.
       
   409         */
       
   410         TInt DoNotifyCommand();
       
   411 
       
   412         /**
       
   413         * Cancels command request.
       
   414         * Created to allow test case to kill itself.
       
   415         */
       
   416         TInt CancelCommandRequest();
       
   417 
       
   418         /**
       
   419          * Get test case arguments.
       
   420          */
       
   421         const TDesC& GetTestCaseArguments() const;
       
   422 
       
   423     public: // Functions that are called from test thread
       
   424 
       
   425         /**
       
   426         * Get mutex handles.
       
   427         */
       
   428         TInt EventMutexHandle(){ return iEventMutex.Handle(); };
       
   429         TInt SndMutexHandle(){ return iSndMutex.Handle(); };
       
   430         TInt RcvMutexHandle(){ return iRcvMutex.Handle(); };
       
   431         TInt PrintMutexHandle(){ return iPrintMutex.Handle(); };
       
   432         TInt InterferenceMutexHandle(){ return iInterferenceMutex.Handle(); };
       
   433         TInt MeasurementMutexHandle(){ return iMeasurementMutex.Handle(); };
       
   434         TInt CommandMutexHandle(){ return iCommandMutex.Handle(); };
       
   435 
       
   436         /**
       
   437         * Get semaphore handles.
       
   438         */
       
   439         TInt EventSemHandle(){ return iEventSem.Handle(); };
       
   440         TInt SndSemHandle(){ return iSndSem.Handle(); };
       
   441         TInt RcvSemHandle(){ return iRcvSem.Handle(); };
       
   442         //TInt ReceiverSemHandle(){ return iReceiverSem.Handle(); };
       
   443         TInt PrintSemHandle(){ return iPrintSem.Handle(); };
       
   444         TInt InterferenceSemHandle(){ return iInterferenceSem.Handle(); };
       
   445         TInt MeasurementSemHandle(){ return iMeasurementSem.Handle(); };
       
   446         TInt CommandSemHandle(){ return iCommandSem.Handle(); };
       
   447 
       
   448         /**
       
   449         * Set execution test thread id.
       
   450         */ 
       
   451         void SetTestThread( TThreadId aThreadId ){ iTestThreadId = aThreadId; };
       
   452 
       
   453         /**
       
   454         * Access to "shared" memory.
       
   455         */
       
   456         TFullTestResult& FullResult(){ return iFullResult; };
       
   457         TTestProgress& TestProgress(){ return iProgress; };
       
   458         TEventDef& EventDef(){ return iEventDef; };
       
   459         TCmdDef& SndInfo(){ return iCmdDef; };
       
   460         TCmdDef& RcvInfo(){ return iRcvCmdDef; };
       
   461         TInt& TestThreadFailure(){ return iTestThreadFailure; };
       
   462         TTestInterference& TestInterference(){ return iTestInterference; };
       
   463         TTestMeasurement& TestMeasurement(){ return iTestMeasurement; };
       
   464         CCommandDef& CommandDef(){ return *iCommandDef; };
       
   465 
       
   466         /**
       
   467         * Get specific TRequestStatus variable.
       
   468         */
       
   469         TRequestStatus* GetRq( TRequestType aType );
       
   470 
       
   471         /**
       
   472         * Get mutex handle.
       
   473         * This mutex meaning is to make sure that test complete and test
       
   474         * case cancel operations are not executed at the same time.
       
   475         */
       
   476         TInt TestThreadMutexHandle() { return iTestThreadMutex.Handle(); };
       
   477 
       
   478         const TDesC& GetConfigFileName() const { return iConfig; }
       
   479     public: // Functions from base classes
       
   480         // None
       
   481 
       
   482     protected:  // New functions
       
   483         // None
       
   484 
       
   485     protected:  // Functions from base classes
       
   486         // None
       
   487 
       
   488     private:
       
   489 
       
   490         /** 
       
   491         * C++ default constructor.
       
   492         */
       
   493         CTestExecution(); 
       
   494 
       
   495         /**
       
   496         * By default Symbian OS constructor is private.
       
   497         */
       
   498         void ConstructL( CTestModule* aModuleSession,
       
   499                          TInt aCaseNumber,
       
   500                          const TFileName& aConfig );
       
   501 
       
   502         /**
       
   503         * Cancels print request.
       
   504         */
       
   505         TInt CancelPrintRequest();
       
   506 
       
   507         /**
       
   508         * Cancels test interference request.
       
   509         */
       
   510         TInt CancelInterferenceRequest();
       
   511 
       
   512         /**
       
   513         * Cancels test execution request
       
   514         */
       
   515         TInt CancelTestRequest();
       
   516 
       
   517         /**
       
   518         * Cancel event request.
       
   519         */
       
   520         TInt CancelEventRequest();
       
   521 
       
   522         /**
       
   523         * Cancel event request.
       
   524         */
       
   525         TInt CancelRemoteCmdRequest();
       
   526 
       
   527         /**
       
   528         * Writes a print notification to client memory space.
       
   529         */
       
   530         TInt WritePrint( TTestProgress& aProgress );
       
   531 
       
   532         /**
       
   533         * Complete event TRequestStatus if pending. 
       
   534         */
       
   535         void CompleteEvent( TInt aError );
       
   536 
       
   537         /**
       
   538         * Handle event unsets. 
       
   539         */
       
   540         TInt UnsetEvent( TEventIf& aEvent, const RMessage2& aMessage );
       
   541 
       
   542         /**
       
   543         * Handle event request. 
       
   544         */
       
   545         TInt RequestEvent( TEventIf& aEvent );
       
   546 
       
   547         /**
       
   548         * Wait event request. 
       
   549         */
       
   550         TInt WaitEvent( TEventIf& aEvent, TRequestStatus* aStatus );
       
   551 
       
   552         /**
       
   553         * Handle event releases. 
       
   554         */
       
   555         TInt ReleaseEvent( TEventIf& aEvent );
       
   556 
       
   557         /**
       
   558         * Handle state events. 
       
   559         */
       
   560         TInt EventStateChange( TEventIf& aEvent );
       
   561 
       
   562         /**
       
   563         * Complete request in test thread.
       
   564         */
       
   565         void TestThreadRequestComplete( TRequestStatus* aStatus, TInt aCode );
       
   566 
       
   567     public:     // Data
       
   568         // None
       
   569     protected:  // Data
       
   570         // None
       
   571 
       
   572     private:    // Data
       
   573 
       
   574         // Pointers to things around
       
   575         CTestModule* iModuleSession;             // Session owning us
       
   576         CTestModuleContainer* iModuleContainer;  // Container used to execute this case
       
   577 
       
   578         // Test execution related members
       
   579         TInt iCaseNumber;                        // Case to be executed
       
   580         TPtr iConfig;                            // Configuration file name
       
   581         HBufC* iConfigNameBuffer;                // HBuffer for configuration file;
       
   582         HBufC* iTestCaseArgs;                    // HBuffer for test case arguments
       
   583 		
       
   584         RMessage2 iTestExeMessage;               // Test execution message
       
   585         TTestState iThreadState;                 // Thread state
       
   586 
       
   587         // Print related members
       
   588         RMutex          iPrintMutex;             // For iPrintSem semaphore handling
       
   589         RSemaphore      iPrintSem;               // Synchonize print queue access
       
   590         CPrintQueue*    iPrintQueue;             // Print queue
       
   591         RMessage2 iNotifyPrintMessage;           // Print notification message
       
   592         TBool iPrintNotifyAvailable;             // Is print notification available?
       
   593 
       
   594         // Event related members
       
   595         RMessage2 iNotifyEventMessage;           // Event nofitication message
       
   596         TBool           iEventNotifyAvailable;   // Is event notification available?
       
   597         RMutex          iEventMutex;             // For iEventSem semaphore handling
       
   598         RSemaphore      iEventSem;               // Signal event request availability
       
   599         TEventDef       iEventDef;
       
   600 
       
   601         // Remote command protocol related stuff
       
   602         RMessage2       iNotifyRemoteCmdMessage;// RemoteCmd notication message
       
   603         TBool           iRemoteSendAvailable;    // Is RemoteSend available
       
   604         RMutex          iSndMutex;               // For iSndSem semaphore handling
       
   605         RSemaphore      iSndSem;                 // Signal RemoteCmd request availability
       
   606         TThreadId       iTestThreadId;           // Thread id for receiver 
       
   607         RThread         iTestThread;
       
   608         TBool           iTestThreadOpen;
       
   609         TBool           iRemoteReceiveAvailable; // Is RemoteReceive available
       
   610         RMutex          iRcvMutex;               // For iRcvSem semaphore handling
       
   611         RSemaphore      iRcvSem;                 // Signal RemoteCmd request availability
       
   612         //RSemaphore      iReceiverSem;            // Signal testmodule request availability
       
   613         RPointerArray<HBufC8> iMessageQueue;
       
   614         
       
   615         TCmdDef         iCmdDef;
       
   616         TCmdDef         iRcvCmdDef;  
       
   617         TTestProgress   iProgress;
       
   618                 
       
   619 
       
   620         // Result with timestamp information
       
   621         TFullTestResult iFullResult;    
       
   622         TInt            iTestThreadFailure;         
       
   623         
       
   624         // Event array        
       
   625         RPointerArray<TEvent>           iEventArray; 
       
   626         // State event array
       
   627         RPointerArray<TDesC>            iStateEvents;  
       
   628         
       
   629         // Event handlers
       
   630         CPrintHandler*          iPrintHandler;
       
   631         CEventHandler*          iEventHandler;
       
   632         CSndHandler*            iSndHandler;
       
   633         CRcvHandler*            iRcvHandler;
       
   634         CInterferenceHandler*   iInterferenceHandler;
       
   635         CMeasurementHandler*    iMeasurementHandler;
       
   636         CCommandHandler*        iCommandHandler;
       
   637         
       
   638         // Test Interface related members
       
   639         RMutex          iInterferenceMutex; // For iInterferenceMutex semaphore handling
       
   640         RSemaphore      iInterferenceSem;   // Synchronize interference queue access
       
   641         TBool           iInterferenceNotifyAvailable; // Is interference notification
       
   642                                                       //available?
       
   643         // Test measurement related members
       
   644         RMutex          iMeasurementMutex;  // For iMeasurementMutex semaphore handling
       
   645         RSemaphore      iMeasurementSem;    // Synchronize measurement queue access
       
   646         TBool           iMeasurementNotifyAvailable; // Is measurement notification
       
   647                                                       //available?
       
   648         RMessage2 iNotifyInterferenceMessage; // Interference notification message
       
   649 
       
   650         TTestInterference   iTestInterference; // Struct for information
       
   651         // Array for handling test interference thread's kill in
       
   652         // panic etc. cases
       
   653         RArray<RThread>  iSTIFTestInterferenceArray;
       
   654 
       
   655         RMessage2 iNotifyMeasurementMessage; // Measurement notification message
       
   656 
       
   657         // Struct for information
       
   658         TTestMeasurement   iTestMeasurement;
       
   659         // Array for handling measurement
       
   660         RPointerArray<TMeasurementHandling>  iMeasurementHandlingArray;
       
   661 
       
   662         // This mutex meaning is to make sure that test complete and test
       
   663         // case cancel operations are not executed at the same time.
       
   664         RMutex          iTestThreadMutex; 
       
   665 
       
   666         // Command related members
       
   667         CCommandDef*     iCommandDef;             // Command definition (content)
       
   668         RMessage2       iNotifyCommandMessage;   // Command nofitication message
       
   669         TBool           iCommandNotifyAvailable; // Is command notification available?
       
   670         RMutex          iCommandMutex;           // For iCommandSem semaphore handling
       
   671         RSemaphore      iCommandSem;             // Signal command request availability
       
   672         
       
   673     public:     // Friend classes
       
   674         // None
       
   675         
       
   676     protected:  // Friend classes
       
   677         // None
       
   678     	
       
   679     private:    // Friend classes
       
   680         friend class CUnderTaker;
       
   681         friend class CPrintHandler;
       
   682         friend class CEventHandler;
       
   683         friend class CSndHandler;
       
   684         friend class CRcvHandler;
       
   685         friend class TEvent;
       
   686         friend class CInterferenceHandler;
       
   687         friend class CMeasurementHandler;
       
   688         friend class CCommandHandler;
       
   689     };
       
   690 
       
   691 #endif // TEST_SERVER_MODULE_IF_H
       
   692 
       
   693 // End of File