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 );
    }