os/mm/mmlibs/mmfw/tsrc/mmfunittest/MidiClnt/MidiTestCntrl/Ts_cmmfmiditestcontroller.cpp
author sl
Tue, 10 Jun 2014 14:32:02 +0200 (2014-06-10)
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 1999-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
//
sl@0
    15
sl@0
    16
#include <e32svr.h>
sl@0
    17
sl@0
    18
//const TInt KOpenDelay =500000;;		// EABI warning removal
sl@0
    19
//const TInt KPrepareDelay = 500000;;	// EABI warning removal
sl@0
    20
//const TInt KFrameReadyDelay = 500000;;	// EABI warning removal
sl@0
    21
//const TInt KDuration = 1000000;		// EABI warning removal
sl@0
    22
//const TInt KFrameLength = 100000;		// EABI warning removal
sl@0
    23
sl@0
    24
//const TInt KMaxVolume = 100;		// EABI warning removal
sl@0
    25
//const TInt KFrameWidth = 100;		// EABI warning removal
sl@0
    26
//const TInt KFrameHeight = 50;		// EABI warning removal
sl@0
    27
sl@0
    28
//const TInt KBufMimeTypeGranularity = 4;		// EABI warning removal
sl@0
    29
sl@0
    30
const TUint8 KMaxChannelNumber = 15;
sl@0
    31
sl@0
    32
#include <mmf/server/mmffile.h>
sl@0
    33
#include "Ts_cmmfmiditestcontroller.h"
sl@0
    34
sl@0
    35
#include <mmf/common/mmfmidi.h>
sl@0
    36
sl@0
    37
sl@0
    38
sl@0
    39
/*
sl@0
    40
_LIT(KMmfTestControllerCategory, "CMMFTestController");
sl@0
    41
GLDEF_C void Panic(TMmfTestControllerPanic aReason)
sl@0
    42
	{
sl@0
    43
	User::Panic(KMmfTestControllerCategory, aReason);
sl@0
    44
	}
sl@0
    45
*/
sl@0
    46
_LIT(KMidiClntChunk, "MidiClntChunk");
sl@0
    47
_LIT(KMidiClntSemaphore, "MidiClntSemaphore");
sl@0
    48
sl@0
    49
sl@0
    50
CMMFMidiTestController* CMMFMidiTestController::NewL()
sl@0
    51
	{
sl@0
    52
	CMMFMidiTestController* self = CMMFMidiTestController::NewLC();
sl@0
    53
	CleanupStack::Pop();
sl@0
    54
	return self;
sl@0
    55
	}
sl@0
    56
sl@0
    57
CMMFMidiTestController* CMMFMidiTestController::NewLC(void)
sl@0
    58
	{
sl@0
    59
	CMMFMidiTestController* self = new (ELeave) CMMFMidiTestController();
sl@0
    60
	CleanupStack::PushL(self);
sl@0
    61
	self->ConstructL();
sl@0
    62
	return self;
sl@0
    63
	}
sl@0
    64
sl@0
    65
CMMFMidiTestController::CMMFMidiTestController()
sl@0
    66
	{
sl@0
    67
	iPlayBackRate = 1001;
sl@0
    68
	iMinRate = 1002;
sl@0
    69
	iMaxRate = 1003;
sl@0
    70
	iTempoMicroBeatsPerMinute = 1004;
sl@0
    71
	iPitchTranspositionCents= 1005;
sl@0
    72
	iCentsApplied = 1006;
sl@0
    73
	iDurationMicroSeconds = 1007;
sl@0
    74
	iDurationMicroBeats = 1008;
sl@0
    75
	iNumTracks = 1009;
sl@0
    76
	iPositionMicroSeconds = 1010;
sl@0
    77
	iPositionMicroBeats = 1011;
sl@0
    78
	iNumBanks = 1012;
sl@0
    79
	iNumInstruments = 1013;
sl@0
    80
	iStopTime = 999;
sl@0
    81
	iNumNotes = 57;
sl@0
    82
	iChannels = 15;
sl@0
    83
	iMaxVol = 60000;
sl@0
    84
	iMaxVolume = 100000;
sl@0
    85
	iBalance = 2;
sl@0
    86
	iRepeatNumberOfTimes = 0;
sl@0
    87
	iTrailingSilence = TTimeIntervalMicroSeconds(0);
sl@0
    88
	iCurrentMidiTestControllerState = EMidiStateClosedDisengaged;
sl@0
    89
	}
sl@0
    90
sl@0
    91
CMMFMidiTestController::~CMMFMidiTestController(void)
sl@0
    92
	{
sl@0
    93
	delete iDelayEvent;
sl@0
    94
	delete iMidiEventGenerator;
sl@0
    95
	delete iChanVolumeValues;
sl@0
    96
	}
sl@0
    97
                    
sl@0
    98
void CMMFMidiTestController::ConstructL (void)
sl@0
    99
	{
sl@0
   100
	iDelayEvent = CControllerTimer::NewL(this);
sl@0
   101
	CActiveScheduler::Add(iDelayEvent);
sl@0
   102
sl@0
   103
	iMidiEventGenerator = CMidiEventGenerator::NewL(this);
sl@0
   104
	CActiveScheduler::Add(iMidiEventGenerator);
sl@0
   105
sl@0
   106
	//TUid uid = {0x101F945C};
sl@0
   107
	CMidiCustomCommandParser* midiParser = CMidiCustomCommandParser::NewL(*this);
sl@0
   108
	iMidiEventHandler = midiParser;
sl@0
   109
	CleanupStack::PushL(midiParser);
sl@0
   110
	AddCustomCommandParserL(*midiParser);
sl@0
   111
	CleanupStack::Pop();
sl@0
   112
	
sl@0
   113
	CMMFDRMCustomCommandParser* drmParser = CMMFDRMCustomCommandParser::NewL(*this);
sl@0
   114
	CleanupStack::PushL(drmParser);
sl@0
   115
	AddCustomCommandParserL(*drmParser);
sl@0
   116
	CleanupStack::Pop();
sl@0
   117
	
sl@0
   118
	iChanVolumeValues = new(ELeave)CArrayFixFlat<TReal32>(KMaxChannelNumber);
sl@0
   119
	if (iChanVolumeValues)
sl@0
   120
		{
sl@0
   121
		for (TInt i=0; i<=KMaxChannelNumber; i++)
sl@0
   122
			iChanVolumeValues->AppendL(0);
sl@0
   123
		}
sl@0
   124
	}
sl@0
   125
sl@0
   126
// The method below need to be filled in with the correct responses
sl@0
   127
sl@0
   128
void CMMFMidiTestController::AddDataSourceL(MDataSource& aDataSource)
sl@0
   129
	{
sl@0
   130
	iDataSource = &aDataSource;
sl@0
   131
	iDelayEvent->DelayOpen(TTimeIntervalMicroSeconds(1000000));//1sec
sl@0
   132
	}
sl@0
   133
sl@0
   134
void CMMFMidiTestController::AddDataSinkL(MDataSink& /*aDataSink*/)
sl@0
   135
	{
sl@0
   136
	}
sl@0
   137
sl@0
   138
void CMMFMidiTestController::RemoveDataSourceL(MDataSource& /*aDataSource*/)
sl@0
   139
	{
sl@0
   140
	iDataSource = NULL;
sl@0
   141
	}
sl@0
   142
sl@0
   143
void CMMFMidiTestController::RemoveDataSinkL(MDataSink& /*aDataSink*/)
sl@0
   144
	{
sl@0
   145
	}
sl@0
   146
sl@0
   147
void CMMFMidiTestController::RemoveSourceSinkL()
sl@0
   148
	{
sl@0
   149
	}
sl@0
   150
sl@0
   151
sl@0
   152
void CMMFMidiTestController::ResetL() //XXX - replacement for RemoveSourceSink()
sl@0
   153
	{
sl@0
   154
	}
sl@0
   155
sl@0
   156
/*No leave happens when there is no iDataSource here because a
sl@0
   157
  user suppose to perform Midi Live Event even when there 
sl@0
   158
  is no resource (file) opened.*/
sl@0
   159
void CMMFMidiTestController::PrimeL()
sl@0
   160
	{
sl@0
   161
	 if (iDataSource)
sl@0
   162
		{
sl@0
   163
		iDataSource->SourcePrimeL();
sl@0
   164
		}
sl@0
   165
	}
sl@0
   166
sl@0
   167
void CMMFMidiTestController::PlayL()
sl@0
   168
	{
sl@0
   169
	if (iDataSource)
sl@0
   170
		{
sl@0
   171
		if (!iDisableAutoIntent)
sl@0
   172
			{
sl@0
   173
			User::LeaveIfError( MdcExecuteIntent(ContentAccess::EPlay) );
sl@0
   174
			}
sl@0
   175
		}	
sl@0
   176
	iDelayEvent->DelayPlayStarted(TTimeIntervalMicroSeconds(100000));//1 sec
sl@0
   177
	}
