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