os/mm/mmlibs/mmfw/tsrc/mmfintegrationtest/SDevSound/SDSCapTestServer/src/CapTestStep0010.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0
     2
// All rights reserved.
sl@0
     3
// This component and the accompanying materials are made available
sl@0
     4
// under the terms of "Eclipse Public License v1.0"
sl@0
     5
// which accompanies this distribution, and is available
sl@0
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0
     7
//
sl@0
     8
// Initial Contributors:
sl@0
     9
// Nokia Corporation - initial contribution.
sl@0
    10
//
sl@0
    11
// Contributors:
sl@0
    12
//
sl@0
    13
// Description:
sl@0
    14
// CapTestStep0010.h
sl@0
    15
// 
sl@0
    16
//
sl@0
    17
sl@0
    18
#include "CapTestStep0010.h"
sl@0
    19
sl@0
    20
CSecDevSndTS0010* CSecDevSndTS0010::NewL()
sl@0
    21
	{
sl@0
    22
	CSecDevSndTS0010* self = new (ELeave) CSecDevSndTS0010;
sl@0
    23
	CleanupStack::PushL(self);
sl@0
    24
	self->ConstructL();
sl@0
    25
	CleanupStack::Pop();
sl@0
    26
	return self;
sl@0
    27
	}
sl@0
    28
	
sl@0
    29
void CSecDevSndTS0010::ConstructL()
sl@0
    30
	{
sl@0
    31
	}
sl@0
    32
	
sl@0
    33
sl@0
    34
void CSecDevSndTS0010::StartProcessing(TRequestStatus& aStatus)
sl@0
    35
	{
sl@0
    36
	iStatus = &aStatus;
sl@0
    37
	if ( (iVerdict = DoTestStepPreambleL() ) == EPass)
sl@0
    38
		{
sl@0
    39
		// only do this when DoTestStepPreambleL() pass, if it fails, it means 
sl@0
    40
		// devsound is not ready for play data yet.
sl@0
    41
		iVerdict = DoRecordData();
sl@0
    42
		}
sl@0
    43
	}
sl@0
    44
		
sl@0
    45
CSecDevSndTS0010::~CSecDevSndTS0010()
sl@0
    46
	{
sl@0
    47
	}
sl@0
    48
sl@0
    49
/******************************************************************************
sl@0
    50
 *
sl@0
    51
 * DevSound methods
sl@0
    52
 *
sl@0
    53
 *****************************************************************************/
sl@0
    54
 
sl@0
    55
/**
sl@0
    56
 *
sl@0
    57
 * DoTestStepL
sl@0
    58
 * @result TVerdict
sl@0
    59
 *
sl@0
    60
 */
sl@0
    61
sl@0
    62
TVerdict CSecDevSndTS0010::DoRecordData()
sl@0
    63
	{
sl@0
    64
	//Initialize
sl@0
    65
	TVerdict initOK = TestInitialize(EMMFStateRecording);
sl@0
    66
	if (initOK != EPass)
sl@0
    67
		{
sl@0
    68
		return EInconclusive;
sl@0
    69
		}
sl@0
    70
sl@0
    71
	TestSetPriority(KDevSoundPriorityHigh);
sl@0
    72
sl@0
    73
	initOK = TestRecordInit();
sl@0
    74
	if (initOK != EPass)
sl@0
    75
		{
sl@0
    76
		return EInconclusive;
sl@0
    77
		}
sl@0
    78
sl@0
    79
	User::RequestComplete(iStatus, KErrNone);
sl@0
    80
sl@0
    81
	TestSetVolume(iMMFDevSound->MaxVolume() / 2);
sl@0
    82
sl@0
    83
	TFileName	aFilename = _L("C:\\rectest1.wav");
sl@0
    84
sl@0
    85
	return RecordDataFile(aFilename);
sl@0
    86
	}
sl@0
    87
sl@0
    88
/**
sl@0
    89
 *
sl@0
    90
 * TestDigitalPlayback
sl@0
    91
 * @param aNumSamples
sl@0
    92
 * @param aFilename
sl@0
    93
 * @param aDataType
sl@0
    94
 * @result TVerdict
sl@0
    95
 *
sl@0
    96
 */
sl@0
    97
TVerdict CSecDevSndTS0010::RecordDataFile(TDesC& aFilename)
sl@0
    98
	{
sl@0
    99
	TInt		initOK = KErrNone;
sl@0
   100
	TInt		aNumSamples = 1;
sl@0
   101
sl@0
   102
	//open file
sl@0
   103
	RFs fs;
sl@0
   104
	RFile file;
sl@0
   105
	TInt err = fs.Connect();
sl@0
   106
	if (err != KErrNone)
sl@0
   107
		{
sl@0
   108
		// Could not connect to Filesystem.
sl@0
   109
		return EInconclusive;
sl@0
   110
		}
sl@0
   111
sl@0
   112
	//Create output directory if it doesn't already exist
sl@0
   113
//	fs.MkDir(_L("C:\\TSU_MMF_DEVSOUND_SUITE\\Output\\"));
sl@0
   114
sl@0
   115
	err = file.Replace(fs, aFilename, EFileWrite);
sl@0
   116
	if (err != KErrNone)
sl@0
   117
		{
sl@0
   118
		file.Close();
sl@0
   119
		fs.Close();
sl@0
   120
		return EInconclusive;
sl@0
   121
		}
sl@0
   122
sl@0
   123
	//SetGain
sl@0
   124
	TInt vol = iMMFDevSound->MaxVolume();	// Hacked... Fix this...
sl@0
   125
	TestSetGain(vol);
sl@0
   126
sl@0
   127
	TInt bufferCount = 0;
sl@0
   128
	while (bufferCount < aNumSamples && initOK == KErrNone && iCallbackError == KErrNone)
sl@0
   129
		{
sl@0
   130
		//DevSound Record
sl@0
   131
		initOK = TestRecordData();
sl@0
   132
sl@0
   133
		//Write buffer to file
sl@0
   134
		CMMFDataBuffer* buffer = STATIC_CAST (CMMFDataBuffer*, iBuffer);
sl@0
   135
		file.Write(buffer->Data());
sl@0
   136
sl@0
   137
		bufferCount ++;
sl@0
   138
		}
sl@0
   139
sl@0
   140
	file.Close();
sl@0
   141
	fs.Close();
sl@0
   142
sl@0
   143
	if (initOK != KErrNone)
sl@0
   144
		{
sl@0
   145
		return EFail;
sl@0
   146
		}
sl@0
   147
sl@0
   148
	if (aNumSamples >= 0 && bufferCount != aNumSamples)
sl@0
   149
		{
sl@0
   150
		return EFail;
sl@0
   151
		}
sl@0
   152
sl@0
   153
	return EPass;
sl@0
   154
	}
sl@0
   155
sl@0
   156
/**
sl@0
   157
 *
sl@0
   158
 * TestInitialize
sl@0
   159
 * @param aDataType
sl@0
   160
 * @param aMode
sl@0
   161
 * @result TVerdict
sl@0
   162
 *
sl@0
   163
 */
sl@0
   164
TVerdict CSecDevSndTS0010::TestInitialize(TMMFState aMode)
sl@0
   165
	{
sl@0
   166
	TFourCC pcm16(KMMFFourCCCodePCM16); //default to pcm16 data type
sl@0
   167
sl@0
   168
	iCallbackError = KErrNone;
sl@0
   169
	iExpectedValue = KErrNone;
sl@0
   170
sl@0
   171
	// Initialize
sl@0
   172
	TRAPD(err, iMMFDevSound->InitializeL(*this, pcm16, aMode));
sl@0
   173
	if (err)
sl@0
   174
		{
sl@0
   175
		return EInconclusive;
sl@0
   176
		}
sl@0
   177
	else
sl@0
   178
		{
sl@0
   179
		CActiveScheduler::Start();
sl@0
   180
		
sl@0
   181
		if (iCallbackError != iExpectedValue)
sl@0
   182
			{
sl@0
   183
			return EFail;
sl@0
   184
			}
sl@0
   185
		if (iCallbackArray[EInitComplete] != 1)
sl@0
   186
			{
sl@0
   187
			return EFail;
sl@0
   188
			}
sl@0
   189
		}
sl@0
   190
	return EPass;
sl@0
   191
	}
sl@0
   192
sl@0
   193
/**
sl@0
   194
 *
sl@0
   195
 * TestRecordInit
sl@0
   196
 * @result TVerdict
sl@0
   197
 *
sl@0
   198
 */
sl@0
   199
TVerdict CSecDevSndTS0010::TestRecordInit()
sl@0
   200
	{
sl@0
   201
	ResetCallbacks();
sl@0
   202
sl@0
   203
	//get buffer from devsound
sl@0
   204
	TRAPD(err, iMMFDevSound->RecordInitL());
sl@0
   205
	// Start the active scheduler and catch the callback
sl@0
   206
 	CActiveScheduler::Start();
sl@0
   207
	if (err)
sl@0
   208
		{
sl@0
   209
		return EFail;
sl@0
   210
		}
sl@0
   211
	else
sl@0
   212
		{
sl@0
   213
		if (iCallbackArray[EBuffToEmpty] != 1)
sl@0
   214
			{
sl@0
   215
			return EFail;
sl@0
   216
			}
sl@0
   217
		TInt tot = GetCallbackTotal();
sl@0
   218
		if (tot > 1)
sl@0
   219
			{
sl@0
   220
			return EFail;
sl@0
   221
			}
sl@0
   222
		}
sl@0
   223
	return EPass;
sl@0
   224
	}
sl@0
   225
sl@0
   226
/**
sl@0
   227
 *
sl@0
   228
 * TestRecordData
sl@0
   229
 * @result TVerdict
sl@0
   230
 *
sl@0
   231
 */
sl@0
   232
TVerdict CSecDevSndTS0010::TestRecordData()
sl@0
   233
	{
sl@0
   234
	ResetCallbacks();
sl@0
   235
sl@0
   236
	iMMFDevSound->RecordData();
sl@0
   237
	// Start the active scheduler and catch the callback
sl@0
   238
 	CActiveScheduler::Start();
sl@0
   239
sl@0
   240
	if (iCallbackArray[EBuffToEmpty] != 1)
sl@0
   241
		{
sl@0
   242
		if (iCallbackArray[EBuffToEmpty] == 0 && iCallbackArray[ERecError] == 1)
sl@0
   243
			{
sl@0
   244
			// DevSound RecordError was called 1 time.
sl@0
   245
			}
sl@0
   246
		else
sl@0
   247
			{
sl@0
   248
			return EFail;
sl@0
   249
			}
sl@0
   250
		}
sl@0
   251
sl@0
   252
	TInt tot = GetCallbackTotal();
sl@0
   253
	if (tot > 1)
sl@0
   254
		{
sl@0
   255
		return EFail;
sl@0
   256
		}
sl@0
   257
	return EPass;
sl@0
   258
	}
sl@0
   259
sl@0
   260
/******************************************************************************
sl@0
   261
 *
sl@0
   262
 * DevSound mixin methods
sl@0
   263
 *
sl@0
   264
 *****************************************************************************/
sl@0
   265
 
sl@0
   266
/**
sl@0
   267
 * 
sl@0
   268
 * BufferToBeEmptied
sl@0
   269
 * @param aBuffer
sl@0
   270
 *
sl@0
   271
 */
sl@0
   272
void CSecDevSndTS0010::BufferToBeEmptied (CMMFBuffer* aBuffer)
sl@0
   273
	{
sl@0
   274
	iBuffer = aBuffer;
sl@0
   275
	if (aBuffer != NULL)
sl@0
   276
		{
sl@0
   277
		iCallbackError = KErrNone;
sl@0
   278
		}
sl@0
   279
	else
sl@0
   280
		{
sl@0
   281
		iCallbackError = KErrNotFound;
sl@0
   282
		}
sl@0
   283
	iCallbackArray[EBuffToEmpty] ++;
sl@0
   284
	CActiveScheduler::Stop();
sl@0
   285
	}
sl@0
   286
sl@0
   287
/**
sl@0
   288
 *
sl@0
   289
 * RecordError
sl@0
   290
 * @param aError
sl@0
   291
 *
sl@0
   292
 */
sl@0
   293
void CSecDevSndTS0010::RecordError (TInt aError)
sl@0
   294
	{
sl@0
   295
	if( aError != KErrInUse )
sl@0
   296
		{
sl@0
   297
		// should get interrupted by client
sl@0
   298
		iVerdict = EFail;
sl@0
   299
		}
sl@0
   300
	iCallbackError = aError;
sl@0
   301
	iCallbackArray[ERecError] ++;
sl@0
   302
	CActiveScheduler::Stop();
sl@0
   303
	}