sl@0
   178
sl@0
   179
void CMMFMidiTestController::PauseL()
sl@0
   180
	{
sl@0
   181
	if (iDataSource)
sl@0
   182
		{
sl@0
   183
		iDataSource->SourcePauseL();
sl@0
   184
		}
sl@0
   185
	else
sl@0
   186
		{
sl@0
   187
		User::Leave(KErrNotReady);
sl@0
   188
		}			
sl@0
   189
	}
sl@0
   190
sl@0
   191
void CMMFMidiTestController::StopL()
sl@0
   192
	{
sl@0
   193
	if(iDelayEvent->IsActive())
sl@0
   194
		{
sl@0
   195
		iDelayEvent->Cancel();
sl@0
   196
		}
sl@0
   197
	iDelayEvent->DelayStop(TTimeIntervalMicroSeconds(0));
sl@0
   198
	if (iDataSource)
sl@0
   199
		{
sl@0
   200
		iDataSource->SourceStopL();
sl@0
   201
		}
sl@0
   202
	}
sl@0
   203
sl@0
   204
TTimeIntervalMicroSeconds CMMFMidiTestController::PositionL() const
sl@0
   205
	{
sl@0
   206
	if (!iDataSource)
sl@0
   207
		{
sl@0
   208
		User::Leave(KErrNotReady);
sl@0
   209
		}
sl@0
   210
	return iPositionMicroSeconds;				
sl@0
   211
sl@0
   212
	}
sl@0
   213
sl@0
   214
void CMMFMidiTestController::SetPositionL(const TTimeIntervalMicroSeconds& /*aPosition*/)
sl@0
   215
	{
sl@0
   216
	}
sl@0
   217
sl@0
   218
TTimeIntervalMicroSeconds CMMFMidiTestController::DurationL() const
sl@0
   219
	{
sl@0
   220
	return iDurationMicroSeconds;
sl@0
   221
	}
sl@0
   222
sl@0
   223
void CMMFMidiTestController::CustomCommand(TMMFMessage& aMessage)
sl@0
   224
	{
sl@0
   225
	if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFDRMControl)
sl@0
   226
		{
sl@0
   227
		aMessage.Complete(KErrNotSupported);
sl@0
   228
		}
sl@0
   229
	else
sl@0
   230
		{
sl@0
   231
		aMessage.Complete(KErrNone);
sl@0
   232
		}
sl@0
   233
	}
sl@0
   234
sl@0
   235
void CMMFMidiTestController::SetPrioritySettings(const TMMFPrioritySettings& /*aPrioritySettings*/)
sl@0
   236
	{
sl@0
   237
	}
sl@0
   238
sl@0
   239
void CMMFMidiTestController::GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries)
sl@0
   240
	{
sl@0
   241
	aNumberOfEntries = 10;
sl@0
   242
	}
sl@0
   243
sl@0
   244
CMMFMetaDataEntry* CMMFMidiTestController::GetMetaDataEntryL(TInt /*aIndex*/)
sl@0
   245
	{ 
sl@0
   246
	CMMFMetaDataEntry* metaDataEntry = NULL;
sl@0
   247
	return metaDataEntry;
sl@0
   248
	}
sl@0
   249
sl@0
   250
TInt CMMFMidiTestController::SendEventToClient(const TMMFEvent& aEvent)
sl@0
   251
	{
sl@0
   252
	//send event to client...
sl@0
   253
	TInt result = DoSendEventToClient(aEvent);
sl@0
   254
	return result;
sl@0
   255
	}
sl@0
   256
sl@0
   257
TInt CMMFMidiTestController::OpenComplete()
sl@0
   258
	{
sl@0
   259
	CMMFMidiEvent* opencomplete = new CMMFMidiEvent(KMMFEventCategoryMidiOpenDataSourceComplete, KErrNone);
sl@0
   260
	if(!opencomplete)
sl@0
   261
		return KErrNoMemory;
sl@0
   262
	switch (iCurrentMidiTestControllerState)
sl@0
   263
	{
sl@0
   264
		case EMidiStateClosedDisengaged: 
sl@0
   265
			opencomplete->iOldState = EMidiStateClosedDisengaged;
sl@0
   266
			opencomplete->iNewState = EMidiStateOpenDisengaged;
sl@0
   267
			iCurrentMidiTestControllerState = EMidiStateOpenDisengaged;
sl@0
   268
			break;
sl@0
   269
		case EMidiStateOpenPlaying:
sl@0
   270
			opencomplete->iOldState = EMidiStateOpenPlaying;
sl@0
   271
			opencomplete->iNewState = EMidiStateOpenEngaged;
sl@0
   272
			iCurrentMidiTestControllerState = EMidiStateOpenEngaged;
sl@0
   273
			break;
sl@0
   274
		default:
sl@0
   275
			opencomplete->iOldState = iCurrentMidiTestControllerState;
sl@0
   276
			opencomplete->iNewState = iCurrentMidiTestControllerState;
sl@0
   277
			opencomplete->iEventType = KMMFErrorCategoryControllerGeneralError;
sl@0
   278
			break;
sl@0
   279
	}	
sl@0
   280
	opencomplete->iMicroSeconds = iDurationMicroSeconds;
sl@0
   281
	iMidiEventHandler->SendMidiEventToClient(*opencomplete);
sl@0
   282
	delete opencomplete;
sl@0
   283
	return KErrNone;
sl@0
   284
	}
sl@0
   285
sl@0
   286
TInt CMMFMidiTestController::PlayStarted()
sl@0
   287
	{
sl@0
   288
	CMMFMidiEvent* playStarted = new CMMFMidiEvent(KMMFEventCategoryMidiPlaying, KErrNone);
sl@0
   289
	if(!playStarted)
sl@0
   290
		return KErrNoMemory;
sl@0
   291
	// decide which is the state the MIDI controller can go into when Play is called
sl@0
   292
	switch (iCurrentMidiTestControllerState)
sl@0
   293
		{
sl@0
   294
		case EMidiStateClosedDisengaged:
sl@0
   295
		playStarted->iOldState = EMidiStateClosedDisengaged;
sl@0
   296
		playStarted->iNewState = EMidiStateClosedEngaged;
sl@0
   297
		iCurrentMidiTestControllerState = EMidiStateClosedEngaged;
sl@0
   298
		playStarted->iMicroSeconds = TTimeIntervalMicroSeconds(0);
sl@0
   299
		iMidiEventHandler->SendMidiEventToClient(*playStarted);
sl@0
   300
		delete playStarted; 
sl@0
   301
		iDelayEvent->PlayFinished(TTimeIntervalMicroSeconds(20000000));//20 sec
sl@0
   302
		iMidiEventGenerator->MidiEventTrigger();
sl@0
   303
		break;
sl@0
   304
	
sl@0
   305
		case EMidiStateOpenDisengaged:
sl@0
   306
		playStarted->iOldState = EMidiStateOpenDisengaged;
sl@0
   307
		playStarted->iNewState = EMidiStateOpenPlaying;
sl@0
   308
		iCurrentMidiTestControllerState = EMidiStateOpenPlaying;
sl@0
   309
		playStarted->iMicroSeconds = TTimeIntervalMicroSeconds(0);
sl@0
   310
		iMidiEventHandler->SendMidiEventToClient(*playStarted);
sl@0
   311
		delete playStarted; 
sl@0
   312
		iDelayEvent->PlayFinished(TTimeIntervalMicroSeconds(20000000));//20 sec
sl@0
   313
		iMidiEventGenerator->MidiEventTrigger();
sl@0
   314
		break;
sl@0
   315
		
sl@0
   316
		case EMidiStateOpenEngaged:
sl@0
   317
		playStarted->iOldState = EMidiStateOpenEngaged;
sl@0
   318
		playStarted->iNewState = EMidiStateOpenPlaying;
sl@0
   319
		iCurrentMidiTestControllerState = EMidiStateOpenPlaying;
sl@0
   320
		playStarted->iMicroSeconds = TTimeIntervalMicroSeconds(0);
sl@0
   321
		iMidiEventHandler->SendMidiEventToClient(*playStarted);
sl@0
   322
		delete playStarted; 
sl@0
   323
		iDelayEvent->PlayFinished(TTimeIntervalMicroSeconds(20000000));//20 sec
sl@0
   324
		iMidiEventGenerator->MidiEventTrigger();
sl@0
   325
		break;
sl@0
   326
		
sl@0
   327
		default:
sl@0
   328
		playStarted->iOldState = iCurrentMidiTestControllerState;
sl@0
   329
		playStarted->iNewState = iCurrentMidiTestControllerState;
sl@0
   330
		playStarted->iEventType = KMMFErrorCategoryControllerGeneralError;
sl@0
   331
		playStarted->iMicroSeconds = TTimeIntervalMicroSeconds(0);
sl@0
   332
		iMidiEventHandler->SendMidiEventToClient(*playStarted);
sl@0
   333
		delete playStarted; 
sl@0
   334
		break;
sl@0
   335
		}
sl@0
   336
	return KErrNone;
sl@0
   337
	}
sl@0
   338
sl@0
   339
TInt CMMFMidiTestController::PlayFinished()
sl@0
   340
	{
sl@0
   341
	TUid tmp;
sl@0
   342
	tmp.iUid = 0 ;
sl@0
   343
	CMMFMidiEvent* playFinished = new CMMFMidiEvent(tmp, KErrNone);
sl@0
   344
	if(!playFinished)
sl@0
   345
		return KErrNoMemory;
sl@0
   346
	switch (iCurrentMidiTestControllerState)
sl@0
   347
		{
sl@0
   348
		case EMidiStateClosedEngaged:
sl@0
   349
		playFinished->iOldState = EMidiStateClosedEngaged;
sl@0
   350
		playFinished->iNewState = EMidiStateClosedEngaged;
sl@0
   351
		iCurrentMidiTestControllerState = EMidiStateClosedEngaged;
sl@0
   352
		break;
sl@0
   353
	
sl@0
   354
		case EMidiStateOpenPlaying:
sl@0
   355
		playFinished->iOldState = EMidiStateOpenPlaying;
sl@0
   356
		playFinished->iNewState = EMidiStateOpenEngaged;
sl@0
   357
		iCurrentMidiTestControllerState = EMidiStateOpenEngaged;
sl@0
   358
		break;
sl@0
   359
			
sl@0
   360
		default:
sl@0
   361
		playFinished->iOldState = iCurrentMidiTestControllerState;
sl@0
   362
		playFinished->iNewState = iCurrentMidiTestControllerState;
sl@0
   363
		playFinished->iEventType = KMMFErrorCategoryControllerGeneralError;
sl@0
   364
		break;
sl@0
   365
		}
sl@0
   366
		
sl@0
   367
	playFinished->iMicroSeconds = iDurationMicroSeconds;
sl@0
   368
	iMidiEventHandler->SendMidiEventToClient(*playFinished);
sl@0
   369
	delete playFinished;
sl@0
   370
	return KErrNone;
sl@0
   371
	}
sl@0
   372
sl@0
   373
TInt CMMFMidiTestController::Stop()
sl@0
   374
	{
sl@0
   375
	CMMFMidiEvent* playStop = new CMMFMidiEvent(KMMFEventCategoryMidiPlayingComplete, KErrNone);
sl@0
   376
	if(!playStop)
sl@0
   377
		return KErrNoMemory;
sl@0
   378
	
sl@0
   379
	switch (iCurrentMidiTestControllerState)
sl@0
   380
		{
sl@0
   381
		case EMidiStateOpenPlaying:
sl@0
   382
		playStop->iOldState = EMidiStateOpenPlaying;
sl@0
   383
		playStop->iNewState = EMidiStateOpenDisengaged;
sl@0
   384
		iCurrentMidiTestControllerState = EMidiStateOpenDisengaged;
sl@0
   385
		break;
sl@0
   386
		
sl@0
   387
		case EMidiStateClosedEngaged:
sl@0
   388
		playStop->iOldState = EMidiStateClosedEngaged;
sl@0
   389
		playStop->iNewState = EMidiStateClosedDisengaged;
sl@0
   390
		iCurrentMidiTestControllerState = EMidiStateClosedDisengaged;
sl@0
   391
		break;
sl@0
   392
		
sl@0
   393
		case EMidiStateOpenEngaged:
sl@0
   394
		playStop->iOldState = EMidiStateOpenEngaged;
sl@0
   395
		playStop->iNewState = EMidiStateOpenDisengaged;
sl@0
   396
		iCurrentMidiTestControllerState = EMidiStateOpenDisengaged;
sl@0
   397
		break;
sl@0
   398
		
sl@0
   399
		default:
sl@0
   400
		playStop->iOldState = iCurrentMidiTestControllerState;
sl@0
   401
		playStop->iNewState = iCurrentMidiTestControllerState;
sl@0
   402
		playStop->iEventType = KMMFErrorCategoryControllerGeneralError;
sl@0
   403
		break;
sl@0
   404
		}
sl@0
   405
	
sl@0
   406
	playStop->iMicroSeconds = iPositionMicroSeconds;
sl@0
   407
	iMidiEventHandler->SendMidiEventToClient(*playStop);
sl@0
   408
	delete playStop;
sl@0
   409
	return KErrNone;
sl@0
   410
	}
sl@0
   411
sl@0
   412
TInt CMMFMidiTestController::Close()
sl@0
   413
	{
sl@0
   414
	CMMFMidiEvent* close = new CMMFMidiEvent(KMMFEventCategoryMidiClose, KErrNone);
sl@0
   415
	if(!close)
sl@0
   416
		return KErrNoMemory;
sl@0
   417
	
sl@0
   418
	switch (iCurrentMidiTestControllerState)
sl@0
   419
		{
sl@0
   420
		case EMidiStateOpenDisengaged:
sl@0
   421
		close->iOldState = EMidiStateOpenDisengaged;
sl@0
   422
		close->iNewState = EMidiStateClosedDisengaged;
sl@0
   423
		iCurrentMidiTestControllerState = EMidiStateClosedDisengaged;
sl@0
   424
		break;
sl@0
   425
		
sl@0
   426
		case EMidiStateOpenPlaying:
sl@0
   427
		close->iOldState = EMidiStateOpenPlaying;
sl@0
   428
		close->iNewState = EMidiStateClosedDisengaged;
sl@0
   429
		iCurrentMidiTestControllerState = EMidiStateClosedEngaged;
sl@0
   430
		break;
sl@0
   431
		
sl@0
   432
		case EMidiStateOpenEngaged:
sl@0
   433
		close->iOldState = EMidiStateOpenEngaged;
sl@0
   434
		close->iNewState = EMidiStateClosedEngaged;
sl@0
   435
		iCurrentMidiTestControllerState = EMidiStateClosedEngaged;
sl@0
   436
		break;
sl@0
   437
		
sl@0
   438
		default:
sl@0
   439
		close->iOldState = iCurrentMidiTestControllerState;
sl@0
   440
		close->iNewState = iCurrentMidiTestControllerState;
sl@0
   441
		close->iEventType = KMMFErrorCategoryControllerGeneralError;
sl@0
   442
		break;
sl@0
   443
		}
sl@0
   444
	close->iMicroSeconds = TTimeIntervalMicroSeconds(0);
sl@0
   445
	iMidiEventHandler->SendMidiEventToClient(*close);
sl@0
   446
	delete close;
sl@0
   447
	return KErrNone;
sl@0
   448
	}
sl@0
   449
sl@0
   450
TInt CMMFMidiTestController::SyncUpdate()
sl@0
   451
	{
sl@0
   452
	CMMFMidiEvent* syncUpd = new CMMFMidiEvent(KMMFEventCategoryMidiSyncUpdate, KErrNone);
sl@0
   453
	if(!syncUpd)
sl@0
   454
		return KErrNoMemory;
sl@0
   455
	iMidiEventHandler->SendMidiEventToClient(*syncUpd);
sl@0
   456
	delete syncUpd;
sl@0
   457
	return KErrNone;
sl@0
   458
	}
sl@0
   459
sl@0
   460
TInt CMMFMidiTestController::TempoChanged()
sl@0
   461
	{
sl@0
   462
	CMMFMidiEvent* tempoChanged = new CMMFMidiEvent(KMMFEventCategoryTempoChanged, KErrNone);
sl@0
   463
	if(!tempoChanged)
sl@0
   464
		return KErrNoMemory;
sl@0
   465
	tempoChanged->iTempoMicroBeats = 60; //Adagio
sl@0
   466
	iMidiEventHandler->SendMidiEventToClient(*tempoChanged);
sl@0
   467
	delete tempoChanged;
sl@0
   468
	iMidiEventGenerator->MidiEventTrigger();
sl@0
   469
	return KErrNone;
sl@0
   470
	}
sl@0
   471
sl@0
   472
TInt CMMFMidiTestController::VolumeChanged()
sl@0
   473
	{
sl@0
   474
	CMMFMidiEvent* volumeChanged = new CMMFMidiEvent(KMMFEventCategoryVolumeChanged, KErrNone);
sl@0
   475
	if(!volumeChanged)
sl@0
   476
		return KErrNoMemory;
sl@0
   477
	volumeChanged->iVolumeInDecibels = 50000;
sl@0
   478
	volumeChanged->iChannel = 14;
sl@0
   479
	iMidiEventHandler->SendMidiEventToClient(*volumeChanged);
sl@0
   480
	delete volumeChanged;
sl@0
   481
	iMidiEventGenerator->MidiEventTrigger();
sl@0
   482
	return KErrNone;
sl@0
   483
	}
