dosservices/tsrc/dsytesttool/dosservercontrol/src/tfdosservercontrol.cpp
changeset 0 4e1aa6a622a0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dosservices/tsrc/dsytesttool/dosservercontrol/src/tfdosservercontrol.cpp	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,1094 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Implementation of CTFDosServerControl class
+*
+*/
+
+
+// INCLUDE FILES
+#ifndef RD_STARTUP_CHANGE
+#include <sysstartup.h>
+#endif // RD_STARTUP_CHANGE
+
+#include "ctffactory.h"
+#include "tftypes.h"
+#include <psvariables.h>
+#include "dsytesttooltrace.h"
+#include "dsyenums.h"
+#include "ctfdosservercontrol.h"
+#include "ctfdosservercontroltestcase.h"
+#include "ctfdoseventlistener.h"
+
+
+// -----------------------------------------------------------------------------
+// GetDosServerControl
+// -----------------------------------------------------------------------------
+EXPORT_C MTFDosServerControl* GetDosServerControl( void )
+    {
+    CTFStub* stub = CTFFactory::Stub( KTFStubTypeDosServerControl );
+    return STATIC_CAST( CTFDosServerControl*, stub );
+    }
+
+
+// -----------------------------------------------------------------------------
+// MTFDosServerControl::MTFDosServerControl
+// -----------------------------------------------------------------------------
+MTFDosServerControl::MTFDosServerControl( void )
+    {
+    }
+    
+    
+// -----------------------------------------------------------------------------
+// MTFDosServerControl::~MTFDosServerControl
+// -----------------------------------------------------------------------------
+MTFDosServerControl::~MTFDosServerControl( void )
+    {
+    }
+    
+
+CTFDosServerControl::CTFDosServerControl( void )
+: CTFStub( KTFStubTypeDosServerControl )
+    {
+    }
+    
+//lint -e1740 Pointer not directly deleted by destructor
+CTFDosServerControl::~CTFDosServerControl( void )
+    {
+    ResetDosServices();
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFDosServerControl::~CTFDosServerControl() - DosServer connection closed" ) ) );
+    }
+//lint +e1740    
+    
+void CTFDosServerControl::InitializeL( void )
+    {
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFDosServerControl::InitializeL()" ) ) );
+
+    User::LeaveIfError( iDosServer.Connect() );
+    iEventListener = new ( ELeave ) CTFDosServerEventListener( iDosServer );
+    TRegisterEvent eventList[] = 
+        {
+#ifndef RD_STARTUP_CHANGE       
+            { KNotifySelfTestStatus, sizeof ( TInt ), EQueue },
+            { KDoMtcInitiatedShutdown, sizeof ( TInt ), EQueue },
+            { KPhonePowerOn, 0, EQueue },
+#endif //RD_STARTUP_CHANGE
+
+#ifndef RD_STARTUP_CHANGE
+            { KSimReady, sizeof ( TInt ), EQueue },
+            { KSimChanged, sizeof ( TInt ), EQueue },
+            { KSimLockStatus, sizeof ( TInt ), EQueue },
+            { KSimState, sizeof ( TInt ), EQueue },
+            { KCallsForwardingStatus, sizeof ( TInt ), EQueue },
+            { KVoiceMailStatus, sizeof ( TInt ), EQueue },
+            { KFaxMessage, sizeof ( TInt ), EQueue },
+            { KEmailMessage, sizeof ( TInt ), EQueue },
+#endif //RD_STARTUP_CHANGE
+
+     //       { KNetworkBars, sizeof ( TInt ), EQueue },
+
+#ifndef RD_STARTUP_CHANGE
+            { KSecurityCode, sizeof ( TInt ), EQueue },
+#endif //RD_STARTUP_CHANGE
+
+#ifndef RD_STARTUP_CHANGE
+            { KCurrentSimOwnedStatus, sizeof ( TInt ), EQueue },
+#endif //RD_STARTUP_CHANGE
+
+#ifndef __ACCESSORY_FW
+            { KAudioLinkOpenReq, sizeof ( TInt ), EQueue },
+            { KAudioLinkCloseReq, sizeof ( TInt ), EQueue },
+            { KActivateVoiceRecognitionReq, sizeof ( TInt ), EQueue },
+            { KAbortVoiceRecognitionReq, sizeof ( TInt ), EQueue },
+            { KVoiceRecognitionStatusReq, sizeof ( TInt ), EQueue },
+            { KQuerySpeedDialNumberReq, sizeof ( TInt ), EQueue },
+            { KQueryLastDialledVoiceNumberReq, sizeof ( TInt ), EQueue },
+            { KAccessoryModeChangedInd, sizeof ( TInt ), EQueue },
+            { KBTAccessoryModeChangedInd, sizeof ( TInt ), EQueue },
+            { KAccessorySpeakerVolumeSetInd, sizeof ( TInt ), EQueue },
+            { KServiceLevelConnEstablishedInd, sizeof ( TInt ), EQueue },
+            { KHeadsetButtonChanged, sizeof ( TInt ), EQueue },
+            { KHandsfreeModeChanged, sizeof ( TInt ), EQueue },
+            { KOutputVolumeLevelChanged, sizeof ( TInt ), EQueue },
+#endif //__ACCESSORY_FW
+            
+#ifndef RD_STARTUP_CHANGE
+            { KSmsStorageStatusChanged, sizeof ( TDosSmsStorageStatus ), EQueue },
+#endif // RD_STARTUP_CHANGE
+
+#ifndef __ACCESSORY_FW
+            { KAccessoryModeChanged, sizeof ( TInt ), EQueue }
+#endif //__ACCESSORY_FW
+        };
+    iEventListener->StartListeningL( eventList, sizeof ( eventList ) / sizeof ( TRegisterEvent ) );
+    iInitialized = ETrue;
+
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFDosServerControl::InitializeL - return" ) ) );
+    }
+
+void CTFDosServerControl::ResetDosServices( void )
+    {
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFDosServerStub::ResetDosServices()" ) ) );
+
+    if ( iEventListener != NULL )
+        {
+        iEventListener->Stop();
+        delete iEventListener;
+        }
+#ifndef RD_STARTUP_CHANGE
+    if ( iDosSysUtils != NULL )
+        {
+        iDosSysUtils->Close();
+        iDosSysUtils = NULL;
+        }
+    if ( iDosHelper != NULL )
+        {
+        iDosHelper->Close();
+        iDosHelper = NULL;
+        }
+    if ( iDosMtc != NULL )
+        {
+        iDosMtc->Close();
+        iDosMtc = NULL;
+        }
+    if ( iDosSelfTest != NULL )
+        {
+        iDosSelfTest->Close();
+        iDosSelfTest = NULL;
+        }
+#endif //RD_STARTUP_CHANGE 
+
+    if ( iDosSae != NULL )
+        {
+        iDosSae->Close();
+        iDosSae = NULL;
+        }        
+#ifndef __ACCESSORY_FW
+    if ( iDosBTAudio != NULL )
+        {
+        iDosBTAudio->Close();
+        iDosBTAudio = NULL;
+        }
+#endif //__ACCESSORY_FW
+    if ( iDosExtension != NULL )
+        {
+        iDosExtension->Close();
+        iDosExtension = NULL;
+        }
+#ifndef __ACCESSORY_FW
+    if ( iDosAccessory != NULL )
+        {
+        iDosAccessory->Close();
+        iDosAccessory = NULL;
+        }
+    if ( iDosAudio != NULL )
+        {
+        iDosAudio->Close();
+        iDosAudio = NULL;
+        }
+#endif //__ACCESSORY_FW
+
+    iDosServer.Close();
+    iInitialized = EFalse;
+
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFDosServerStub::ResetDosServices() - Success" ) ) );
+    }
+
+void CTFDosServerControl::CallDosFunctionL( TTFDosServerControlTestCaseState& aParameter )
+    {
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFDosServerControl::CallDosFunctionL(%d, %d, %d)" ), aParameter.iDosFunction, aParameter.iArg1, aParameter.iArg2 ) );
+
+    // DosServer connection needs to be opened.
+    if ( !iInitialized )
+        {
+        InitializeL();
+        }
+
+    TInt retval = KTFErrDosServiceMissing;
+    switch ( aParameter.iDosFunction )
+        {
+        
+#ifndef RD_STARTUP_CHANGE       
+        case ETFDosSysUtils_Open:
+            if ( iDosSysUtils == NULL )
+                {
+                iDosSysUtils = new ( ELeave ) RDosSysUtils();
+                retval = iDosSysUtils->Open( iDosServer );
+                }
+            else
+                {
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosSysUtils_GetSimLanguage:
+            TRACE_ASSERT( iDosSysUtils != NULL );
+            if ( iDosSysUtils != NULL )
+                {
+                retval = iDosSysUtils->GetSimLanguage( aParameter.iArg1 );
+                }
+            break;
+        case ETFDosSysUtils_SetDosAlarm:
+            TRACE_ASSERT( iDosSysUtils != NULL );
+            if ( iDosSysUtils != NULL )
+                {
+                if ( aParameter.iArg1 != 0 )
+                    {
+                    TTime time;
+                    time.HomeTime();
+                    if ( aParameter.iArg1 > 0 )
+                        {
+                        TTimeIntervalMinutes interval = aParameter.iArg1;
+                        time += interval;
+                        }
+                    else
+                        {
+                        TTimeIntervalMinutes interval = 0 - aParameter.iArg1;
+                        time -= interval;
+                        }
+                    time.RoundUpToNextMinute();
+                    if ( aParameter.iArg2 != 0 )
+                        {
+                        TTimeIntervalSeconds interval = aParameter.iArg2;
+                        time += interval;
+                        }
+                    retval = iDosSysUtils->SetDosAlarm( &time );
+                    }
+                else
+                    {
+                    retval = iDosSysUtils->SetDosAlarm( NULL );
+                    }
+                }
+            break;
+        case ETFDosSysUtils_PerformDosRfs:
+            TRACE_ASSERT( iDosSysUtils != NULL );
+            if ( iDosSysUtils != NULL )
+                {
+                }
+            break;
+        case ETFDosSysUtils_Close:
+            TRACE_ASSERT( iDosSysUtils != NULL );
+            if ( iDosSysUtils != NULL )
+                {
+                iDosSysUtils->Close();
+                delete iDosSysUtils;
+                iDosSysUtils = NULL;
+                }
+            retval = KErrNone;
+            break;
+    
+        case ETFDosHelper_Open:
+            if ( iDosHelper == NULL )
+                {
+                iDosHelper = new ( ELeave ) RDosHelper();
+                retval = iDosHelper->Open( iDosServer );
+                }
+            else
+                {
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosHelper_GetStartupReason:
+            TRACE_ASSERT( iDosHelper != NULL );
+            if ( iDosHelper != NULL )
+                {
+                retval = iDosHelper->GetStartupReason( aParameter.iArg1 );
+                }
+            break;
+        case ETFDosHelper_GetSWStartupReason:
+            TRACE_ASSERT( iDosHelper != NULL );
+            if ( iDosHelper != NULL )
+                {
+                TInt16 temp;
+                retval = iDosHelper->GetSWStartupReason( temp );
+                aParameter.iArg1 = temp;
+                }
+            break;
+        case ETFDosHelper_SetSWStartupReason:
+            TRACE_ASSERT( iDosHelper != NULL );
+            if ( iDosHelper != NULL )
+                {
+                retval = iDosHelper->SetSWStartupReason( ( TInt16 )aParameter.iArg1 );
+                }
+            break;
+        case ETFDosHelper_HiddenReset:
+            TRACE_ASSERT( iDosHelper != NULL );
+            if ( iDosHelper != NULL )
+                {
+                aParameter.iArg1 = iDosHelper->HiddenReset();
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosHelper_GetRTCStatus:
+            TRACE_ASSERT( iDosHelper != NULL );
+            if ( iDosHelper != NULL )
+                {
+                retval = iDosHelper->GetRTCStatus( aParameter.iArg1 );
+                }
+            break;
+        /*case ETFDosHelper_GenerateGripEvent:
+            TRACE_ASSERT( iDosHelper != NULL );
+            if ( iDosHelper != NULL )
+                {
+                retval = iDosHelper->GenerateGripEvent();
+                }
+            break;*/
+        case ETFDosHelper_Close:
+            TRACE_ASSERT( iDosHelper != NULL );
+            if ( iDosHelper != NULL )
+                {
+                iDosHelper->Close();
+                delete iDosHelper;
+                iDosHelper = NULL;
+                }
+            retval = KErrNone;
+            break;
+    
+        case ETFDosMtc_Open:
+            if ( iDosMtc == NULL )
+                {
+                iDosMtc = new ( ELeave ) RDosMtc();
+                retval = iDosMtc->Open( iDosServer );
+                }
+            else
+                {
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosMtc_PowerOn:
+            TRACE_ASSERT( iDosMtc != NULL );
+            if ( iDosMtc != NULL )
+                {
+                retval = iDosMtc->PowerOn();
+                }
+            break;
+        case ETFDosMtc_PowerOff:
+            TRACE_ASSERT( iDosMtc != NULL );
+            if ( iDosMtc != NULL )
+                {
+                retval = iDosMtc->PowerOff();
+                }
+            break;
+        case ETFDosMtc_DosSync:
+            TRACE_ASSERT( iDosMtc != NULL );
+            if ( iDosMtc != NULL )
+                {
+                retval = iDosMtc->DosSync();
+                }
+            break;
+        case ETFDosMtc_ResetGenerate:
+            TRACE_ASSERT( iDosMtc != NULL );
+            if ( iDosMtc != NULL )
+                {
+                retval = iDosMtc->ResetGenerate();
+                }
+            break;
+        case ETFDosMtc_SetState:
+            TRACE_ASSERT( iDosMtc != NULL );
+            if ( iDosMtc != NULL )
+                {
+                retval = iDosMtc->SetState( aParameter.iArg1 );
+                }
+            break;
+        case ETFDosMtc_SetStateFlag:
+            TRACE_ASSERT( iDosMtc != NULL );
+            if ( iDosMtc != NULL )
+                {
+                retval = iDosMtc->SetStateFlag( ( TDosStateFlag )aParameter.iArg1 );
+                }
+            break;
+        case ETFDosMtc_GetStateFlag:
+            TRACE_ASSERT( iDosMtc != NULL );
+            if ( iDosMtc != NULL )
+                {
+                TDosStateFlag flag;
+                retval = iDosMtc->GetStateFlag( flag );
+                aParameter.iArg1 = flag;
+                }
+            break;
+        case ETFDosMtc_Close:
+            TRACE_ASSERT( iDosMtc != NULL );
+            if ( iDosMtc != NULL )
+                {
+                iDosMtc->Close();
+                delete iDosMtc;
+                iDosMtc = NULL;
+                }
+            retval = KErrNone;
+            break;
+    
+        case ETFDosSelfTest_Open:
+            if ( iDosSelfTest == NULL )
+                {
+                iDosSelfTest = new ( ELeave ) RDosSelfTest();
+                retval = iDosSelfTest->Open( iDosServer );
+                }
+            else
+                {
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosSelfTest_PerformSelfTest:
+            TRACE_ASSERT( iDosSelfTest != NULL );
+            if ( iDosSelfTest != NULL )
+                {
+                retval = iDosSelfTest->PerformSelfTest();
+                }
+            break;
+        case ETFDosSelfTest_Close:
+            TRACE_ASSERT( iDosSelfTest != NULL );
+            if ( iDosSelfTest != NULL )
+                {
+                iDosSelfTest->Close();
+                delete iDosSelfTest;
+                iDosSelfTest = NULL;
+                }
+            retval = KErrNone;
+            break;
+#endif // RD_STARTUP_CHANGE
+
+        case ETFDosSae_Open:
+            if ( iDosSae == NULL )
+                {
+                iDosSae = new ( ELeave ) RDosSae();
+                retval = iDosSae->Open( iDosServer );
+                }
+            else
+                {
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosSae_StartSae:
+            TRACE_ASSERT( iDosSae != NULL );
+            if ( iDosSae != NULL )
+                {
+                retval = iDosSae->StartSae();
+                }
+            break;
+        case ETFDosSae_Close:
+            TRACE_ASSERT( iDosSae != NULL );
+            if ( iDosSae != NULL )
+                {
+                iDosSae->Close();
+                delete iDosSae;
+                iDosSae = NULL;
+                }
+            retval = KErrNone;
+            break;
+
+#ifndef __ACCESSORY_FW 
+        case ETFDosBTAudio_Open:
+            if ( iDosBTAudio == NULL )
+                {
+                iDosBTAudio = new ( ELeave ) RDosBTAudio();
+                retval = iDosBTAudio->Open( iDosServer );
+                }
+            else
+                {
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosBTAudio_AttachAudioAccessoryReq:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_CancelAttachReq:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_DetachAudioAccessoryReq:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_CancelDetachReq:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_AudioLinkOpenResp:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_AudioLinkCloseResp:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_ActivateVoiceRecognitionResp:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_AbortVoiceRecognitionResp:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_VoiceRecognitionStatusResp:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_QuerySpeedDialNumberResp:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_QueryLastDialledVoiceNumberResp:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_AudioLinkOpenInd:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_AudioLinkCloseInd:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_VoiceRecognitionStatusInd:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                }
+            break;
+        case ETFDosBTAudio_Close:
+            TRACE_ASSERT( iDosBTAudio != NULL );
+            if ( iDosBTAudio != NULL )
+                {
+                iDosBTAudio->Close();
+                delete iDosBTAudio;
+                iDosBTAudio = NULL;
+                }
+            retval = KErrNone;
+            break;
+#endif // __ACCESSORY_FW 
+    
+        case ETFDosExtension_Open:
+            if ( iDosExtension == NULL )
+                {
+                iDosExtension = new ( ELeave ) RTFDosExtension();
+                retval = iDosExtension->Open( iDosServer );
+                }
+            else
+                {
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosExtension_CallFunction:
+            TRACE_ASSERT( iDosExtension != NULL );
+            if ( iDosExtension != NULL )
+                {
+                retval = iDosExtension->CallSyncDosExtFunction( aParameter.iArg1, ( TAny* )&aParameter.iArg2, sizeof ( aParameter.iArg2 ), ETrue );
+                }
+            break;
+        case ETFDosExtension_CallFunctionAndComplete:
+            TRACE_ASSERT( iDosExtension != NULL );
+            if ( iDosExtension != NULL )
+                {
+                TRequestStatus status;
+                retval = iDosExtension->CallAsyncDosExtFunction( status, aParameter.iArg1, ( TAny* )&aParameter.iArg2, sizeof ( TInt ), ETrue );
+                }
+            break;
+        case ETFDosExtension_Close:
+            TRACE_ASSERT( iDosExtension != NULL );
+            if ( iDosExtension != NULL )
+                {
+                iDosExtension->Close();
+                delete iDosExtension;
+                iDosExtension = NULL;
+                }
+            retval = KErrNone;
+            break;
+    
+#ifndef __ACCESSORY_FW    
+        case ETFDosAccessory_Open:
+            if ( iDosAccessory == NULL )
+                {
+                iDosAccessory = new ( ELeave ) RDosAccessory();
+                retval = iDosAccessory->Open( iDosServer );
+                }
+            else
+                {
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosAccessory_GetAccessoryMode:
+            TRACE_ASSERT( iDosAccessory != NULL );
+            if ( iDosAccessory != NULL )
+                {
+                TDosAccessoryMode acc;
+                retval = iDosAccessory->GetAccessoryMode( acc );
+                if ( retval == KErrNone )
+                    {
+                    aParameter.iArg1 = acc;
+                    }
+                }
+            break;
+        case ETFDosAccessory_SetLoopSetModeState:
+            TRACE_ASSERT( iDosAccessory != NULL );
+            if ( iDosAccessory != NULL )
+                {
+                retval = iDosAccessory->SetLoopSetModeState( ( EPSAccLpsMode )aParameter.iArg1 );
+                }
+            break;
+        case ETFDosAccessory_GetLoopSetModeState:
+            TRACE_ASSERT( iDosAccessory != NULL );
+            if ( iDosAccessory != NULL )
+                {
+                EPSAccLpsMode acc;
+                retval = iDosAccessory->GetLoopSetModeState( acc );
+                if ( retval == KErrNone )
+                    {
+                    aParameter.iArg1 = acc;
+                    }
+                }
+            break;
+            
+        case ETFDosAccessory_Close:
+            TRACE_ASSERT( iDosAccessory != NULL );
+            if ( iDosAccessory != NULL )
+                {
+                iDosAccessory->Close();
+                delete iDosAccessory;
+                iDosAccessory = NULL;
+                }
+            retval = KErrNone;
+            break;
+#endif // __ACCESSORY_FW    
+            
+    
+#ifndef __ACCESSORY_FW    
+        case ETFDosAudio_Open:
+            if ( iDosAudio == NULL )
+                {
+                iDosAudio = new ( ELeave ) RDosAudio();
+                retval = iDosAudio->Open( iDosServer );
+                }
+            else
+                {
+                retval = KErrNone;
+                }
+            break;
+        case ETFDosAudio_SetHandsfreeMode:
+            TRACE_ASSERT( iDosAudio != NULL );
+            if ( iDosAudio != NULL )
+                {
+                retval = iDosAudio->SetHandsfreeMode( ( EPSHandsFreeMode )aParameter.iArg1 );
+                }
+            break;
+        case ETFDosAudio_GetHandsfreeMode:
+            TRACE_ASSERT( iDosAudio != NULL );
+            if ( iDosAudio != NULL )
+                {
+                EPSHandsFreeMode hf;
+                retval = iDosAudio->GetHandsfreeMode( hf );
+                if ( retval == KErrNone )
+                    {
+                    aParameter.iArg1 = hf;
+                    }
+                }
+            break;
+        
+        case ETFDosAudio_GetOutputVolume:
+            TRACE_ASSERT( iDosAudio != NULL );
+            if ( iDosAudio != NULL )
+                {
+                retval = iDosAudio->GetOutputVolume( aParameter.iArg1 );
+                }
+            break;
+        case ETFDosAudio_SetOutputVolume:
+            TRACE_ASSERT( iDosAudio != NULL );
+            if ( iDosAudio != NULL )
+                {
+                retval = iDosAudio->SetOutputVolume( aParameter.iArg1 );
+                }
+            break;
+        case ETFDosAudio_Close:
+            TRACE_ASSERT( iDosAudio != NULL );
+            if ( iDosAudio != NULL )
+                {
+                iDosAudio->Close();
+                delete iDosAudio;
+                iDosAudio = NULL;
+                }
+            retval = KErrNone;
+            break;
+#endif // __ACCESSORY_FW    
+            
+        default:
+            TRACE_ASSERT_ALWAYS;
+            break;
+        }
+    User::LeaveIfError( retval );
+    }
+
+// Getters return 0, since they are not used in parameter tests
+TInt CTFDosServerControl::ParameterCount( TTFDosFunction aFunction ) const
+    {
+    TInt retval = 0;
+    switch ( aFunction )
+        {
+#ifndef RD_STARTUP_CHANGE
+        case ETFDosSysUtils_Open:
+        case ETFDosHelper_Open:
+        case ETFDosMtc_Open:
+        case ETFDosSelfTest_Open:
+        case ETFDosSysUtils_Close:
+        case ETFDosHelper_Close:
+        case ETFDosMtc_Close:
+        case ETFDosSelfTest_Close:
+#endif // RD_STARTUP_CHANGE
+
+        case ETFDosSae_Open:
+        case ETFDosSae_Close:
+
+#ifndef __ACCESSORY_FW
+        case ETFDosBTAudio_Open:
+        case ETFDosBTAudio_Close:
+#endif // __ACCESSORY_FW
+
+        case ETFDosExtension_Open:
+        case ETFDosExtension_Close:
+        
+#ifndef __ACCESSORY_FW       
+        case ETFDosAccessory_Open:
+        case ETFDosAudio_Open:
+        case ETFDosAccessory_Close:
+        case ETFDosAudio_Close:
+#endif // __ACCESSORY_FW        
+            break;
+            
+#ifndef RD_STARTUP_CHANGE
+        case ETFDosSysUtils_SetDosAlarm:
+        case ETFDosSysUtils_PerformDosRfs:
+            retval = 1;
+            break;
+        case ETFDosHelper_GetStartupReason:
+        case ETFDosHelper_GetSWStartupReason:
+            break;
+        case ETFDosHelper_SetSWStartupReason:
+            retval = 1;
+            break;
+        case ETFDosHelper_HiddenReset:
+        case ETFDosHelper_GetRTCStatus:
+        //case ETFDosHelper_GenerateGripEvent:
+        case ETFDosMtc_PowerOn:
+        case ETFDosMtc_PowerOff:
+        case ETFDosMtc_DosSync:
+        case ETFDosMtc_ResetGenerate:
+            break;
+        case ETFDosMtc_SetState:
+        case ETFDosMtc_SetStateFlag:
+            retval = 1;
+            break;
+        case ETFDosMtc_GetStateFlag:
+        case ETFDosSelfTest_PerformSelfTest:
+            break;
+#endif // RD_STARTUP_CHANGE
+        
+        case ETFDosSae_StartSae:
+            break;
+
+#ifndef __ACCESSORY_FW 
+        case ETFDosBTAudio_AttachAudioAccessoryReq:
+            break;
+        case ETFDosBTAudio_CancelAttachReq:
+            break;
+        case ETFDosBTAudio_DetachAudioAccessoryReq:
+            break;
+        case ETFDosBTAudio_CancelDetachReq:
+            break;
+        case ETFDosBTAudio_AudioLinkOpenResp:
+            break;
+        case ETFDosBTAudio_AudioLinkCloseResp:
+            break;
+        case ETFDosBTAudio_ActivateVoiceRecognitionResp:
+            break;
+        case ETFDosBTAudio_AbortVoiceRecognitionResp:
+            break;
+        case ETFDosBTAudio_VoiceRecognitionStatusResp:
+            break;
+        case ETFDosBTAudio_QuerySpeedDialNumberResp:
+            break;
+        case ETFDosBTAudio_QueryLastDialledVoiceNumberResp:
+            break;
+        case ETFDosBTAudio_AudioLinkOpenInd:
+            break;
+        case ETFDosBTAudio_AudioLinkCloseInd:
+            break;
+        case ETFDosBTAudio_VoiceRecognitionStatusInd:
+            break;
+#endif // __ACCESSORY_FW 
+    
+        case ETFDosExtension_CallFunction:
+            break;
+        case ETFDosExtension_CallFunctionAndComplete:
+            break;
+    
+#ifndef __ACCESSORY_FW    
+        case ETFDosAccessory_GetAccessoryMode:
+            break;
+        case ETFDosAccessory_SetLoopSetModeState:
+            retval = 1;
+            break;
+        case ETFDosAccessory_GetLoopSetModeState:
+            break;
+
+        case ETFDosAudio_SetHandsfreeMode:
+            retval = 1;
+            break;
+        case ETFDosAudio_GetHandsfreeMode:
+            break;
+        
+        case ETFDosAudio_GetOutputVolume:
+            break;
+        case ETFDosAudio_SetOutputVolume:
+            retval = 1;
+            break;
+#endif // __ACCESSORY_FW    
+            
+        default:
+            TRACE_ASSERT_ALWAYS;
+            break;
+        }
+    return retval;
+    }
+    
+
+TBool CTFDosServerControl::ParameterBounds( TTFDosFunction aFunction, TInt* aMin, TInt* aMax ) const
+    {
+    TBool retval = EFalse;
+    TRACE_ASSERT( aMin != NULL && aMax != NULL );
+    if ( aMin != NULL && aMax != NULL )
+        {
+        switch ( aFunction )
+            {
+#ifndef RD_STARTUP_CHANGE
+            case ETFDosSysUtils_Open:
+            case ETFDosHelper_Open:
+            case ETFDosMtc_Open:
+            case ETFDosSelfTest_Open:
+            case ETFDosSysUtils_Close:
+            case ETFDosHelper_Close:
+            case ETFDosMtc_Close:
+            case ETFDosSelfTest_Close:
+#endif // RD_STARTUP_CHANGE
+
+            case ETFDosSae_Open:
+            case ETFDosExtension_Open:
+
+#ifndef __ACCESSORY_FW    
+            case ETFDosBTAudio_Open:
+            case ETFDosBTAudio_Close:
+            case ETFDosAccessory_Open:
+            case ETFDosAudio_Open:
+            case ETFDosAccessory_Close:
+            case ETFDosAudio_Close:
+#endif // __ACCESSORY_FW    
+
+            case ETFDosSae_Close:
+            case ETFDosExtension_Close:
+                break;
+    
+#ifndef RD_STARTUP_CHANGE
+            case ETFDosSysUtils_GetSimLanguage:
+                break;
+            case ETFDosSysUtils_SetDosAlarm:
+                // Not supported, too many time values to test.
+                break;
+            case ETFDosSysUtils_PerformDosRfs:
+                retval = ETrue;
+                *aMin = ERfsNormal;
+                *aMax = ERfsDeep;
+                break;
+    
+            case ETFDosHelper_GetStartupReason:
+                break;
+            case ETFDosHelper_GetSWStartupReason:
+                break;
+            case ETFDosHelper_SetSWStartupReason:
+                retval = ETrue;
+                *aMin = ESWNone;
+                *aMax = ESWRestoreFactorySetDeep;
+                break;
+            case ETFDosHelper_HiddenReset:
+                break;
+            case ETFDosHelper_GetRTCStatus:
+                break;
+            //case ETFDosHelper_GenerateGripEvent:
+            //    break;
+    
+            case ETFDosMtc_PowerOn:
+                break;
+            case ETFDosMtc_PowerOff:
+                break;
+            case ETFDosMtc_DosSync:
+                break;
+            case ETFDosMtc_ResetGenerate:
+                break;
+            case ETFDosMtc_SetState:
+                retval = ETrue;
+                *aMin = ESysApMtcChargingState;
+                *aMax = ESysApMtcRfInactiveState;
+                break;
+            case ETFDosMtc_SetStateFlag:
+                retval = ETrue;
+                *aMin = EDosOfflineStateFlagFalse;
+                *aMax = EDosOfflineStateFlagTrue;
+                break;
+            case ETFDosMtc_GetStateFlag:
+                break;
+    
+            case ETFDosSelfTest_PerformSelfTest:
+                break;
+#endif // RD_STARTUP_CHANGE
+    
+            case ETFDosSae_StartSae:
+                break;
+
+#ifndef __ACCESSORY_FW 
+            case ETFDosBTAudio_AttachAudioAccessoryReq:
+                break;
+            case ETFDosBTAudio_CancelAttachReq:
+                break;
+            case ETFDosBTAudio_DetachAudioAccessoryReq:
+                break;
+            case ETFDosBTAudio_CancelDetachReq:
+                break;
+            case ETFDosBTAudio_AudioLinkOpenResp:
+                break;
+            case ETFDosBTAudio_AudioLinkCloseResp:
+                break;
+            case ETFDosBTAudio_ActivateVoiceRecognitionResp:
+                break;
+            case ETFDosBTAudio_AbortVoiceRecognitionResp:
+                break;
+            case ETFDosBTAudio_VoiceRecognitionStatusResp:
+                break;
+            case ETFDosBTAudio_QuerySpeedDialNumberResp:
+                break;
+            case ETFDosBTAudio_QueryLastDialledVoiceNumberResp:
+                break;
+            case ETFDosBTAudio_AudioLinkOpenInd:
+                break;
+            case ETFDosBTAudio_AudioLinkCloseInd:
+                break;
+            case ETFDosBTAudio_VoiceRecognitionStatusInd:
+                break;
+#endif // __ACCESSORY_FW 
+    
+            case ETFDosExtension_CallFunction:
+                break;
+            case ETFDosExtension_CallFunctionAndComplete:
+                break;
+    
+#ifndef __ACCESSORY_FW    
+            case ETFDosAccessory_GetAccessoryMode:
+                break;
+            case ETFDosAccessory_SetLoopSetModeState:
+                retval = ETrue;
+                *aMin = EPSAccLpsOff;
+                *aMax = EPSAccTty;
+                break;
+            case ETFDosAccessory_GetLoopSetModeState:
+                break;
+
+            case ETFDosAudio_SetHandsfreeMode:
+                retval = ETrue;
+                *aMin = EPSIhfOff;
+                *aMax = EPSIhfOn;
+                break;
+            case ETFDosAudio_GetHandsfreeMode:
+                break;
+
+            case ETFDosAudio_GetOutputVolume:
+                break;
+            case ETFDosAudio_SetOutputVolume:
+                retval = ETrue;
+                *aMin = 0;
+                *aMax = 9;
+                break;
+#endif // __ACCESSORY_FW    
+                
+            default:
+                TRACE_ASSERT_ALWAYS;
+                break;
+            }
+        }
+    else
+        {
+        retval = KErrArgument;
+        }
+    return retval;
+    }
+
+void CTFDosServerControl::NotifyDosEvent( TInt aEvent, TInt aParameter )
+    {
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFDosServerControl::NotifyDosEvent( %d, %d )" ), aEvent, aParameter ) );
+    CTFDosServerControlTestCase* testCase = STATIC_CAST( CTFDosServerControlTestCase*, CurrentTestCase() );
+    TRACE_ASSERT( testCase != NULL );
+    if ( testCase != NULL )
+        {
+        testCase->NotifyDosEvent( aEvent, aParameter );
+        }
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - CTFDosServerControl::NotifyDosEvent - return" ) ) );
+    }
+    
+
+TInt RTFDosExtension::CallSyncDosExtFunction( const TInt& aFunc, TAny* aParam = NULL, TInt aParLength = 0, TBool aAutoComplete = ETrue )
+    {
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - RTFDosExtension::CallSyncDosExtFunction(0x%x, 0x%x, 0x%x, 0x%x)" ), aFunc, aParam, aParLength, aAutoComplete ) );
+    TExtensionParPckg package;
+    package().iFunc = aFunc;
+    package().iParLength = aParLength;
+    package().iAutoComplete = aAutoComplete;
+    TPtr8 ptr( ( TUint8* )aParam, aParLength, aParLength );
+    TInt result = CallFunction( package, ptr );
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - RTFDosExtension::CallSyncDosExtFunction - return 0x%x" ), result ) );
+    return result;
+    }
+
+
+TInt RTFDosExtension::CallAsyncDosExtFunction( TRequestStatus& aStatus, TInt aFunc, TAny* aParam = NULL, TInt aParLength = 0, TBool aAutoComplete = EFalse )
+    {
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - RTFDosExtension::CallAsyncDosExtFunction(0x%x, 0x%x, 0x%x, 0x%x, 0x%x)" ), &aStatus, aFunc, aParam, aParLength, aAutoComplete ) );
+    TExtensionParPckg package;
+    package().iFunc = aFunc;
+    package().iParLength = aParLength;
+    package().iAutoComplete = aAutoComplete;
+    TPtr8 ptr( ( TUint8* )aParam, aParLength, aParLength );
+    CallFunction( aStatus, package, ptr );
+    User::WaitForRequest( aStatus );
+    COMPONENT_TRACE( ( _L( "    DSYTESTTOOL - RTFDosExtension::CallAsyncDosExtFunction - return 0x%x" ), aStatus.Int() ) );
+    return aStatus.Int();
+    }