os/mm/mmlibs/mmfw/tsrc/mmfunittest/MidiClnt/MidiTestCntrl/Ts_cmmfmiditestcontroller.h
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".
8 // Initial Contributors:
9 // Nokia Corporation - initial contribution.
17 #ifndef TS_CMMFMIDITESTCONTROLLER_H
18 #define TS_CMMFMIDITESTCONTROLLER_H
25 #include <ecom/implementationproxy.h>
27 #include <mmf/common/mmfcontroller.h>
28 #include <mmf/server/mmfdatasource.h>
29 #include <mmf/server/mmfdatasink.h>
31 #include <testframework.h>
32 #include <mmf/common/midistandardcustomcommands.h>
33 #include <mmf/common/mmfdrmcustomcommands.h>
34 #include "CmmfMidiTestControllerUIDs.hrh"
37 class CMMFMidiTestController : public CMMFController,
38 public MMidiCustomCommandImplementor,
39 public MMMFDRMCustomCommandImplementor
42 static CMMFMidiTestController* NewL(void);
43 static CMMFMidiTestController* NewLC(void);
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();
54 virtual void PauseL();
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);
64 TInt SendEventToClient(const TMMFEvent& aEvent);
74 TInt PolyphonyChanged();
75 TInt InstrumentChanged();
76 TInt SmfMetaDataEntryFound();
77 TInt MipMessageReceived();
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);
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);
152 class CControllerTimer : public CTimer
159 ETmrDelayPlayStarted,
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);
175 CControllerTimer(CMMFMidiTestController* aController);
176 CMMFMidiTestController* iController;
180 class CMidiEventGenerator : public CTimer
188 EEventPolyphonyChanged,
189 EEventInstrumentChanged,
190 EEventSmfMetaDataEntryFound,
191 EEventMipMessageReceived
194 static CMidiEventGenerator* NewL(CMMFMidiTestController* aController);
195 void MidiEventTrigger();
198 CMidiEventGenerator(CMMFMidiTestController* aController);
199 CMMFMidiTestController* iController;
201 TTimeIntervalMicroSeconds iDelay;
206 CMMFMidiTestController(void);
207 ~CMMFMidiTestController(void);
208 void ConstructL(void);
209 void InsertInterfaceNameInChunk(const TDesC8& aInterfaceName);
212 // CMidiCustomCommandParser* iMidiParser;
213 MMidiEventHandler* iMidiEventHandler;
214 CControllerTimer* iDelayEvent;
215 CMidiEventGenerator* iMidiEventGenerator;
220 TInt iTempoMicroBeatsPerMinute;
221 TInt iPitchTranspositionCents;
223 TTimeIntervalMicroSeconds iDurationMicroSeconds;
224 TInt64 iDurationMicroBeats;
226 TTimeIntervalMicroSeconds iPositionMicroSeconds;
227 TInt64 iPositionMicroBeats;
229 TInt iNumInstruments;
230 TTimeIntervalMicroSeconds iStopTime;
236 TInt iRepeatNumberOfTimes;
237 TTimeIntervalMicroSeconds iTrailingSilence;
240 CArrayFixFlat<TReal32>* iChanVolumeValues;
241 TMidiState iCurrentMidiTestControllerState;
242 TBool iDisableAutoIntent;
243 MDataSource* iDataSource;