sl@0
   484
sl@0
   485
TInt CMMFMidiTestController::MuteChanged()
sl@0
   486
	{
sl@0
   487
	CMMFMidiEvent* muteChanged = new CMMFMidiEvent(KMMFEventCategoryMuteChanged, KErrNone);
sl@0
   488
	if(!muteChanged)
sl@0
   489
		return KErrNoMemory;
sl@0
   490
	muteChanged->iChannel = 15;
sl@0
   491
	muteChanged->iMute = ETrue;
sl@0
   492
	iMidiEventHandler->SendMidiEventToClient(*muteChanged);
sl@0
   493
	delete muteChanged;
sl@0
   494
	iMidiEventGenerator->MidiEventTrigger();
sl@0
   495
	return KErrNone;
sl@0
   496
	}
sl@0
   497
sl@0
   498
TInt CMMFMidiTestController::PolyphonyChanged()
sl@0
   499
	{
sl@0
   500
	CMMFMidiEvent* polyphonyChanged = new CMMFMidiEvent(KMMFEventCategoryPolyphonyChanged, KErrNone);
sl@0
   501
	if(!polyphonyChanged)
sl@0
   502
		return KErrNoMemory;
sl@0
   503
	polyphonyChanged->iPolyphony = 10;
sl@0
   504
	iMidiEventHandler->SendMidiEventToClient(*polyphonyChanged);
sl@0
   505
	delete polyphonyChanged;
sl@0
   506
	iMidiEventGenerator->MidiEventTrigger();
sl@0
   507
	return KErrNone;
sl@0
   508
	}
sl@0
   509
sl@0
   510
TInt CMMFMidiTestController::InstrumentChanged()
sl@0
   511
	{
sl@0
   512
	CMMFMidiEvent* instrumentChanged = new CMMFMidiEvent(KMMFEventCategoryInstrumentChanged, KErrNone);
sl@0
   513
	if(!instrumentChanged )
sl@0
   514
		return KErrNoMemory;
sl@0
   515
	instrumentChanged->iChannel = 3;
sl@0
   516
	instrumentChanged->iBankId = 4;
sl@0
   517
	instrumentChanged->iInstrumentId = 5; 
sl@0
   518
	iMidiEventHandler->SendMidiEventToClient(*instrumentChanged);
sl@0
   519
	delete instrumentChanged ;
sl@0
   520
	iMidiEventGenerator->MidiEventTrigger();
sl@0
   521
	return KErrNone;
sl@0
   522
	}
sl@0
   523
sl@0
   524
TInt CMMFMidiTestController::SmfMetaDataEntryFound()
sl@0
   525
	{
sl@0
   526
	TTimeIntervalMicroSeconds position(200000);
sl@0
   527
	CMMFMidiEvent* smfMetaDataEntryFound = new CMMFMidiEvent(KMMFEventCategoryMetaDataEntryFound, KErrNone);
sl@0
   528
	if(!smfMetaDataEntryFound )
sl@0
   529
		return KErrNoMemory;
sl@0
   530
	smfMetaDataEntryFound->iMetaDataEntryId = 15;//Not supported in this test controller
sl@0
   531
	smfMetaDataEntryFound->iMicroSeconds = position;
sl@0
   532
	iMidiEventHandler->SendMidiEventToClient(*smfMetaDataEntryFound);
sl@0
   533
	delete smfMetaDataEntryFound;
sl@0
   534
	iMidiEventGenerator->MidiEventTrigger();
sl@0
   535
	return KErrNone;
sl@0
   536
	}
sl@0
   537
sl@0
   538
TInt CMMFMidiTestController::MipMessageReceived()
sl@0
   539
	{
sl@0
   540
	TMipMessageEntry mipMessageEntry;
sl@0
   541
	mipMessageEntry.iChannel = 11;
sl@0
   542
	mipMessageEntry.iMIPValue = 21;
sl@0
   543
sl@0
   544
	TMipMessageEntry mipMessageEntry2;
sl@0
   545
	mipMessageEntry2.iChannel = 1;
sl@0
   546
	mipMessageEntry2.iMIPValue = 2;
sl@0
   547
sl@0
   548
	CMMFMidiEvent* mipMessageReceived = new CMMFMidiEvent(KMMFEventCategoryMipMessageReceived, KErrNone);
sl@0
   549
	if(!mipMessageReceived )
sl@0
   550
		return KErrNoMemory;
sl@0
   551
	mipMessageReceived->iMipMessage.Append(mipMessageEntry);
sl@0
   552
sl@0
   553
	CMMFMidiEvent* mipMessageReceived2 = new CMMFMidiEvent(KMMFEventCategoryMipMessageReceived, KErrNone);
sl@0
   554
	if(!mipMessageReceived2 )
sl@0
   555
		return KErrNoMemory;
sl@0
   556
	mipMessageReceived2->iMipMessage.Append(mipMessageEntry2);
sl@0
   557
sl@0
   558
	
sl@0
   559
	iMidiEventHandler->SendMidiEventToClient(*mipMessageReceived);
sl@0
   560
	iMidiEventHandler->SendMidiEventToClient(*mipMessageReceived2);
sl@0
   561
	delete mipMessageReceived;
sl@0
   562
	delete mipMessageReceived2;
sl@0
   563
	return KErrNone;
sl@0
   564
	}
sl@0
   565
sl@0
   566
void CMMFMidiTestController::MmcSetPositionMicroBeatsL(TInt64 /*aMicroBeats*/)
sl@0
   567
	{
sl@0
   568
	InsertInterfaceNameInChunk(_L8("SetPositionMicroBeatsL"));
sl@0
   569
	}
sl@0
   570
sl@0
   571
void CMMFMidiTestController::MmcPositionMicroBeatsL(TInt64& aMicroBeats)
sl@0
   572
	{
sl@0
   573
	aMicroBeats = iPositionMicroBeats;
sl@0
   574
	InsertInterfaceNameInChunk(_L8("PositionMicroBeatsL"));
sl@0
   575
	}
sl@0
   576
sl@0
   577
void CMMFMidiTestController::MmcPlayNoteL(TInt /*aChannel*/,TInt /*aNote*/,const TTimeIntervalMicroSeconds& /*aDuration*/,TInt /*aNoteOnVelocity*/,TInt /*aNoteOffVelocity*/)
sl@0
   578
	{
sl@0
   579
	InsertInterfaceNameInChunk(_L8("PlayNoteL"));
sl@0
   580
	}
sl@0
   581
sl@0
   582
void CMMFMidiTestController::MmcPlayNoteL(TInt /*aChannel*/,TInt /*aNote*/,const TTimeIntervalMicroSeconds& /*aStartTime*/, const TTimeIntervalMicroSeconds& /*aDuration*/,TInt /*aNoteOnVelocity*/,TInt /*aNoteOffVelocity*/)
sl@0
   583
	{
sl@0
   584
	InsertInterfaceNameInChunk(_L8("PlayNoteWithStartTime"));
sl@0
   585
	}
sl@0
   586
sl@0
   587
void CMMFMidiTestController::MmcStopNotesL(TInt /*aChannel*/)
sl@0
   588
	{
sl@0
   589
	InsertInterfaceNameInChunk(_L8("StopNotes"));
sl@0
   590
	}
sl@0
   591
sl@0
   592
void CMMFMidiTestController::MmcNoteOnL(TInt /*aChannel*/,TInt /*aNote*/,TInt /*aVelocity*/)
sl@0
   593
	{
sl@0
   594
	InsertInterfaceNameInChunk(_L8("NoteOnL"));
sl@0
   595
	}
sl@0
   596
sl@0
   597
void CMMFMidiTestController::MmcNoteOffL(TInt /*aChannel*/,TInt /*aNote*/,TInt /*aVelocity*/)
sl@0
   598
	{
sl@0
   599
	InsertInterfaceNameInChunk(_L8("NoteOffL"));
sl@0
   600
	}
sl@0
   601
sl@0
   602
void CMMFMidiTestController::MmcPlaybackRateL(TInt& aPlayBackRate)
sl@0
   603
	{
sl@0
   604
	aPlayBackRate = iPlayBackRate;
sl@0
   605
	InsertInterfaceNameInChunk(_L8("PlaybackRateL"));
sl@0
   606
	}
sl@0
   607
sl@0
   608
void CMMFMidiTestController::MmcSetPlaybackRateL(TInt /*aPlayBackRate*/)
sl@0
   609
	{
sl@0
   610
	InsertInterfaceNameInChunk(_L8("SetPlaybackRateL"));
sl@0
   611
	}
sl@0
   612
sl@0
   613
void CMMFMidiTestController::MmcMaxPlaybackRateL(TInt& aMaxRate)
sl@0
   614
	{
sl@0
   615
	aMaxRate = iMaxRate;
sl@0
   616
	InsertInterfaceNameInChunk(_L8("MaxPlaybackRateL"));
sl@0
   617
	}
sl@0
   618
sl@0
   619
void CMMFMidiTestController::MmcMinPlaybackRateL(TInt& aMinRate)
sl@0
   620
	{
sl@0
   621
	aMinRate = iMinRate;
sl@0
   622
	InsertInterfaceNameInChunk(_L8("MinPlaybackRateL"));
sl@0
   623
	}
sl@0
   624
sl@0
   625
void CMMFMidiTestController::MmcTempoMicroBeatsPerMinuteL(TInt& aMicroBeatsPerMinute)
sl@0
   626
	{
sl@0
   627
	aMicroBeatsPerMinute = iTempoMicroBeatsPerMinute;
sl@0
   628
	InsertInterfaceNameInChunk(_L8("TempoMicroBeatsPerMinuteL"));
sl@0
   629
	}
sl@0
   630
sl@0
   631
void CMMFMidiTestController::MmcSetTempoL(TInt /*aMicroBeatsPerMinute*/)
sl@0
   632
	{
sl@0
   633
	InsertInterfaceNameInChunk(_L8("SetTempoL"));
sl@0
   634
	}
sl@0
   635
sl@0
   636
void CMMFMidiTestController::MmcPitchTranspositionCentsL(TInt& aPitch)
sl@0
   637
	{
sl@0
   638
	aPitch = iPitchTranspositionCents;
sl@0
   639
	InsertInterfaceNameInChunk(_L8("PitchTranspositionCentsL"));
sl@0
   640
	}
sl@0
   641
sl@0
   642
void CMMFMidiTestController::MmcSetPitchTranspositionL(TInt /*aCents*/, TInt& aCentsApplied)
sl@0
   643
	{
sl@0
   644
	aCentsApplied = iCentsApplied; 
sl@0
   645
	InsertInterfaceNameInChunk(_L8("SetPitchTranspositionL"));
sl@0
   646
	}
sl@0
   647
sl@0
   648
void CMMFMidiTestController::MmcDurationMicroBeatsL(TInt64& aDuration)
sl@0
   649
	{
sl@0
   650
	aDuration = iDurationMicroBeats;
sl@0
   651
	InsertInterfaceNameInChunk(_L8("DurationMicroBeatsL"));
sl@0
   652
	}
sl@0
   653
sl@0
   654
void CMMFMidiTestController::MmcNumTracksL(TInt& aTracks)
sl@0
   655
	{
sl@0
   656
	aTracks = iNumTracks;
sl@0
   657
	InsertInterfaceNameInChunk(_L8("NumTracksL"));
sl@0
   658
	}
sl@0
   659
sl@0
   660
void CMMFMidiTestController::MmcSetTrackMuteL(TInt /*aTrack*/, TBool /*aMuted*/)
sl@0
   661
	{
sl@0
   662
	InsertInterfaceNameInChunk(_L8("SetTrackMuteL"));
sl@0
   663
	}
sl@0
   664
sl@0
   665
void CMMFMidiTestController::MmcMimeTypeL(TDes8& aMimeType)
sl@0
   666
	{
sl@0
   667
	_LIT(K,"Midi-x");
sl@0
   668
	aMimeType.Copy(K);
sl@0
   669
	InsertInterfaceNameInChunk(_L8("MimeTypeL"));
sl@0
   670
	}
sl@0
   671
sl@0
   672
void CMMFMidiTestController::MmcSetSyncUpdateCallbackIntervalL(const TTimeIntervalMicroSeconds& aMicroSeconds,TInt64 /*aMicroBeats*/)
sl@0
   673
	{
sl@0
   674
	InsertInterfaceNameInChunk(_L8("SetSyncUpdateCallbackIntervalL"));
sl@0
   675
	iDelayEvent->DelaySyncUpdate(aMicroSeconds);
sl@0
   676
	}
sl@0
   677
sl@0
   678
void CMMFMidiTestController::MmcSendMessageL(const TDesC8& aMidiMessage, TInt& aBytes)
sl@0
   679
	{
sl@0
   680
	aBytes = aMidiMessage.Length();
sl@0
   681
	InsertInterfaceNameInChunk(_L8("SendMessageL"));
sl@0
   682
	}
sl@0
   683
sl@0
   684
void CMMFMidiTestController::MmcSendMessageL(const TDesC8& aMidiMessage,const TTimeIntervalMicroSeconds& /*aTime*/, TInt& aBytes)
sl@0
   685
	{
sl@0
   686
	aBytes = aMidiMessage.Length();
sl@0
   687
	InsertInterfaceNameInChunk(_L8("SendMessageWithTimeStamp"));
sl@0
   688
	}
sl@0
   689
sl@0
   690
void CMMFMidiTestController::MmcSendMipMessageL(const TArray<TMipMessageEntry>& aEntry)
sl@0
   691
	{
sl@0
   692
	for(TInt i=0; i< aEntry.Count(); i++)
sl@0
   693
		{
sl@0
   694
		TMipMessageEntry tmp = aEntry[i];
sl@0
   695
		tmp.iChannel++;//to remove the warning
sl@0
   696
		}
sl@0
   697
	InsertInterfaceNameInChunk(_L8("SendMipMessageL"));
sl@0
   698
	}
sl@0
   699
sl@0
   700
void CMMFMidiTestController::MmcNumberOfBanksL(TBool /*aCustom*/, TInt& aNumBanks)
sl@0
   701
	{
sl@0
   702
	aNumBanks = iNumBanks;
sl@0
   703
	InsertInterfaceNameInChunk(_L8("NumberOfBanksL"));
sl@0
   704
	}
sl@0
   705
sl@0
   706
void CMMFMidiTestController::MmcGetBankIdL(TBool /*aCustom*/, TInt aBankIndex, TInt& aBankId)
sl@0
   707
	{
sl@0
   708
	aBankId = ++aBankIndex;
sl@0
   709
	InsertInterfaceNameInChunk(_L8("GetBankIdL"));
sl@0
   710
	}
sl@0
   711
sl@0
   712
void CMMFMidiTestController::MmcLoadCustomBankL(const TDesC& /*aFileName*/,TInt& aBankId)
sl@0
   713
	{
sl@0
   714
	aBankId = 60;
sl@0
   715
	InsertInterfaceNameInChunk(_L8("LoadCustomBankL"));
sl@0
   716
	}
sl@0
   717
sl@0
   718
void CMMFMidiTestController::MmcUnloadCustomBankL(TInt /*aBankId*/)
sl@0
   719
	{
sl@0
   720
	InsertInterfaceNameInChunk(_L8("UnloadCustomBankL"));
sl@0
   721
	}
sl@0
   722
sl@0
   723
void CMMFMidiTestController::MmcCustomBankLoadedL(TInt /*aBankId*/, TBool& aBankLoaded)
sl@0
   724
	{
sl@0
   725
	aBankLoaded = ETrue;
sl@0
   726
	InsertInterfaceNameInChunk(_L8("CustomBankLoadedL"));
sl@0
   727
	}
sl@0
   728
sl@0
   729
void CMMFMidiTestController::MmcUnloadAllCustomBanksL()
sl@0
   730
	{
sl@0
   731
	InsertInterfaceNameInChunk(_L8("UnloadAllCustomBanksL"));
sl@0
   732
	}
sl@0
   733
sl@0
   734
void CMMFMidiTestController::MmcNumberOfInstrumentsL(TInt /*aBankId*/, TBool /*aCustom*/, TInt& aNumInstruments)
sl@0
   735
	{
sl@0
   736
	aNumInstruments = iNumInstruments;
sl@0
   737
	InsertInterfaceNameInChunk(_L8("NumberOfInstrumentsL"));
sl@0
   738
	}
sl@0
   739
sl@0
   740
void CMMFMidiTestController::MmcGetInstrumentIdL(TInt /*aBankId*/,TBool /*aCustom*/,TInt /*aInstrumentIndex*/, TInt& aInstrumentId)
sl@0
   741
	{
sl@0
   742
	aInstrumentId = 89;
sl@0
   743
	InsertInterfaceNameInChunk(_L8("GetInstrumentIdL"));
sl@0
   744
	}
sl@0
   745
sl@0
   746
const TDesC& CMMFMidiTestController::MmcInstrumentNameL(TInt /*aBankId*/, TBool /*aCustom*/, TInt /*aInstrumentId*/)
sl@0
   747
	{	
sl@0
   748
	_LIT(KInstrumentName, "Guitar");
sl@0
   749
	InsertInterfaceNameInChunk(_L8("InstrumentNameL"));
sl@0
   750
	return KInstrumentName;
sl@0
   751
	}
