sl@0: // Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // sl@0: sl@0: #include sl@0: sl@0: //const TInt KOpenDelay =500000;; // EABI warning removal sl@0: //const TInt KPrepareDelay = 500000;; // EABI warning removal sl@0: //const TInt KFrameReadyDelay = 500000;; // EABI warning removal sl@0: //const TInt KDuration = 1000000; // EABI warning removal sl@0: //const TInt KFrameLength = 100000; // EABI warning removal sl@0: sl@0: //const TInt KMaxVolume = 100; // EABI warning removal sl@0: //const TInt KFrameWidth = 100; // EABI warning removal sl@0: //const TInt KFrameHeight = 50; // EABI warning removal sl@0: sl@0: //const TInt KBufMimeTypeGranularity = 4; // EABI warning removal sl@0: sl@0: const TUint8 KMaxChannelNumber = 15; sl@0: sl@0: #include sl@0: #include "Ts_cmmfmiditestcontroller.h" sl@0: sl@0: #include sl@0: sl@0: sl@0: sl@0: /* sl@0: _LIT(KMmfTestControllerCategory, "CMMFTestController"); sl@0: GLDEF_C void Panic(TMmfTestControllerPanic aReason) sl@0: { sl@0: User::Panic(KMmfTestControllerCategory, aReason); sl@0: } sl@0: */ sl@0: _LIT(KMidiClntChunk, "MidiClntChunk"); sl@0: _LIT(KMidiClntSemaphore, "MidiClntSemaphore"); sl@0: sl@0: sl@0: CMMFMidiTestController* CMMFMidiTestController::NewL() sl@0: { sl@0: CMMFMidiTestController* self = CMMFMidiTestController::NewLC(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CMMFMidiTestController* CMMFMidiTestController::NewLC(void) sl@0: { sl@0: CMMFMidiTestController* self = new (ELeave) CMMFMidiTestController(); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: return self; sl@0: } sl@0: sl@0: CMMFMidiTestController::CMMFMidiTestController() sl@0: { sl@0: iPlayBackRate = 1001; sl@0: iMinRate = 1002; sl@0: iMaxRate = 1003; sl@0: iTempoMicroBeatsPerMinute = 1004; sl@0: iPitchTranspositionCents= 1005; sl@0: iCentsApplied = 1006; sl@0: iDurationMicroSeconds = 1007; sl@0: iDurationMicroBeats = 1008; sl@0: iNumTracks = 1009; sl@0: iPositionMicroSeconds = 1010; sl@0: iPositionMicroBeats = 1011; sl@0: iNumBanks = 1012; sl@0: iNumInstruments = 1013; sl@0: iStopTime = 999; sl@0: iNumNotes = 57; sl@0: iChannels = 15; sl@0: iMaxVol = 60000; sl@0: iMaxVolume = 100000; sl@0: iBalance = 2; sl@0: iRepeatNumberOfTimes = 0; sl@0: iTrailingSilence = TTimeIntervalMicroSeconds(0); sl@0: iCurrentMidiTestControllerState = EMidiStateClosedDisengaged; sl@0: } sl@0: sl@0: CMMFMidiTestController::~CMMFMidiTestController(void) sl@0: { sl@0: delete iDelayEvent; sl@0: delete iMidiEventGenerator; sl@0: delete iChanVolumeValues; sl@0: } sl@0: sl@0: void CMMFMidiTestController::ConstructL (void) sl@0: { sl@0: iDelayEvent = CControllerTimer::NewL(this); sl@0: CActiveScheduler::Add(iDelayEvent); sl@0: sl@0: iMidiEventGenerator = CMidiEventGenerator::NewL(this); sl@0: CActiveScheduler::Add(iMidiEventGenerator); sl@0: sl@0: //TUid uid = {0x101F945C}; sl@0: CMidiCustomCommandParser* midiParser = CMidiCustomCommandParser::NewL(*this); sl@0: iMidiEventHandler = midiParser; sl@0: CleanupStack::PushL(midiParser); sl@0: AddCustomCommandParserL(*midiParser); sl@0: CleanupStack::Pop(); sl@0: sl@0: CMMFDRMCustomCommandParser* drmParser = CMMFDRMCustomCommandParser::NewL(*this); sl@0: CleanupStack::PushL(drmParser); sl@0: AddCustomCommandParserL(*drmParser); sl@0: CleanupStack::Pop(); sl@0: sl@0: iChanVolumeValues = new(ELeave)CArrayFixFlat(KMaxChannelNumber); sl@0: if (iChanVolumeValues) sl@0: { sl@0: for (TInt i=0; i<=KMaxChannelNumber; i++) sl@0: iChanVolumeValues->AppendL(0); sl@0: } sl@0: } sl@0: sl@0: // The method below need to be filled in with the correct responses sl@0: sl@0: void CMMFMidiTestController::AddDataSourceL(MDataSource& aDataSource) sl@0: { sl@0: iDataSource = &aDataSource; sl@0: iDelayEvent->DelayOpen(TTimeIntervalMicroSeconds(1000000));//1sec sl@0: } sl@0: sl@0: void CMMFMidiTestController::AddDataSinkL(MDataSink& /*aDataSink*/) sl@0: { sl@0: } sl@0: sl@0: void CMMFMidiTestController::RemoveDataSourceL(MDataSource& /*aDataSource*/) sl@0: { sl@0: iDataSource = NULL; sl@0: } sl@0: sl@0: void CMMFMidiTestController::RemoveDataSinkL(MDataSink& /*aDataSink*/) sl@0: { sl@0: } sl@0: sl@0: void CMMFMidiTestController::RemoveSourceSinkL() sl@0: { sl@0: } sl@0: sl@0: sl@0: void CMMFMidiTestController::ResetL() //XXX - replacement for RemoveSourceSink() sl@0: { sl@0: } sl@0: sl@0: /*No leave happens when there is no iDataSource here because a sl@0: user suppose to perform Midi Live Event even when there sl@0: is no resource (file) opened.*/ sl@0: void CMMFMidiTestController::PrimeL() sl@0: { sl@0: if (iDataSource) sl@0: { sl@0: iDataSource->SourcePrimeL(); sl@0: } sl@0: } sl@0: sl@0: void CMMFMidiTestController::PlayL() sl@0: { sl@0: if (iDataSource) sl@0: { sl@0: if (!iDisableAutoIntent) sl@0: { sl@0: User::LeaveIfError( MdcExecuteIntent(ContentAccess::EPlay) ); sl@0: } sl@0: } sl@0: iDelayEvent->DelayPlayStarted(TTimeIntervalMicroSeconds(100000));//1 sec sl@0: } sl@0: sl@0: void CMMFMidiTestController::PauseL() sl@0: { sl@0: if (iDataSource) sl@0: { sl@0: iDataSource->SourcePauseL(); sl@0: } sl@0: else sl@0: { sl@0: User::Leave(KErrNotReady); sl@0: } sl@0: } sl@0: sl@0: void CMMFMidiTestController::StopL() sl@0: { sl@0: if(iDelayEvent->IsActive()) sl@0: { sl@0: iDelayEvent->Cancel(); sl@0: } sl@0: iDelayEvent->DelayStop(TTimeIntervalMicroSeconds(0)); sl@0: if (iDataSource) sl@0: { sl@0: iDataSource->SourceStopL(); sl@0: } sl@0: } sl@0: sl@0: TTimeIntervalMicroSeconds CMMFMidiTestController::PositionL() const sl@0: { sl@0: if (!iDataSource) sl@0: { sl@0: User::Leave(KErrNotReady); sl@0: } sl@0: return iPositionMicroSeconds; sl@0: sl@0: } sl@0: sl@0: void CMMFMidiTestController::SetPositionL(const TTimeIntervalMicroSeconds& /*aPosition*/) sl@0: { sl@0: } sl@0: sl@0: TTimeIntervalMicroSeconds CMMFMidiTestController::DurationL() const sl@0: { sl@0: return iDurationMicroSeconds; sl@0: } sl@0: sl@0: void CMMFMidiTestController::CustomCommand(TMMFMessage& aMessage) sl@0: { sl@0: if (aMessage.Destination().InterfaceId() == KUidInterfaceMMFDRMControl) sl@0: { sl@0: aMessage.Complete(KErrNotSupported); sl@0: } sl@0: else sl@0: { sl@0: aMessage.Complete(KErrNone); sl@0: } sl@0: } sl@0: sl@0: void CMMFMidiTestController::SetPrioritySettings(const TMMFPrioritySettings& /*aPrioritySettings*/) sl@0: { sl@0: } sl@0: sl@0: void CMMFMidiTestController::GetNumberOfMetaDataEntriesL(TInt& aNumberOfEntries) sl@0: { sl@0: aNumberOfEntries = 10; sl@0: } sl@0: sl@0: CMMFMetaDataEntry* CMMFMidiTestController::GetMetaDataEntryL(TInt /*aIndex*/) sl@0: { sl@0: CMMFMetaDataEntry* metaDataEntry = NULL; sl@0: return metaDataEntry; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::SendEventToClient(const TMMFEvent& aEvent) sl@0: { sl@0: //send event to client... sl@0: TInt result = DoSendEventToClient(aEvent); sl@0: return result; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::OpenComplete() sl@0: { sl@0: CMMFMidiEvent* opencomplete = new CMMFMidiEvent(KMMFEventCategoryMidiOpenDataSourceComplete, KErrNone); sl@0: if(!opencomplete) sl@0: return KErrNoMemory; sl@0: switch (iCurrentMidiTestControllerState) sl@0: { sl@0: case EMidiStateClosedDisengaged: sl@0: opencomplete->iOldState = EMidiStateClosedDisengaged; sl@0: opencomplete->iNewState = EMidiStateOpenDisengaged; sl@0: iCurrentMidiTestControllerState = EMidiStateOpenDisengaged; sl@0: break; sl@0: case EMidiStateOpenPlaying: sl@0: opencomplete->iOldState = EMidiStateOpenPlaying; sl@0: opencomplete->iNewState = EMidiStateOpenEngaged; sl@0: iCurrentMidiTestControllerState = EMidiStateOpenEngaged; sl@0: break; sl@0: default: sl@0: opencomplete->iOldState = iCurrentMidiTestControllerState; sl@0: opencomplete->iNewState = iCurrentMidiTestControllerState; sl@0: opencomplete->iEventType = KMMFErrorCategoryControllerGeneralError; sl@0: break; sl@0: } sl@0: opencomplete->iMicroSeconds = iDurationMicroSeconds; sl@0: iMidiEventHandler->SendMidiEventToClient(*opencomplete); sl@0: delete opencomplete; sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::PlayStarted() sl@0: { sl@0: CMMFMidiEvent* playStarted = new CMMFMidiEvent(KMMFEventCategoryMidiPlaying, KErrNone); sl@0: if(!playStarted) sl@0: return KErrNoMemory; sl@0: // decide which is the state the MIDI controller can go into when Play is called sl@0: switch (iCurrentMidiTestControllerState) sl@0: { sl@0: case EMidiStateClosedDisengaged: sl@0: playStarted->iOldState = EMidiStateClosedDisengaged; sl@0: playStarted->iNewState = EMidiStateClosedEngaged; sl@0: iCurrentMidiTestControllerState = EMidiStateClosedEngaged; sl@0: playStarted->iMicroSeconds = TTimeIntervalMicroSeconds(0); sl@0: iMidiEventHandler->SendMidiEventToClient(*playStarted); sl@0: delete playStarted; sl@0: iDelayEvent->PlayFinished(TTimeIntervalMicroSeconds(20000000));//20 sec sl@0: iMidiEventGenerator->MidiEventTrigger(); sl@0: break; sl@0: sl@0: case EMidiStateOpenDisengaged: sl@0: playStarted->iOldState = EMidiStateOpenDisengaged; sl@0: playStarted->iNewState = EMidiStateOpenPlaying; sl@0: iCurrentMidiTestControllerState = EMidiStateOpenPlaying; sl@0: playStarted->iMicroSeconds = TTimeIntervalMicroSeconds(0); sl@0: iMidiEventHandler->SendMidiEventToClient(*playStarted); sl@0: delete playStarted; sl@0: iDelayEvent->PlayFinished(TTimeIntervalMicroSeconds(20000000));//20 sec sl@0: iMidiEventGenerator->MidiEventTrigger(); sl@0: break; sl@0: sl@0: case EMidiStateOpenEngaged: sl@0: playStarted->iOldState = EMidiStateOpenEngaged; sl@0: playStarted->iNewState = EMidiStateOpenPlaying; sl@0: iCurrentMidiTestControllerState = EMidiStateOpenPlaying; sl@0: playStarted->iMicroSeconds = TTimeIntervalMicroSeconds(0); sl@0: iMidiEventHandler->SendMidiEventToClient(*playStarted); sl@0: delete playStarted; sl@0: iDelayEvent->PlayFinished(TTimeIntervalMicroSeconds(20000000));//20 sec sl@0: iMidiEventGenerator->MidiEventTrigger(); sl@0: break; sl@0: sl@0: default: sl@0: playStarted->iOldState = iCurrentMidiTestControllerState; sl@0: playStarted->iNewState = iCurrentMidiTestControllerState; sl@0: playStarted->iEventType = KMMFErrorCategoryControllerGeneralError; sl@0: playStarted->iMicroSeconds = TTimeIntervalMicroSeconds(0); sl@0: iMidiEventHandler->SendMidiEventToClient(*playStarted); sl@0: delete playStarted; sl@0: break; sl@0: } sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::PlayFinished() sl@0: { sl@0: TUid tmp; sl@0: tmp.iUid = 0 ; sl@0: CMMFMidiEvent* playFinished = new CMMFMidiEvent(tmp, KErrNone); sl@0: if(!playFinished) sl@0: return KErrNoMemory; sl@0: switch (iCurrentMidiTestControllerState) sl@0: { sl@0: case EMidiStateClosedEngaged: sl@0: playFinished->iOldState = EMidiStateClosedEngaged; sl@0: playFinished->iNewState = EMidiStateClosedEngaged; sl@0: iCurrentMidiTestControllerState = EMidiStateClosedEngaged; sl@0: break; sl@0: sl@0: case EMidiStateOpenPlaying: sl@0: playFinished->iOldState = EMidiStateOpenPlaying; sl@0: playFinished->iNewState = EMidiStateOpenEngaged; sl@0: iCurrentMidiTestControllerState = EMidiStateOpenEngaged; sl@0: break; sl@0: sl@0: default: sl@0: playFinished->iOldState = iCurrentMidiTestControllerState; sl@0: playFinished->iNewState = iCurrentMidiTestControllerState; sl@0: playFinished->iEventType = KMMFErrorCategoryControllerGeneralError; sl@0: break; sl@0: } sl@0: sl@0: playFinished->iMicroSeconds = iDurationMicroSeconds; sl@0: iMidiEventHandler->SendMidiEventToClient(*playFinished); sl@0: delete playFinished; sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::Stop() sl@0: { sl@0: CMMFMidiEvent* playStop = new CMMFMidiEvent(KMMFEventCategoryMidiPlayingComplete, KErrNone); sl@0: if(!playStop) sl@0: return KErrNoMemory; sl@0: sl@0: switch (iCurrentMidiTestControllerState) sl@0: { sl@0: case EMidiStateOpenPlaying: sl@0: playStop->iOldState = EMidiStateOpenPlaying; sl@0: playStop->iNewState = EMidiStateOpenDisengaged; sl@0: iCurrentMidiTestControllerState = EMidiStateOpenDisengaged; sl@0: break; sl@0: sl@0: case EMidiStateClosedEngaged: sl@0: playStop->iOldState = EMidiStateClosedEngaged; sl@0: playStop->iNewState = EMidiStateClosedDisengaged; sl@0: iCurrentMidiTestControllerState = EMidiStateClosedDisengaged; sl@0: break; sl@0: sl@0: case EMidiStateOpenEngaged: sl@0: playStop->iOldState = EMidiStateOpenEngaged; sl@0: playStop->iNewState = EMidiStateOpenDisengaged; sl@0: iCurrentMidiTestControllerState = EMidiStateOpenDisengaged; sl@0: break; sl@0: sl@0: default: sl@0: playStop->iOldState = iCurrentMidiTestControllerState; sl@0: playStop->iNewState = iCurrentMidiTestControllerState; sl@0: playStop->iEventType = KMMFErrorCategoryControllerGeneralError; sl@0: break; sl@0: } sl@0: sl@0: playStop->iMicroSeconds = iPositionMicroSeconds; sl@0: iMidiEventHandler->SendMidiEventToClient(*playStop); sl@0: delete playStop; sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::Close() sl@0: { sl@0: CMMFMidiEvent* close = new CMMFMidiEvent(KMMFEventCategoryMidiClose, KErrNone); sl@0: if(!close) sl@0: return KErrNoMemory; sl@0: sl@0: switch (iCurrentMidiTestControllerState) sl@0: { sl@0: case EMidiStateOpenDisengaged: sl@0: close->iOldState = EMidiStateOpenDisengaged; sl@0: close->iNewState = EMidiStateClosedDisengaged; sl@0: iCurrentMidiTestControllerState = EMidiStateClosedDisengaged; sl@0: break; sl@0: sl@0: case EMidiStateOpenPlaying: sl@0: close->iOldState = EMidiStateOpenPlaying; sl@0: close->iNewState = EMidiStateClosedDisengaged; sl@0: iCurrentMidiTestControllerState = EMidiStateClosedEngaged; sl@0: break; sl@0: sl@0: case EMidiStateOpenEngaged: sl@0: close->iOldState = EMidiStateOpenEngaged; sl@0: close->iNewState = EMidiStateClosedEngaged; sl@0: iCurrentMidiTestControllerState = EMidiStateClosedEngaged; sl@0: break; sl@0: sl@0: default: sl@0: close->iOldState = iCurrentMidiTestControllerState; sl@0: close->iNewState = iCurrentMidiTestControllerState; sl@0: close->iEventType = KMMFErrorCategoryControllerGeneralError; sl@0: break; sl@0: } sl@0: close->iMicroSeconds = TTimeIntervalMicroSeconds(0); sl@0: iMidiEventHandler->SendMidiEventToClient(*close); sl@0: delete close; sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::SyncUpdate() sl@0: { sl@0: CMMFMidiEvent* syncUpd = new CMMFMidiEvent(KMMFEventCategoryMidiSyncUpdate, KErrNone); sl@0: if(!syncUpd) sl@0: return KErrNoMemory; sl@0: iMidiEventHandler->SendMidiEventToClient(*syncUpd); sl@0: delete syncUpd; sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::TempoChanged() sl@0: { sl@0: CMMFMidiEvent* tempoChanged = new CMMFMidiEvent(KMMFEventCategoryTempoChanged, KErrNone); sl@0: if(!tempoChanged) sl@0: return KErrNoMemory; sl@0: tempoChanged->iTempoMicroBeats = 60; //Adagio sl@0: iMidiEventHandler->SendMidiEventToClient(*tempoChanged); sl@0: delete tempoChanged; sl@0: iMidiEventGenerator->MidiEventTrigger(); sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::VolumeChanged() sl@0: { sl@0: CMMFMidiEvent* volumeChanged = new CMMFMidiEvent(KMMFEventCategoryVolumeChanged, KErrNone); sl@0: if(!volumeChanged) sl@0: return KErrNoMemory; sl@0: volumeChanged->iVolumeInDecibels = 50000; sl@0: volumeChanged->iChannel = 14; sl@0: iMidiEventHandler->SendMidiEventToClient(*volumeChanged); sl@0: delete volumeChanged; sl@0: iMidiEventGenerator->MidiEventTrigger(); sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::MuteChanged() sl@0: { sl@0: CMMFMidiEvent* muteChanged = new CMMFMidiEvent(KMMFEventCategoryMuteChanged, KErrNone); sl@0: if(!muteChanged) sl@0: return KErrNoMemory; sl@0: muteChanged->iChannel = 15; sl@0: muteChanged->iMute = ETrue; sl@0: iMidiEventHandler->SendMidiEventToClient(*muteChanged); sl@0: delete muteChanged; sl@0: iMidiEventGenerator->MidiEventTrigger(); sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::PolyphonyChanged() sl@0: { sl@0: CMMFMidiEvent* polyphonyChanged = new CMMFMidiEvent(KMMFEventCategoryPolyphonyChanged, KErrNone); sl@0: if(!polyphonyChanged) sl@0: return KErrNoMemory; sl@0: polyphonyChanged->iPolyphony = 10; sl@0: iMidiEventHandler->SendMidiEventToClient(*polyphonyChanged); sl@0: delete polyphonyChanged; sl@0: iMidiEventGenerator->MidiEventTrigger(); sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::InstrumentChanged() sl@0: { sl@0: CMMFMidiEvent* instrumentChanged = new CMMFMidiEvent(KMMFEventCategoryInstrumentChanged, KErrNone); sl@0: if(!instrumentChanged ) sl@0: return KErrNoMemory; sl@0: instrumentChanged->iChannel = 3; sl@0: instrumentChanged->iBankId = 4; sl@0: instrumentChanged->iInstrumentId = 5; sl@0: iMidiEventHandler->SendMidiEventToClient(*instrumentChanged); sl@0: delete instrumentChanged ; sl@0: iMidiEventGenerator->MidiEventTrigger(); sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::SmfMetaDataEntryFound() sl@0: { sl@0: TTimeIntervalMicroSeconds position(200000); sl@0: CMMFMidiEvent* smfMetaDataEntryFound = new CMMFMidiEvent(KMMFEventCategoryMetaDataEntryFound, KErrNone); sl@0: if(!smfMetaDataEntryFound ) sl@0: return KErrNoMemory; sl@0: smfMetaDataEntryFound->iMetaDataEntryId = 15;//Not supported in this test controller sl@0: smfMetaDataEntryFound->iMicroSeconds = position; sl@0: iMidiEventHandler->SendMidiEventToClient(*smfMetaDataEntryFound); sl@0: delete smfMetaDataEntryFound; sl@0: iMidiEventGenerator->MidiEventTrigger(); sl@0: return KErrNone; sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::MipMessageReceived() sl@0: { sl@0: TMipMessageEntry mipMessageEntry; sl@0: mipMessageEntry.iChannel = 11; sl@0: mipMessageEntry.iMIPValue = 21; sl@0: sl@0: TMipMessageEntry mipMessageEntry2; sl@0: mipMessageEntry2.iChannel = 1; sl@0: mipMessageEntry2.iMIPValue = 2; sl@0: sl@0: CMMFMidiEvent* mipMessageReceived = new CMMFMidiEvent(KMMFEventCategoryMipMessageReceived, KErrNone); sl@0: if(!mipMessageReceived ) sl@0: return KErrNoMemory; sl@0: mipMessageReceived->iMipMessage.Append(mipMessageEntry); sl@0: sl@0: CMMFMidiEvent* mipMessageReceived2 = new CMMFMidiEvent(KMMFEventCategoryMipMessageReceived, KErrNone); sl@0: if(!mipMessageReceived2 ) sl@0: return KErrNoMemory; sl@0: mipMessageReceived2->iMipMessage.Append(mipMessageEntry2); sl@0: sl@0: sl@0: iMidiEventHandler->SendMidiEventToClient(*mipMessageReceived); sl@0: iMidiEventHandler->SendMidiEventToClient(*mipMessageReceived2); sl@0: delete mipMessageReceived; sl@0: delete mipMessageReceived2; sl@0: return KErrNone; sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetPositionMicroBeatsL(TInt64 /*aMicroBeats*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetPositionMicroBeatsL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcPositionMicroBeatsL(TInt64& aMicroBeats) sl@0: { sl@0: aMicroBeats = iPositionMicroBeats; sl@0: InsertInterfaceNameInChunk(_L8("PositionMicroBeatsL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcPlayNoteL(TInt /*aChannel*/,TInt /*aNote*/,const TTimeIntervalMicroSeconds& /*aDuration*/,TInt /*aNoteOnVelocity*/,TInt /*aNoteOffVelocity*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("PlayNoteL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcPlayNoteL(TInt /*aChannel*/,TInt /*aNote*/,const TTimeIntervalMicroSeconds& /*aStartTime*/, const TTimeIntervalMicroSeconds& /*aDuration*/,TInt /*aNoteOnVelocity*/,TInt /*aNoteOffVelocity*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("PlayNoteWithStartTime")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcStopNotesL(TInt /*aChannel*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("StopNotes")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcNoteOnL(TInt /*aChannel*/,TInt /*aNote*/,TInt /*aVelocity*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("NoteOnL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcNoteOffL(TInt /*aChannel*/,TInt /*aNote*/,TInt /*aVelocity*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("NoteOffL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcPlaybackRateL(TInt& aPlayBackRate) sl@0: { sl@0: aPlayBackRate = iPlayBackRate; sl@0: InsertInterfaceNameInChunk(_L8("PlaybackRateL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetPlaybackRateL(TInt /*aPlayBackRate*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetPlaybackRateL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcMaxPlaybackRateL(TInt& aMaxRate) sl@0: { sl@0: aMaxRate = iMaxRate; sl@0: InsertInterfaceNameInChunk(_L8("MaxPlaybackRateL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcMinPlaybackRateL(TInt& aMinRate) sl@0: { sl@0: aMinRate = iMinRate; sl@0: InsertInterfaceNameInChunk(_L8("MinPlaybackRateL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcTempoMicroBeatsPerMinuteL(TInt& aMicroBeatsPerMinute) sl@0: { sl@0: aMicroBeatsPerMinute = iTempoMicroBeatsPerMinute; sl@0: InsertInterfaceNameInChunk(_L8("TempoMicroBeatsPerMinuteL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetTempoL(TInt /*aMicroBeatsPerMinute*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetTempoL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcPitchTranspositionCentsL(TInt& aPitch) sl@0: { sl@0: aPitch = iPitchTranspositionCents; sl@0: InsertInterfaceNameInChunk(_L8("PitchTranspositionCentsL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetPitchTranspositionL(TInt /*aCents*/, TInt& aCentsApplied) sl@0: { sl@0: aCentsApplied = iCentsApplied; sl@0: InsertInterfaceNameInChunk(_L8("SetPitchTranspositionL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcDurationMicroBeatsL(TInt64& aDuration) sl@0: { sl@0: aDuration = iDurationMicroBeats; sl@0: InsertInterfaceNameInChunk(_L8("DurationMicroBeatsL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcNumTracksL(TInt& aTracks) sl@0: { sl@0: aTracks = iNumTracks; sl@0: InsertInterfaceNameInChunk(_L8("NumTracksL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetTrackMuteL(TInt /*aTrack*/, TBool /*aMuted*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetTrackMuteL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcMimeTypeL(TDes8& aMimeType) sl@0: { sl@0: _LIT(K,"Midi-x"); sl@0: aMimeType.Copy(K); sl@0: InsertInterfaceNameInChunk(_L8("MimeTypeL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetSyncUpdateCallbackIntervalL(const TTimeIntervalMicroSeconds& aMicroSeconds,TInt64 /*aMicroBeats*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetSyncUpdateCallbackIntervalL")); sl@0: iDelayEvent->DelaySyncUpdate(aMicroSeconds); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSendMessageL(const TDesC8& aMidiMessage, TInt& aBytes) sl@0: { sl@0: aBytes = aMidiMessage.Length(); sl@0: InsertInterfaceNameInChunk(_L8("SendMessageL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSendMessageL(const TDesC8& aMidiMessage,const TTimeIntervalMicroSeconds& /*aTime*/, TInt& aBytes) sl@0: { sl@0: aBytes = aMidiMessage.Length(); sl@0: InsertInterfaceNameInChunk(_L8("SendMessageWithTimeStamp")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSendMipMessageL(const TArray& aEntry) sl@0: { sl@0: for(TInt i=0; i< aEntry.Count(); i++) sl@0: { sl@0: TMipMessageEntry tmp = aEntry[i]; sl@0: tmp.iChannel++;//to remove the warning sl@0: } sl@0: InsertInterfaceNameInChunk(_L8("SendMipMessageL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcNumberOfBanksL(TBool /*aCustom*/, TInt& aNumBanks) sl@0: { sl@0: aNumBanks = iNumBanks; sl@0: InsertInterfaceNameInChunk(_L8("NumberOfBanksL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcGetBankIdL(TBool /*aCustom*/, TInt aBankIndex, TInt& aBankId) sl@0: { sl@0: aBankId = ++aBankIndex; sl@0: InsertInterfaceNameInChunk(_L8("GetBankIdL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcLoadCustomBankL(const TDesC& /*aFileName*/,TInt& aBankId) sl@0: { sl@0: aBankId = 60; sl@0: InsertInterfaceNameInChunk(_L8("LoadCustomBankL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcUnloadCustomBankL(TInt /*aBankId*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("UnloadCustomBankL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcCustomBankLoadedL(TInt /*aBankId*/, TBool& aBankLoaded) sl@0: { sl@0: aBankLoaded = ETrue; sl@0: InsertInterfaceNameInChunk(_L8("CustomBankLoadedL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcUnloadAllCustomBanksL() sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("UnloadAllCustomBanksL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcNumberOfInstrumentsL(TInt /*aBankId*/, TBool /*aCustom*/, TInt& aNumInstruments) sl@0: { sl@0: aNumInstruments = iNumInstruments; sl@0: InsertInterfaceNameInChunk(_L8("NumberOfInstrumentsL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcGetInstrumentIdL(TInt /*aBankId*/,TBool /*aCustom*/,TInt /*aInstrumentIndex*/, TInt& aInstrumentId) sl@0: { sl@0: aInstrumentId = 89; sl@0: InsertInterfaceNameInChunk(_L8("GetInstrumentIdL")); sl@0: } sl@0: sl@0: const TDesC& CMMFMidiTestController::MmcInstrumentNameL(TInt /*aBankId*/, TBool /*aCustom*/, TInt /*aInstrumentId*/) sl@0: { sl@0: _LIT(KInstrumentName, "Guitar"); sl@0: InsertInterfaceNameInChunk(_L8("InstrumentNameL")); sl@0: return KInstrumentName; sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetInstrumentL(TInt /*aChannel*/,TInt /*aBankId*/,TInt /*aInstrumentId*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetInstrumentL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcLoadCustomInstrumentL(const TDesC& /*aFileName*/, TInt /*aFileBankId*/, TInt /*aFileInstrumentId*/, TInt /*aMemoryBankId*/, TInt /*aMemoryInstrumentId*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("LoadCustomInstrumentL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcUnloadCustomInstrumentL(TInt /*aCustomBankId*/,TInt /*aInstrumentId*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("UnloadCustomInstrumentL")); sl@0: } sl@0: sl@0: const TDesC& CMMFMidiTestController::MmcPercussionKeyNameL(TInt /*aNote*/, TInt /*aBankId*/, TBool /*aCustom*/, TInt /*aInstrumentId*/) sl@0: { sl@0: _LIT(KPercussionKeyName, "Do"); sl@0: InsertInterfaceNameInChunk(_L8("PercussionKeyNameL")); sl@0: return KPercussionKeyName; sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcStopTimeL(TTimeIntervalMicroSeconds& aStopTime) sl@0: { sl@0: aStopTime = iStopTime; sl@0: InsertInterfaceNameInChunk(_L8("StopTimeL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetStopTimeL(const TTimeIntervalMicroSeconds& /*aStopTime*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetStopTimeL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcPolyphonyL(TInt& aNumNotes) sl@0: { sl@0: aNumNotes = iNumNotes; sl@0: InsertInterfaceNameInChunk(_L8("PolyphonyL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcMaxPolyphonyL(TInt& aMaxNotes) sl@0: { sl@0: aMaxNotes = iMaxNotes; sl@0: InsertInterfaceNameInChunk(_L8("MaxPolyphonyL")); sl@0: } sl@0: sl@0: sl@0: void CMMFMidiTestController::MmcChannelsSupportedL(TInt& aChannels) sl@0: { sl@0: aChannels = iChannels; sl@0: InsertInterfaceNameInChunk(_L8("ChannelsSupportedL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcChannelVolumeL(TInt aChannel, TReal32& aChannelVol) sl@0: { sl@0: aChannelVol = iChanVolumeValues->At(aChannel); sl@0: InsertInterfaceNameInChunk(_L8("ChannelVolumeL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcMaxChannelVolumeL(TReal32& aMaxVol) sl@0: { sl@0: aMaxVol = iMaxVol; sl@0: InsertInterfaceNameInChunk(_L8("MaxChannelVolumeL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetChannelVolumeL(TInt aChannel,TReal32 aVolume) sl@0: { sl@0: iChanVolumeValues->InsertL(aChannel, aVolume); sl@0: InsertInterfaceNameInChunk(_L8("SetChannelVolumeL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetChannelMuteL(TInt /*aChannel*/,TBool /*aMuted*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetChannelMuteL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcVolumeL(TInt& aVolume) sl@0: { sl@0: aVolume = 70000; sl@0: InsertInterfaceNameInChunk(_L8("VolumeL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcMaxVolumeL(TInt& aMaxVolume) sl@0: { sl@0: aMaxVolume = iMaxVolume; sl@0: InsertInterfaceNameInChunk(_L8("MaxVolumeL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetVolumeL(TInt /*aVolume*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetVolumeL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetVolumeRampL(const TTimeIntervalMicroSeconds& /*aRampDuration*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetVolumeRampL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcGetBalanceL(TInt& aBalance) sl@0: { sl@0: aBalance = iBalance; sl@0: InsertInterfaceNameInChunk(_L8("GetBalanceL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetBalanceL(TInt /*aBalance*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetBalanceL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcLoadCustomBankDataL(const TDesC8& /*aBankData*/,TInt& aBankId) sl@0: { sl@0: aBankId = 20; sl@0: InsertInterfaceNameInChunk(_L8("LoadCustomBankDataL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcLoadCustomInstrumentDataL(const TDesC8& /*aInstrumentData*/, TInt /*aBankDataId*/, TInt /*aInstrumentDataId*/, TInt /*aMemoryBankId*/, TInt /*aMemoryInstrumentId*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("LoadCustomInstrumentDataL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetMaxPolyphonyL(TInt aMaxNotes) sl@0: { sl@0: iMaxNotes = aMaxNotes; sl@0: InsertInterfaceNameInChunk(_L8("SetMaxPolyphonyL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcGetRepeatsL(TInt& aNumRepeats) sl@0: { sl@0: aNumRepeats = iRepeatNumberOfTimes; sl@0: InsertInterfaceNameInChunk(_L8("GetRepeats")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetRepeatsL(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence) sl@0: { sl@0: iRepeatNumberOfTimes = aRepeatNumberOfTimes; sl@0: iTrailingSilence = aTrailingSilence; sl@0: InsertInterfaceNameInChunk(_L8("SetRepeatsL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcSetBankL(TBool /*aCustom*/) sl@0: { sl@0: InsertInterfaceNameInChunk(_L8("SetBankL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcIsTrackMuteL(TInt /*aTrack*/, TBool& aTrackMute) sl@0: { sl@0: aTrackMute = ETrue; sl@0: InsertInterfaceNameInChunk(_L8("IsTrackMuteL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcIsChannelMuteL(TInt /*aChannel*/, TBool& aChannelMute) sl@0: { sl@0: aChannelMute = ETrue; sl@0: InsertInterfaceNameInChunk(_L8("IsChannelMuteL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcGetInstrumentL(TInt /*aChannel*/, TInt& aInstrumentId, TInt& aBankId) sl@0: { sl@0: aInstrumentId = 10; sl@0: aBankId = 11; sl@0: InsertInterfaceNameInChunk(_L8("GetInstrumentL")); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcCloseL() sl@0: { sl@0: iDelayEvent->DelayClose(TTimeIntervalMicroSeconds(0)); sl@0: } sl@0: sl@0: void CMMFMidiTestController::MmcStopL(const TTimeIntervalMicroSeconds& /*aFadeOutDuration*/) sl@0: { sl@0: if(iDelayEvent->IsActive()) sl@0: iDelayEvent->Cancel(); sl@0: if(iMidiEventGenerator->IsActive()) sl@0: iMidiEventGenerator->Cancel(); sl@0: sl@0: iDelayEvent->DelayStop(TTimeIntervalMicroSeconds(0)); sl@0: } sl@0: sl@0: sl@0: sl@0: // sl@0: // sl@0: // sl@0: CMMFMidiTestController::CControllerTimer* CMMFMidiTestController::CControllerTimer::NewL(CMMFMidiTestController* aController) sl@0: { sl@0: CControllerTimer* self = new (ELeave) CControllerTimer(aController); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CMMFMidiTestController::CControllerTimer::CControllerTimer(CMMFMidiTestController* aController) sl@0: :CTimer(EPriorityStandard) sl@0: { sl@0: iController = aController; sl@0: } sl@0: sl@0: void CMMFMidiTestController::CControllerTimer::DelayOpen(TTimeIntervalMicroSeconds aDelay) sl@0: { sl@0: ASSERT(iController); sl@0: iType = ETmrOpenComplete; sl@0: After(I64INT(aDelay.Int64())); sl@0: } sl@0: sl@0: void CMMFMidiTestController::CControllerTimer::DelayPlayStarted(TTimeIntervalMicroSeconds aDelay) sl@0: { sl@0: ASSERT(iController); sl@0: iType = ETmrDelayPlayStarted; sl@0: After(I64INT(aDelay.Int64())); sl@0: } sl@0: sl@0: void CMMFMidiTestController::CControllerTimer::PlayFinished(TTimeIntervalMicroSeconds aDelay) sl@0: { sl@0: ASSERT(iController); sl@0: iType = ETmrPlayFinished; sl@0: After(I64INT(aDelay.Int64())); sl@0: } sl@0: sl@0: void CMMFMidiTestController::CControllerTimer::DelaySyncUpdate(TTimeIntervalMicroSeconds aDelay) sl@0: { sl@0: ASSERT(iController); sl@0: iType = ETmrSyncUpdate; sl@0: After(I64INT(aDelay.Int64())); sl@0: } sl@0: sl@0: void CMMFMidiTestController::CControllerTimer::DelayStop(TTimeIntervalMicroSeconds aDelay) sl@0: { sl@0: ASSERT(iController); sl@0: iType = ETmrDelayStop; sl@0: After(I64INT(aDelay.Int64())); sl@0: } sl@0: sl@0: void CMMFMidiTestController::CControllerTimer::DelayClose(TTimeIntervalMicroSeconds aDelay) sl@0: { sl@0: ASSERT(iController); sl@0: iType = ETmrDelayClose; sl@0: After(I64INT(aDelay.Int64())); sl@0: } sl@0: sl@0: void CMMFMidiTestController::CControllerTimer::RunL() sl@0: { sl@0: ASSERT(iController); sl@0: switch(iType) sl@0: { sl@0: case ETmrOpenComplete : sl@0: User::LeaveIfError(iController->OpenComplete()); sl@0: break; sl@0: case ETmrSyncUpdate : sl@0: User::LeaveIfError(iController->SyncUpdate()); sl@0: break; sl@0: case ETmrDelayPlayStarted : sl@0: User::LeaveIfError(iController->PlayStarted()); sl@0: break; sl@0: case ETmrPlayFinished : sl@0: User::LeaveIfError(iController->PlayFinished()); sl@0: break; sl@0: case ETmrDelayStop : sl@0: User::LeaveIfError(iController->Stop()); sl@0: break; sl@0: case ETmrDelayClose : sl@0: User::LeaveIfError(iController->Close()); sl@0: break; sl@0: } sl@0: } sl@0: // sl@0: // sl@0: // sl@0: CMMFMidiTestController::CMidiEventGenerator* CMMFMidiTestController::CMidiEventGenerator::NewL(CMMFMidiTestController* aController) sl@0: { sl@0: CMidiEventGenerator* self = new (ELeave) CMidiEventGenerator(aController); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(self); sl@0: return self; sl@0: } sl@0: sl@0: CMMFMidiTestController::CMidiEventGenerator::CMidiEventGenerator(CMMFMidiTestController* aController) sl@0: :CTimer(EPriorityStandard) sl@0: { sl@0: iController = aController; sl@0: iDelay = TTimeIntervalMicroSeconds(0);//2 secs sl@0: iTriggerCount = 0; sl@0: } sl@0: sl@0: void CMMFMidiTestController::CMidiEventGenerator::MidiEventTrigger() sl@0: { sl@0: switch(iTriggerCount) sl@0: { sl@0: case 0: sl@0: iType = EEventTempoChanged; sl@0: break; sl@0: case 1: sl@0: iType = EEventVolumeChanged; sl@0: break; sl@0: case 2: sl@0: iType = EEventMuteChanged; sl@0: break; sl@0: case 3: sl@0: iType = EEventPolyphonyChanged; sl@0: break; sl@0: case 4: sl@0: iType = EEventInstrumentChanged; sl@0: break; sl@0: case 5: sl@0: iType = EEventSmfMetaDataEntryFound; sl@0: break; sl@0: case 6: sl@0: iType = EEventVolumeChanged; sl@0: break; sl@0: case 7: sl@0: iType = EEventMuteChanged; sl@0: break; sl@0: case 8: sl@0: iType = EEventPolyphonyChanged; sl@0: break; sl@0: case 9: sl@0: iType = EEventInstrumentChanged; sl@0: break; sl@0: case 10: sl@0: iType = EEventSmfMetaDataEntryFound; sl@0: break; sl@0: case 11: sl@0: iType = EEventMipMessageReceived; sl@0: break; sl@0: } sl@0: ++iTriggerCount; sl@0: After(I64INT(iDelay.Int64())); sl@0: } sl@0: sl@0: /* sl@0: void CMMFMidiTestController::CMidiEventGenerator::DelaySyncUpdate(TTimeIntervalMicroSeconds aDelay) sl@0: { sl@0: ASSERT(iController); sl@0: iType = ETmrSyncUpdate; sl@0: After(I64INT(aDelay.Int64())); sl@0: } sl@0: */ sl@0: sl@0: void CMMFMidiTestController::CMidiEventGenerator::RunL() sl@0: { sl@0: ASSERT(iController); sl@0: sl@0: switch(iType) sl@0: { sl@0: case EEventTempoChanged: sl@0: User::LeaveIfError(iController->TempoChanged()); sl@0: break; sl@0: case EEventVolumeChanged: sl@0: User::LeaveIfError(iController->VolumeChanged()); sl@0: break; sl@0: case EEventMuteChanged: sl@0: User::LeaveIfError(iController->MuteChanged()); sl@0: break; sl@0: case EEventPolyphonyChanged: sl@0: User::LeaveIfError(iController->PolyphonyChanged()); sl@0: break; sl@0: case EEventInstrumentChanged: sl@0: User::LeaveIfError(iController->InstrumentChanged()); sl@0: break; sl@0: case EEventSmfMetaDataEntryFound: sl@0: User::LeaveIfError(iController->SmfMetaDataEntryFound()); sl@0: break; sl@0: case EEventMipMessageReceived: sl@0: User::LeaveIfError(iController->MipMessageReceived()); sl@0: break; sl@0: } sl@0: } sl@0: sl@0: void CMMFMidiTestController::InsertInterfaceNameInChunk(const TDesC8& aInterfaceName) sl@0: { sl@0: TFindChunk findChunk(KMidiClntChunk); sl@0: TFullName chunkName; sl@0: TInt err = findChunk.Next(chunkName); sl@0: sl@0: if(err == KErrNone) sl@0: { sl@0: RChunk chunk; sl@0: chunk.OpenGlobal(KMidiClntChunk,EFalse); sl@0: TUint8* base = chunk.Base(); sl@0: for(TInt i=0; i<40 ; i++) sl@0: { sl@0: *base = 0x0; sl@0: base++; sl@0: } sl@0: TBuf8<40> buf(aInterfaceName); sl@0: TPtr8 ptr(chunk.Base(),chunk.Size()); sl@0: ptr = buf; sl@0: chunk.Close(); sl@0: RSemaphore sem; sl@0: sem.OpenGlobal(KMidiClntSemaphore); sl@0: sem.Signal(); sl@0: sem.Close(); sl@0: } sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::MdcEvaluateIntent(ContentAccess::TIntent aIntent) sl@0: { sl@0: if (iDataSource == NULL) sl@0: { sl@0: return KErrNotReady; sl@0: } sl@0: if (iDataSource && iDataSource->DataSourceType()==KUidMmfFileSource) sl@0: { sl@0: CMMFFile* file = static_cast(iDataSource); sl@0: TInt err = file->EvaluateIntent(aIntent); sl@0: return err; sl@0: } sl@0: else sl@0: { sl@0: // Evaluating intent will always succeed on sinks that sl@0: // don't support DRM sl@0: return KErrNone; sl@0: } sl@0: sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::MdcExecuteIntent(ContentAccess::TIntent aIntent) sl@0: { sl@0: if (iDataSource == NULL) sl@0: { sl@0: return KErrNotReady; sl@0: } sl@0: if (iDataSource->DataSourceType()==KUidMmfFileSource) sl@0: { sl@0: CMMFFile* file = static_cast(iDataSource); sl@0: TInt err = file->ExecuteIntent(aIntent); sl@0: return err; sl@0: } sl@0: else sl@0: { sl@0: // Executing intent will always succeed on sinks that sl@0: // don't support DRM sl@0: return KErrNone; sl@0: } sl@0: } sl@0: sl@0: TInt CMMFMidiTestController::MdcDisableAutomaticIntent(TBool aDisableAutoIntent) sl@0: { sl@0: iDisableAutoIntent = aDisableAutoIntent; sl@0: return KErrNone; sl@0: } sl@0: sl@0: sl@0: TInt CMMFMidiTestController::MdcSetAgentProperty(ContentAccess::TAgentProperty aProperty, TInt aValue) sl@0: { sl@0: if (iDataSource == NULL) sl@0: { sl@0: return KErrNotReady; sl@0: } sl@0: sl@0: if (iDataSource->DataSourceType()==KUidMmfFileSource) sl@0: { sl@0: CMMFFile* file = static_cast(iDataSource); sl@0: TInt err = file->SetAgentProperty(aProperty, aValue); sl@0: return err; sl@0: } sl@0: else sl@0: { sl@0: return KErrNone; sl@0: } sl@0: } sl@0: sl@0: // __________________________________________________________________________ sl@0: // Exported proxy for instantiation method resolution sl@0: // Define the interface UIDs sl@0: sl@0: sl@0: const TImplementationProxy ImplementationTable[] = sl@0: { sl@0: IMPLEMENTATION_PROXY_ENTRY(KMmfMidiTestControllerUid, CMMFMidiTestController::NewL) sl@0: }; sl@0: sl@0: EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount) sl@0: { sl@0: aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy); sl@0: sl@0: return ImplementationTable; sl@0: } sl@0: