os/mm/mmlibs/mmfw/tsrc/mmfunittest/MidiClnt/MidiTestCntrl/Ts_cmmfmiditestcontroller.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
sl@0
     1
// Copyright (c) 2003-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
sl@0
    17
#ifndef TS_CMMFMIDITESTCONTROLLER_H
sl@0
    18
#define TS_CMMFMIDITESTCONTROLLER_H
sl@0
    19
sl@0
    20
#include <e32std.h>
sl@0
    21
#include <e32base.h>
sl@0
    22
sl@0
    23
sl@0
    24
sl@0
    25
#include <ecom/implementationproxy.h>
sl@0
    26
sl@0
    27
#include <mmf/common/mmfcontroller.h>
sl@0
    28
#include <mmf/server/mmfdatasource.h>
sl@0
    29
#include <mmf/server/mmfdatasink.h>
sl@0
    30
sl@0
    31
#include <testframework.h>
sl@0
    32
#include <mmf/common/midistandardcustomcommands.h>
sl@0
    33
#include <mmf/common/mmfdrmcustomcommands.h>
sl@0
    34
#include "CmmfMidiTestControllerUIDs.hrh"
sl@0
    35
sl@0
    36
sl@0
    37
class CMMFMidiTestController : public CMMFController,
sl@0
    38
								public MMidiCustomCommandImplementor,
sl@0
    39
								public MMMFDRMCustomCommandImplementor
sl@0
    40
{
sl@0
    41
public:
sl@0
    42
	static CMMFMidiTestController* NewL(void);
sl@0
    43
	static CMMFMidiTestController* NewLC(void);
sl@0
    44
sl@0
    45
	//implement CMMFMidiTestController ecom plugin interface
sl@0
    46
	virtual void AddDataSourceL(MDataSource& aDataSource);
sl@0
    47
	virtual void AddDataSinkL(MDataSink& aDataSink);
sl@0
    48
	virtual void RemoveDataSourceL(MDataSource& aDataSource);
sl@0
    49
	virtual void RemoveDataSinkL(MDataSink& aDataSink);
sl@0
    50
	virtual void RemoveSourceSinkL();
sl@0
    51
	virtual void ResetL();//XXX - replacement for RemoveSourceSink()
sl@0
    52
	virtual void PrimeL();
sl@0
    53
	virtual void PlayL();
sl@0
    54
	virtual void PauseL();
sl@0
    55
	virtual void StopL();
sl@0
    56
	virtual TTimeIntervalMicroSeconds PositionL() const;
sl@0
    57
	virtual void SetPositionL(const TTimeIntervalMicroSeconds& aPosition);
sl@0
    58
	virtual TTimeIntervalMicroSeconds DurationL() const;
sl@0
    59
	virtual void CustomCommand(TMMFMessage& aMessage);
sl@0
    60
	virtual void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
sl@0
    61
	virtual void GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries);
sl@0
    62
	virtual CMMFMetaDataEntry* GetMetaDataEntryL(TInt aIndex);
sl@0
    63
sl@0
    64
	TInt SendEventToClient(const TMMFEvent& aEvent);
sl@0
    65
	TInt OpenComplete();
sl@0
    66
	TInt PlayStarted();
sl@0
    67
	TInt SyncUpdate();
sl@0
    68
	TInt PlayFinished();
sl@0
    69
	TInt Stop();
sl@0
    70
	TInt Close();
sl@0
    71
	TInt TempoChanged();
sl@0
    72
	TInt VolumeChanged();
sl@0
    73
	TInt MuteChanged();
sl@0
    74
	TInt PolyphonyChanged();
sl@0
    75
	TInt InstrumentChanged();
sl@0
    76
	TInt SmfMetaDataEntryFound();
sl@0
    77
	TInt MipMessageReceived();
sl@0
    78
sl@0
    79
	//-------------------------------//
sl@0
    80
	// MMidiCustomCommandImplementor //
sl@0
    81
	//-------------------------------//
sl@0
    82
	virtual void  MmcSetPositionMicroBeatsL(TInt64 aMicroBeats);
sl@0
    83
	virtual void  MmcPositionMicroBeatsL(TInt64& aMicroBeats);
sl@0
    84
	virtual void  MmcPlayNoteL(TInt aChannel,TInt aNote,const TTimeIntervalMicroSeconds& aDuration,TInt aNoteOnVelocity,TInt aNoteOffVelocity);
sl@0
    85
	virtual void  MmcPlayNoteL(TInt aChannel,TInt aNote,const TTimeIntervalMicroSeconds& aStartTime, const TTimeIntervalMicroSeconds& aDuration,TInt aNoteOnVelocity,TInt aNoteOffVelocity);
sl@0
    86
	virtual void  MmcStopNotesL(TInt aChannel);
sl@0
    87
	virtual void  MmcNoteOnL(TInt aChannel,TInt aNote,TInt aVelocity);
sl@0
    88
	virtual void  MmcNoteOffL(TInt aChannel,TInt aNote,TInt aVelocity);
sl@0
    89
	virtual void  MmcPlaybackRateL(TInt& aPlayBackRate);
sl@0
    90
	virtual void  MmcSetPlaybackRateL(TInt aPlayBackRate);
sl@0
    91
	virtual void  MmcMaxPlaybackRateL(TInt& aMaxRate);
sl@0
    92
	virtual void  MmcMinPlaybackRateL(TInt& aMinRate);
sl@0
    93
	virtual void  MmcTempoMicroBeatsPerMinuteL(TInt& aMicroBeatsPerMinute);
sl@0
    94
	virtual void  MmcSetTempoL(TInt aMicroBeatsPerMinute);
sl@0
    95
	virtual void  MmcPitchTranspositionCentsL(TInt& aPitch);
sl@0
    96
	virtual void  MmcSetPitchTranspositionL(TInt aCents, TInt& aCentsApplied);
sl@0
    97
	virtual void  MmcDurationMicroBeatsL(TInt64& aDuration);
sl@0
    98
	virtual void  MmcNumTracksL(TInt& aTracks);
sl@0
    99
	virtual void  MmcSetTrackMuteL(TInt aTrack, TBool aMuted);
sl@0
   100
	virtual void  MmcMimeTypeL(TDes8& aMimeType);
sl@0
   101
	virtual void  MmcSetSyncUpdateCallbackIntervalL(const TTimeIntervalMicroSeconds& aMicroSeconds,TInt64 aMicroBeats);
sl@0
   102
	virtual void  MmcSendMessageL(const TDesC8& aMidiMessage, TInt& aBytes);
sl@0
   103
	virtual void  MmcSendMessageL(const TDesC8& aMidiMessage,const TTimeIntervalMicroSeconds& aTime, TInt& aBytes);
sl@0
   104
	virtual void  MmcSendMipMessageL(const TArray<TMipMessageEntry>& aEntry);
sl@0
   105
	virtual void  MmcNumberOfBanksL(TBool aCustom, TInt& aNumBanks);
sl@0
   106
	virtual void  MmcGetBankIdL(TBool aCustom, TInt aBankIndex, TInt& aBankId);
sl@0
   107
	virtual void  MmcLoadCustomBankL(const TDesC& aFileName,TInt& aBankId);
sl@0
   108
	virtual void  MmcUnloadCustomBankL(TInt aBankId);
sl@0
   109
	virtual void  MmcCustomBankLoadedL(TInt aBankId, TBool& aBankLoaded);
sl@0
   110
	virtual void  MmcUnloadAllCustomBanksL();
sl@0
   111
	virtual void  MmcNumberOfInstrumentsL(TInt aBankId, TBool aCustom, TInt& aNumInstruments);
sl@0
   112
	virtual void  MmcGetInstrumentIdL(TInt aBankId,TBool aCustom,TInt aInstrumentIndex, TInt& aInstrumentId);
sl@0
   113
	virtual const TDesC& MmcInstrumentNameL(TInt aBankId, TBool aCustom, TInt aInstrumentId);
sl@0
   114
	virtual void  MmcSetInstrumentL(TInt aChannel,TInt aBankId,TInt aInstrumentId);
sl@0
   115
	virtual void  MmcLoadCustomInstrumentL(const TDesC& aFileName, TInt aFileBankId, TInt aFileInstrumentId, TInt aMemoryBankId, TInt aMemoryInstrumentId);
sl@0
   116
	virtual void  MmcUnloadCustomInstrumentL(TInt aCustomBankId,TInt aInstrumentId);
sl@0
   117
	virtual const TDesC& MmcPercussionKeyNameL(TInt aNote, TInt aBankId, TBool aCustom, TInt aInstrumentId);
sl@0
   118
	virtual void  MmcStopTimeL(TTimeIntervalMicroSeconds& aStopTime);
sl@0
   119
	virtual void  MmcSetStopTimeL(const TTimeIntervalMicroSeconds& aStopTime);
sl@0
   120
	virtual void  MmcPolyphonyL(TInt& aNumNotes);
sl@0
   121
	virtual void  MmcChannelsSupportedL(TInt& aChannels);
sl@0
   122
	virtual void  MmcChannelVolumeL(TInt aChannel, TReal32& aChannelVol);
sl@0
   123
	virtual void  MmcMaxChannelVolumeL(TReal32& aMaxVol);
sl@0
   124
	virtual void  MmcSetChannelVolumeL(TInt aChannel,TReal32 aVolume);
sl@0
   125
	virtual void  MmcSetChannelMuteL(TInt aChannel,TBool aMuted);
sl@0
   126
	virtual void  MmcVolumeL(TInt& aVolume);
sl@0
   127
	virtual void  MmcMaxVolumeL(TInt& aMaxVolume);
sl@0
   128
	virtual void  MmcSetVolumeL(TInt aVolume);
sl@0
   129
	virtual void  MmcSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration);
sl@0
   130
	virtual void  MmcGetBalanceL(TInt& aBalance);
sl@0
   131
	virtual void  MmcSetBalanceL(TInt aBalance);
sl@0
   132
	virtual void  MmcLoadCustomBankDataL(const TDesC8& aBankData,TInt& aBankId);
sl@0
   133
	virtual void  MmcLoadCustomInstrumentDataL(const TDesC8& aInstrumentData, TInt aBankDataId, TInt aInstrumentDataId, TInt aMemoryBankId, TInt aMemoryInstrumentId);
sl@0
   134
	virtual void  MmcSetMaxPolyphonyL(TInt aMaxNotes);
sl@0
   135
	virtual void  MmcGetRepeatsL(TInt& aNumRepeats);
sl@0
   136
	virtual void  MmcSetRepeatsL(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
sl@0
   137
	virtual void  MmcSetBankL(TBool aCustom);
sl@0
   138
	virtual void  MmcIsTrackMuteL(TInt aTrack, TBool& aTrackMute);
sl@0
   139
	virtual void  MmcIsChannelMuteL(TInt aChannel, TBool& aChannelMute);
sl@0
   140
	virtual void  MmcGetInstrumentL(TInt aChannel, TInt& aInstrumentId, TInt& aBankId);
sl@0
   141
	virtual void  MmcCloseL();
sl@0
   142
	virtual void  MmcStopL(const TTimeIntervalMicroSeconds& aFadeOutDuration);
sl@0
   143
	virtual void  MmcMaxPolyphonyL(TInt& aMaxNotes);
sl@0
   144
	
sl@0
   145
	// MMMFDRMCustomCommandImplementor
sl@0
   146
	virtual TInt MdcDisableAutomaticIntent(TBool aDisableAutoIntent);
sl@0
   147
	virtual TInt MdcExecuteIntent(ContentAccess::TIntent aIntent);
sl@0
   148
	virtual TInt MdcEvaluateIntent(ContentAccess::TIntent aIntent);
sl@0
   149
	virtual TInt MdcSetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue);
sl@0
   150
private:
sl@0
   151
sl@0
   152
	class CControllerTimer : public CTimer
sl@0
   153
		{
sl@0
   154
	public:
sl@0
   155
		enum TimerType
sl@0
   156
			{
sl@0
   157
			ETmrOpenComplete,
sl@0
   158
			ETmrSyncUpdate,
sl@0
   159
			ETmrDelayPlayStarted,
sl@0
   160
			ETmrPlayFinished,
sl@0
   161
			ETmrDelayStop,
sl@0
   162
			ETmrDelayClose
sl@0
   163
			};
sl@0
   164
	public:
sl@0
   165
		static CControllerTimer* NewL(CMMFMidiTestController* aController);
sl@0
   166
		void DelayOpen(TTimeIntervalMicroSeconds aDelay);
sl@0
   167
		void DelayPlayStarted(TTimeIntervalMicroSeconds aDelay);
sl@0
   168
		void PlayFinished(TTimeIntervalMicroSeconds aDelay);
sl@0
   169
		void DelaySyncUpdate(TTimeIntervalMicroSeconds aDelay);
sl@0
   170
		void DelayStop(TTimeIntervalMicroSeconds aDelay);
sl@0
   171
		void DelayClose(TTimeIntervalMicroSeconds aDelay);
sl@0
   172
sl@0
   173
		void RunL();
sl@0
   174
	private:
sl@0
   175
		CControllerTimer(CMMFMidiTestController* aController);
sl@0
   176
		CMMFMidiTestController* iController;
sl@0
   177
		TimerType iType;
sl@0
   178
		};
sl@0
   179
sl@0
   180
	class CMidiEventGenerator : public CTimer
sl@0
   181
		{
sl@0
   182
	public:
sl@0
   183
		enum TEventType
sl@0
   184
			{
sl@0
   185
			EEventTempoChanged,
sl@0
   186
			EEventVolumeChanged,
sl@0
   187
			EEventMuteChanged,
sl@0
   188
			EEventPolyphonyChanged,
sl@0
   189
			EEventInstrumentChanged,
sl@0
   190
			EEventSmfMetaDataEntryFound,
sl@0
   191
			EEventMipMessageReceived
sl@0
   192
			};
sl@0
   193
	public:
sl@0
   194
		static CMidiEventGenerator* NewL(CMMFMidiTestController* aController);
sl@0
   195
		void MidiEventTrigger();
sl@0
   196
		void RunL();
sl@0
   197
	private:
sl@0
   198
		CMidiEventGenerator(CMMFMidiTestController* aController);
sl@0
   199
		CMMFMidiTestController* iController;
sl@0
   200
		TEventType iType;
sl@0
   201
		TTimeIntervalMicroSeconds iDelay;
sl@0
   202
		TInt iTriggerCount;
sl@0
   203
		};
sl@0
   204
sl@0
   205
private:
sl@0
   206
	CMMFMidiTestController(void);
sl@0
   207
	~CMMFMidiTestController(void);
sl@0
   208
	void ConstructL(void);
sl@0
   209
	void InsertInterfaceNameInChunk(const TDesC8& aInterfaceName);
sl@0
   210
sl@0
   211
private:
sl@0
   212
//	CMidiCustomCommandParser* iMidiParser;
sl@0
   213
	MMidiEventHandler* iMidiEventHandler;
sl@0
   214
	CControllerTimer* iDelayEvent;
sl@0
   215
	CMidiEventGenerator* iMidiEventGenerator;
sl@0
   216
sl@0
   217
	TInt iPlayBackRate;
sl@0
   218
	TInt iMaxRate;
sl@0
   219
	TInt iMinRate;
sl@0
   220
	TInt iTempoMicroBeatsPerMinute;
sl@0
   221
	TInt iPitchTranspositionCents;
sl@0
   222
	TInt iCentsApplied;
sl@0
   223
	TTimeIntervalMicroSeconds iDurationMicroSeconds;
sl@0
   224
	TInt64 iDurationMicroBeats;
sl@0
   225
	TInt iNumTracks;
sl@0
   226
	TTimeIntervalMicroSeconds iPositionMicroSeconds;
sl@0
   227
	TInt64 iPositionMicroBeats;
sl@0
   228
	TInt iNumBanks;
sl@0
   229
	TInt iNumInstruments;
sl@0
   230
	TTimeIntervalMicroSeconds iStopTime;
sl@0
   231
	TInt iNumNotes;
sl@0
   232
	TInt iChannels;
sl@0
   233
	TReal32 iMaxVol;
sl@0
   234
	TInt iMaxVolume;
sl@0
   235
	TInt iBalance;
sl@0
   236
	TInt iRepeatNumberOfTimes;
sl@0
   237
	TTimeIntervalMicroSeconds iTrailingSilence;
sl@0
   238
	TInt iMaxNotes;
sl@0
   239
	
sl@0
   240
	CArrayFixFlat<TReal32>* iChanVolumeValues;
sl@0
   241
	TMidiState iCurrentMidiTestControllerState;
sl@0
   242
	TBool iDisableAutoIntent;
sl@0
   243
	MDataSource*  iDataSource;
sl@0
   244
};
sl@0
   245
sl@0
   246
#endif