sl@0
   752
sl@0
   753
void CMMFMidiTestController::MmcSetInstrumentL(TInt /*aChannel*/,TInt /*aBankId*/,TInt /*aInstrumentId*/)
sl@0
   754
	{
sl@0
   755
	InsertInterfaceNameInChunk(_L8("SetInstrumentL"));
sl@0
   756
	}
sl@0
   757
sl@0
   758
void CMMFMidiTestController::MmcLoadCustomInstrumentL(const TDesC& /*aFileName*/, TInt /*aFileBankId*/, TInt /*aFileInstrumentId*/, TInt /*aMemoryBankId*/, TInt /*aMemoryInstrumentId*/)
sl@0
   759
	{
sl@0
   760
	InsertInterfaceNameInChunk(_L8("LoadCustomInstrumentL"));
sl@0
   761
	}
sl@0
   762
sl@0
   763
void CMMFMidiTestController::MmcUnloadCustomInstrumentL(TInt /*aCustomBankId*/,TInt /*aInstrumentId*/)
sl@0
   764
	{
sl@0
   765
	InsertInterfaceNameInChunk(_L8("UnloadCustomInstrumentL"));
sl@0
   766
	}
sl@0
   767
sl@0
   768
const TDesC& CMMFMidiTestController::MmcPercussionKeyNameL(TInt /*aNote*/, TInt /*aBankId*/, TBool /*aCustom*/, TInt /*aInstrumentId*/)
sl@0
   769
	{
sl@0
   770
	_LIT(KPercussionKeyName, "Do");
sl@0
   771
	InsertInterfaceNameInChunk(_L8("PercussionKeyNameL"));
sl@0
   772
	return KPercussionKeyName;
sl@0
   773
	}
sl@0
   774
sl@0
   775
void CMMFMidiTestController::MmcStopTimeL(TTimeIntervalMicroSeconds& aStopTime)
sl@0
   776
	{
sl@0
   777
	aStopTime = iStopTime;
sl@0
   778
	InsertInterfaceNameInChunk(_L8("StopTimeL"));
sl@0
   779
	}
sl@0
   780
sl@0
   781
void CMMFMidiTestController::MmcSetStopTimeL(const TTimeIntervalMicroSeconds& /*aStopTime*/)
sl@0
   782
	{
sl@0
   783
	InsertInterfaceNameInChunk(_L8("SetStopTimeL"));
sl@0
   784
	}
sl@0
   785
sl@0
   786
void CMMFMidiTestController::MmcPolyphonyL(TInt& aNumNotes)
sl@0
   787
	{
sl@0
   788
	aNumNotes = iNumNotes;
sl@0
   789
	InsertInterfaceNameInChunk(_L8("PolyphonyL"));
sl@0
   790
	}
sl@0
   791
sl@0
   792
void CMMFMidiTestController::MmcMaxPolyphonyL(TInt& aMaxNotes)
sl@0
   793
	{
sl@0
   794
	aMaxNotes = iMaxNotes;
sl@0
   795
	InsertInterfaceNameInChunk(_L8("MaxPolyphonyL"));
sl@0
   796
	}
sl@0
   797
sl@0
   798
sl@0
   799
void CMMFMidiTestController::MmcChannelsSupportedL(TInt& aChannels)
sl@0
   800
	{
sl@0
   801
	aChannels = iChannels;
sl@0
   802
	InsertInterfaceNameInChunk(_L8("ChannelsSupportedL"));
sl@0
   803
	}
sl@0
   804
sl@0
   805
void CMMFMidiTestController::MmcChannelVolumeL(TInt aChannel, TReal32& aChannelVol)
sl@0
   806
	{
sl@0
   807
	aChannelVol = iChanVolumeValues->At(aChannel);
sl@0
   808
	InsertInterfaceNameInChunk(_L8("ChannelVolumeL"));
sl@0
   809
	}
sl@0
   810
sl@0
   811
void CMMFMidiTestController::MmcMaxChannelVolumeL(TReal32& aMaxVol)
sl@0
   812
	{
sl@0
   813
	aMaxVol = iMaxVol;
sl@0
   814
	InsertInterfaceNameInChunk(_L8("MaxChannelVolumeL"));
sl@0
   815
	}
sl@0
   816
sl@0
   817
void CMMFMidiTestController::MmcSetChannelVolumeL(TInt aChannel,TReal32 aVolume)
sl@0
   818
	{
sl@0
   819
	iChanVolumeValues->InsertL(aChannel, aVolume);
sl@0
   820
	InsertInterfaceNameInChunk(_L8("SetChannelVolumeL"));
sl@0
   821
	}
sl@0
   822
sl@0
   823
void CMMFMidiTestController::MmcSetChannelMuteL(TInt /*aChannel*/,TBool /*aMuted*/)
sl@0
   824
	{
sl@0
   825
	InsertInterfaceNameInChunk(_L8("SetChannelMuteL"));
sl@0
   826
	}
sl@0
   827
sl@0
   828
void CMMFMidiTestController::MmcVolumeL(TInt& aVolume)
sl@0
   829
	{
sl@0
   830
	aVolume = 70000;
sl@0
   831
	InsertInterfaceNameInChunk(_L8("VolumeL"));
sl@0
   832
	}
sl@0
   833
sl@0
   834
void CMMFMidiTestController::MmcMaxVolumeL(TInt& aMaxVolume)
sl@0
   835
	{
sl@0
   836
	aMaxVolume = iMaxVolume;
sl@0
   837
	InsertInterfaceNameInChunk(_L8("MaxVolumeL"));
sl@0
   838
	}
sl@0
   839
sl@0
   840
void CMMFMidiTestController::MmcSetVolumeL(TInt /*aVolume*/)
sl@0
   841
	{
sl@0
   842
	InsertInterfaceNameInChunk(_L8("SetVolumeL"));
sl@0
   843
	}
sl@0
   844
sl@0
   845
void CMMFMidiTestController::MmcSetVolumeRampL(const TTimeIntervalMicroSeconds& /*aRampDuration*/)
sl@0
   846
	{
sl@0
   847
	InsertInterfaceNameInChunk(_L8("SetVolumeRampL"));
sl@0
   848
	}
sl@0
   849
sl@0
   850
void CMMFMidiTestController::MmcGetBalanceL(TInt& aBalance)
sl@0
   851
	{
sl@0
   852
	aBalance = iBalance;
sl@0
   853
	InsertInterfaceNameInChunk(_L8("GetBalanceL"));
sl@0
   854
	}
sl@0
   855
sl@0
   856
void CMMFMidiTestController::MmcSetBalanceL(TInt /*aBalance*/)
sl@0
   857
	{
sl@0
   858
	InsertInterfaceNameInChunk(_L8("SetBalanceL"));
sl@0
   859
	}
sl@0
   860
sl@0
   861
void  CMMFMidiTestController::MmcLoadCustomBankDataL(const TDesC8& /*aBankData*/,TInt& aBankId)
sl@0
   862
	{
sl@0
   863
	aBankId  = 20;
sl@0
   864
	InsertInterfaceNameInChunk(_L8("LoadCustomBankDataL"));
sl@0
   865
	}
sl@0
   866
sl@0
   867
void  CMMFMidiTestController::MmcLoadCustomInstrumentDataL(const TDesC8& /*aInstrumentData*/, TInt /*aBankDataId*/, TInt /*aInstrumentDataId*/, TInt /*aMemoryBankId*/, TInt /*aMemoryInstrumentId*/)
sl@0
   868
	{
sl@0
   869
	InsertInterfaceNameInChunk(_L8("LoadCustomInstrumentDataL"));
sl@0
   870
	}
sl@0
   871
sl@0
   872
void  CMMFMidiTestController::MmcSetMaxPolyphonyL(TInt aMaxNotes)
sl@0
   873
	{
sl@0
   874
	iMaxNotes = aMaxNotes;
sl@0
   875
	InsertInterfaceNameInChunk(_L8("SetMaxPolyphonyL"));
sl@0
   876
	}
sl@0
   877
sl@0
   878
void  CMMFMidiTestController::MmcGetRepeatsL(TInt& aNumRepeats)
sl@0
   879
	{
sl@0
   880
	aNumRepeats = iRepeatNumberOfTimes;
sl@0
   881
	InsertInterfaceNameInChunk(_L8("GetRepeats"));
sl@0
   882
	}
sl@0
   883
sl@0
   884
void  CMMFMidiTestController::MmcSetRepeatsL(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence)
sl@0
   885
	{
sl@0
   886
	iRepeatNumberOfTimes = aRepeatNumberOfTimes;
sl@0
   887
	iTrailingSilence = aTrailingSilence;
sl@0
   888
	InsertInterfaceNameInChunk(_L8("SetRepeatsL"));
sl@0
   889
	}
sl@0
   890
sl@0
   891
void  CMMFMidiTestController::MmcSetBankL(TBool /*aCustom*/)
sl@0
   892
	{
sl@0
   893
	InsertInterfaceNameInChunk(_L8("SetBankL"));
sl@0
   894
	}
sl@0
   895
sl@0
   896
void  CMMFMidiTestController::MmcIsTrackMuteL(TInt /*aTrack*/, TBool& aTrackMute)
sl@0
   897
	{
sl@0
   898
	aTrackMute = ETrue;
sl@0
   899
	InsertInterfaceNameInChunk(_L8("IsTrackMuteL"));
sl@0
   900
	}
sl@0
   901
sl@0
   902
void  CMMFMidiTestController::MmcIsChannelMuteL(TInt /*aChannel*/, TBool& aChannelMute)
sl@0
   903
	{
sl@0
   904
	aChannelMute = ETrue;
sl@0
   905
	InsertInterfaceNameInChunk(_L8("IsChannelMuteL"));
sl@0
   906
	}
sl@0
   907
sl@0
   908
void  CMMFMidiTestController::MmcGetInstrumentL(TInt /*aChannel*/, TInt& aInstrumentId, TInt& aBankId)
sl@0
   909
	{
sl@0
   910
	aInstrumentId = 10;
sl@0
   911
	aBankId = 11;
sl@0
   912
	InsertInterfaceNameInChunk(_L8("GetInstrumentL"));
sl@0
   913
	}
sl@0
   914
sl@0
   915
void  CMMFMidiTestController::MmcCloseL()
sl@0
   916
	{
sl@0
   917
	iDelayEvent->DelayClose(TTimeIntervalMicroSeconds(0));
sl@0
   918
	}
sl@0
   919
sl@0
   920
void  CMMFMidiTestController::MmcStopL(const TTimeIntervalMicroSeconds& /*aFadeOutDuration*/)
sl@0
   921
	{
sl@0
   922
	if(iDelayEvent->IsActive())
sl@0
   923
		iDelayEvent->Cancel();
sl@0
   924
	if(iMidiEventGenerator->IsActive())
sl@0
   925
		iMidiEventGenerator->Cancel();
sl@0
   926
sl@0
   927
	iDelayEvent->DelayStop(TTimeIntervalMicroSeconds(0));
sl@0
   928
	}
sl@0
   929
sl@0
   930
sl@0
   931
sl@0
   932
//
sl@0
   933
//
sl@0
   934
//
sl@0
   935
CMMFMidiTestController::CControllerTimer* CMMFMidiTestController::CControllerTimer::NewL(CMMFMidiTestController* aController)
sl@0
   936
	{
sl@0
   937
	CControllerTimer* self = new (ELeave) CControllerTimer(aController);
sl@0
   938
	CleanupStack::PushL(self);
sl@0
   939
	self->ConstructL();
sl@0
   940
	CleanupStack::Pop(self);
sl@0
   941
	return self;
sl@0
   942
	}
sl@0
   943
sl@0
   944
CMMFMidiTestController::CControllerTimer::CControllerTimer(CMMFMidiTestController* aController)
sl@0
   945
	:CTimer(EPriorityStandard)
sl@0
   946
	{
sl@0
   947
	iController = aController;
sl@0
   948
	}
sl@0
   949
sl@0
   950
void CMMFMidiTestController::CControllerTimer::DelayOpen(TTimeIntervalMicroSeconds aDelay)
sl@0
   951
	{
sl@0
   952
	ASSERT(iController);
sl@0
   953
	iType = ETmrOpenComplete;
sl@0
   954
	After(I64INT(aDelay.Int64()));
sl@0
   955
	}
sl@0
   956
sl@0
   957
void CMMFMidiTestController::CControllerTimer::DelayPlayStarted(TTimeIntervalMicroSeconds aDelay)
sl@0
   958
	{
sl@0
   959
	ASSERT(iController);
sl@0
   960
	iType = ETmrDelayPlayStarted;
sl@0
   961
	After(I64INT(aDelay.Int64()));
sl@0
   962
	}
sl@0
   963
sl@0
   964
void CMMFMidiTestController::CControllerTimer::PlayFinished(TTimeIntervalMicroSeconds aDelay)
sl@0
   965
	{
sl@0
   966
	ASSERT(iController);
sl@0
   967
	iType = ETmrPlayFinished;
sl@0
   968
	After(I64INT(aDelay.Int64()));
sl@0
   969
	}
sl@0
   970
sl@0
   971
void CMMFMidiTestController::CControllerTimer::DelaySyncUpdate(TTimeIntervalMicroSeconds aDelay)
sl@0
   972
	{
sl@0
   973
	ASSERT(iController);
sl@0
   974
	iType = ETmrSyncUpdate;
sl@0
   975
	After(I64INT(aDelay.Int64()));
sl@0
   976
	}
sl@0
   977
sl@0
   978
void CMMFMidiTestController::CControllerTimer::DelayStop(TTimeIntervalMicroSeconds aDelay)
sl@0
   979
	{
sl@0
   980
	ASSERT(iController);
sl@0
   981
	iType = ETmrDelayStop;
sl@0
   982
	After(I64INT(aDelay.Int64()));
sl@0
   983
	}
sl@0
   984
sl@0
   985
void CMMFMidiTestController::CControllerTimer::DelayClose(TTimeIntervalMicroSeconds aDelay)
sl@0
   986
	{
sl@0
   987
	ASSERT(iController);
sl@0
   988
	iType = ETmrDelayClose;
sl@0
   989
	After(I64INT(aDelay.Int64()));
sl@0
   990
	}
sl@0
   991
sl@0
   992
void CMMFMidiTestController::CControllerTimer::RunL()
sl@0
   993
	{
sl@0
   994
	ASSERT(iController);
sl@0
   995
	switch(iType) 
sl@0
   996
		{
sl@0
   997
		case ETmrOpenComplete :
sl@0
   998
			User::LeaveIfError(iController->OpenComplete());
sl@0
   999
			break;
sl@0
  1000
		case ETmrSyncUpdate :
sl@0
  1001
			User::LeaveIfError(iController->SyncUpdate());
sl@0
  1002
			break;
sl@0
  1003
		case ETmrDelayPlayStarted :
sl@0
  1004
			User::LeaveIfError(iController->PlayStarted());
sl@0
  1005
			break;
sl@0
  1006
		case ETmrPlayFinished :
sl@0
  1007
			User::LeaveIfError(iController->PlayFinished());
sl@0
  1008
			break;
sl@0
  1009
		case ETmrDelayStop :
sl@0
  1010
			User::LeaveIfError(iController->Stop());
sl@0
  1011
			break;
sl@0
  1012
		case ETmrDelayClose :
sl@0
  1013
			User::LeaveIfError(iController->Close());
sl@0
  1014
			break;
sl@0
  1015
		}
sl@0
  1016
	}
sl@0
  1017
//
sl@0
  1018
//
sl@0
  1019
//
sl@0
  1020
CMMFMidiTestController::CMidiEventGenerator* CMMFMidiTestController::CMidiEventGenerator::NewL(CMMFMidiTestController* aController)
sl@0
  1021
	{
sl@0
  1022
	CMidiEventGenerator* self = new (ELeave) CMidiEventGenerator(aController);
sl@0
  1023
	CleanupStack::PushL(self);
sl@0
  1024
	self->ConstructL();
sl@0
  1025
	CleanupStack::Pop(self);
sl@0
  1026
	return self;
sl@0
  1027
	}
sl@0
  1028
sl@0
  1029
CMMFMidiTestController::CMidiEventGenerator::CMidiEventGenerator(CMMFMidiTestController* aController)
sl@0
  1030
	:CTimer(EPriorityStandard)
sl@0
  1031
	{
sl@0
  1032
	iController = aController;
sl@0
  1033
	iDelay = TTimeIntervalMicroSeconds(0);//2 secs
sl@0
  1034
	iTriggerCount = 0;
sl@0
  1035
	}
sl@0
  1036
sl@0
  1037
void CMMFMidiTestController::CMidiEventGenerator::MidiEventTrigger()
sl@0
  1038
	{
sl@0
  1039
	switch(iTriggerCount) 
sl@0
  1040
		{
sl@0
  1041
		case  0:
sl@0
  1042
			iType = EEventTempoChanged;
sl@0
  1043
			break;
sl@0
  1044
		case  1:
sl@0
  1045
			iType = EEventVolumeChanged;
sl@0
  1046
			break;
sl@0
  1047
		case  2:
sl@0
  1048
			iType = EEventMuteChanged;
sl@0
  1049
			break;
sl@0
  1050
		case  3:
sl@0
  1051
			iType = EEventPolyphonyChanged;
sl@0
  1052
			break;
sl@0
  1053
		case  4:
sl@0
  1054
			iType = EEventInstrumentChanged;
sl@0
  1055
			break;
sl@0
  1056
		case  5:
sl@0
  1057
			iType = EEventSmfMetaDataEntryFound;
sl@0
  1058
			break;
sl@0
  1059
		case  6:
sl@0
  1060
			iType = EEventVolumeChanged;
sl@0
  1061
			break;
sl@0
  1062
		case  7:
sl@0
  1063
			iType = EEventMuteChanged;
sl@0
  1064
			break;
sl@0
  1065
		case  8:
sl@0
  1066
			iType = EEventPolyphonyChanged;
sl@0
  1067
			break;
sl@0
  1068
		case  9:
sl@0
  1069
			iType = EEventInstrumentChanged;
sl@0
  1070
			break;
sl@0
  1071
		case  10:
sl@0
  1072
			iType = EEventSmfMetaDataEntryFound;
sl@0
  1073
			break;
sl@0
  1074
		case  11:
sl@0
  1075
			iType = EEventMipMessageReceived;
sl@0
  1076
			break;
sl@0
  1077
		}
sl@0
  1078
	++iTriggerCount;
sl@0
  1079
	After(I64INT(iDelay.Int64()));
sl@0
  1080
	}
sl@0
  1081
sl@0
  1082
/*
sl@0
  1083
void CMMFMidiTestController::CMidiEventGenerator::DelaySyncUpdate(TTimeIntervalMicroSeconds aDelay)
sl@0
  1084
	{
sl@0
  1085
	ASSERT(iController);
sl@0
  1086
	iType = ETmrSyncUpdate;
sl@0
  1087
	After(I64INT(aDelay.Int64()));
sl@0
  1088
	}
sl@0
  1089
*/
sl@0
  1090
sl@0
  1091
void CMMFMidiTestController::CMidiEventGenerator::RunL()
sl@0
  1092
	{
sl@0
  1093
	ASSERT(iController);
sl@0
  1094
	
sl@0
  1095
	switch(iType) 
sl@0
  1096
		{
sl@0
  1097
		case  EEventTempoChanged:
sl@0
  1098
			User::LeaveIfError(iController->TempoChanged());
sl@0
  1099
			break;
sl@0
  1100
		case  EEventVolumeChanged:
sl@0
  1101
			User::LeaveIfError(iController->VolumeChanged());
sl@0
  1102
			break;
sl@0
  1103
		case  EEventMuteChanged:
sl@0
  1104
			User::LeaveIfError(iController->MuteChanged());
sl@0
  1105
			break;
sl@0
  1106
		case  EEventPolyphonyChanged:
sl@0
  1107
			User::LeaveIfError(iController->PolyphonyChanged());
sl@0
  1108
			break;
sl@0
  1109
		case  EEventInstrumentChanged:
sl@0
  1110
			User::LeaveIfError(iController->InstrumentChanged());
sl@0
  1111
			break;
sl@0
  1112
		case  EEventSmfMetaDataEntryFound:
sl@0
  1113
			User::LeaveIfError(iController->SmfMetaDataEntryFound());
sl@0
  1114
			break;
sl@0
  1115
		case  EEventMipMessageReceived:
sl@0
  1116
			User::LeaveIfError(iController->MipMessageReceived());
sl@0
  1117
			break;
sl@0
  1118
		}
sl@0
  1119
	}
sl@0
  1120
sl@0
  1121
void CMMFMidiTestController::InsertInterfaceNameInChunk(const TDesC8& aInterfaceName)
sl@0
  1122
	{
sl@0
  1123
	TFindChunk findChunk(KMidiClntChunk);
sl@0
  1124
	TFullName chunkName;
sl@0
  1125
	TInt err = findChunk.Next(chunkName);
sl@0
  1126
sl@0
  1127
	if(err == KErrNone)
sl@0
  1128
		{
sl@0
  1129
		RChunk chunk;
sl@0
  1130
		chunk.OpenGlobal(KMidiClntChunk,EFalse);
sl@0
  1131
		TUint8* base = chunk.Base();
sl@0
  1132
		for(TInt i=0; i<40 ; i++)
sl@0
  1133
			{
sl@0
  1134
			*base = 0x0;
sl@0
  1135
			base++;
sl@0
  1136
			}
sl@0
  1137
		TBuf8<40> buf(aInterfaceName);
sl@0
  1138
		TPtr8 ptr(chunk.Base(),chunk.Size());
sl@0
  1139
		ptr = buf;
sl@0
  1140
		chunk.Close();
sl@0
  1141
		RSemaphore sem;
sl@0
  1142
		sem.OpenGlobal(KMidiClntSemaphore);
sl@0
  1143
		sem.Signal();
sl@0
  1144
		sem.Close();
sl@0
  1145
		}
sl@0
  1146
	}
sl@0
  1147
sl@0
  1148
TInt CMMFMidiTestController::MdcEvaluateIntent(ContentAccess::TIntent aIntent) 
sl@0
  1149
   {
sl@0
  1150
   if (iDataSource == NULL)
sl@0
  1151
	   	{
sl@0
  1152
	   	return KErrNotReady;
sl@0
  1153
		}      
sl@0
  1154
   if (iDataSource && iDataSource->DataSourceType()==KUidMmfFileSource)
sl@0
  1155
      {
sl@0
  1156
      CMMFFile* file = static_cast<CMMFFile*>(iDataSource);
sl@0
  1157
      TInt err = file->EvaluateIntent(aIntent);
sl@0
  1158
      return err;
sl@0
  1159
      }
sl@0
  1160
   else
sl@0
  1161
      {
sl@0
  1162
      // Evaluating intent will always succeed on sinks that 
sl@0
  1163
      // don't support DRM
sl@0
  1164
      return KErrNone;
sl@0
  1165
      }
sl@0
  1166
   
sl@0
  1167
   }
sl@0
  1168
   
sl@0
  1169
TInt CMMFMidiTestController::MdcExecuteIntent(ContentAccess::TIntent aIntent)
sl@0
  1170
   {
sl@0
  1171
   	if (iDataSource == NULL)
sl@0
  1172
	   	{
sl@0
  1173
	   	return KErrNotReady;
sl@0
  1174
		}   
sl@0
  1175
   	if (iDataSource->DataSourceType()==KUidMmfFileSource)
sl@0
  1176
	      {
sl@0
  1177
	      CMMFFile* file = static_cast<CMMFFile*>(iDataSource);
sl@0
  1178
	      TInt err = file->ExecuteIntent(aIntent);
sl@0
  1179
	      return err;
sl@0
  1180
	      }
sl@0
  1181
   	else
sl@0
  1182
	      {
sl@0
  1183
	      // Executing intent will always succeed on sinks that 
sl@0
  1184
	      // don't support DRM
sl@0
  1185
	      return KErrNone;
sl@0
  1186
	      }
sl@0
  1187
   }
sl@0
  1188
   
sl@0
  1189
TInt CMMFMidiTestController::MdcDisableAutomaticIntent(TBool aDisableAutoIntent)
sl@0
  1190
   {
sl@0
  1191
   iDisableAutoIntent = aDisableAutoIntent;
sl@0
  1192
   return KErrNone;
sl@0
  1193
   }
sl@0
  1194
   
sl@0
  1195
   
sl@0
  1196
TInt CMMFMidiTestController::MdcSetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue)
sl@0
  1197
   {
sl@0
  1198
   if (iDataSource == NULL)
sl@0
  1199
   	{
sl@0
  1200
   	return KErrNotReady;
sl@0
  1201
   	}
sl@0
  1202
   	
sl@0
  1203
   if (iDataSource->DataSourceType()==KUidMmfFileSource)
sl@0
  1204
      {
sl@0
  1205
      CMMFFile* file = static_cast<CMMFFile*>(iDataSource);
sl@0
  1206
      TInt err = file->SetAgentProperty(aProperty, aValue);
sl@0
  1207
      return err;
sl@0
  1208
      }
sl@0
  1209
   else
sl@0
  1210
      {
sl@0
  1211
      return KErrNone;
sl@0
  1212
      }
sl@0
  1213
   }
sl@0
  1214
sl@0
  1215
// __________________________________________________________________________
sl@0
  1216
// Exported proxy for instantiation method resolution
sl@0
  1217
// Define the interface UIDs
sl@0
  1218
sl@0
  1219
sl@0
  1220
const TImplementationProxy ImplementationTable[] =
sl@0
  1221
	{
sl@0
  1222
		IMPLEMENTATION_PROXY_ENTRY(KMmfMidiTestControllerUid,	CMMFMidiTestController::NewL)
sl@0
  1223
	};
sl@0
  1224
sl@0
  1225
EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
sl@0
  1226
	{
sl@0
  1227
	aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
sl@0
  1228
sl@0
  1229
	return ImplementationTable;
sl@0
  1230
	}
sl@0
  1231