javauis/mmapi_qt/baseline/src/cmmamidicontrol.cpp
changeset 26 dc7c549001d5
parent 23 98ccebc37403
equal deleted inserted replaced
23:98ccebc37403 26:dc7c549001d5
    44     return self;
    44     return self;
    45 }
    45 }
    46 
    46 
    47 CMMAMIDIControl::CMMAMIDIControl(CMMAMIDIPlayer* aPlayer)
    47 CMMAMIDIControl::CMMAMIDIControl(CMMAMIDIPlayer* aPlayer)
    48 {
    48 {
    49     LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::CMMAMIDIControl");
    49     LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::CMMAMIDIControl");
    50     iPlayer = aPlayer;
    50     iPlayer = aPlayer;
    51 }
    51 }
    52 
    52 
    53 CMMAMIDIControl::~CMMAMIDIControl()
    53 CMMAMIDIControl::~CMMAMIDIControl()
    54 {
    54 {
    55     LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::~CMMAMIDIControl +");
    55     LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::~CMMAMIDIControl +");
    56     delete iVolumeEventWait;
    56     delete iVolumeEventWait;
    57     LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::~CMMAMIDIControl -");
    57     LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::~CMMAMIDIControl -");
    58 }
    58 }
    59 
    59 
    60 void CMMAMIDIControl::ConstructL()
    60 void CMMAMIDIControl::ConstructL()
    61 {
    61 {
    62     LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ConstructL +");
    62     LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ConstructL +");
    63     iVolumeEventWait = CChannelVolumeEventWait::NewL();
    63     iVolumeEventWait = CChannelVolumeEventWait::NewL();
    64     iPlayer->addObserverL(this);
    64     iPlayer->addObserverL(this);
    65     LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ConstructL -");
    65     LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ConstructL -");
    66 }
    66 }
    67 
    67 
    68 const TDesC& CMMAMIDIControl::ClassName() const
    68 const TDesC& CMMAMIDIControl::ClassName() const
    69 {
    69 {
    70     LOG( EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ClassName");
    70     LOG(EJavaMMAPI, EInfo, "MMA:CMMAMIDIControl::ClassName");
    71     return KMIDIControlName;
    71     return KMIDIControlName;
    72 }
    72 }
    73 
    73 
    74 TInt CMMAMIDIControl::ChannelVolumeL(TInt aChannel)
    74 TInt CMMAMIDIControl::ChannelVolumeL(TInt aChannel)
    75 {
    75 {
    76     LOG1( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ChannelVolumeL + aChannel=%d", aChannel);
    76     LOG1(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ChannelVolumeL + aChannel=%d", aChannel);
    77 
    77 
    78     CMidiClientUtility* midi = iPlayer->MidiClient();
    78     CMidiClientUtility* midi = iPlayer->MidiClient();
    79 
    79 
    80     // If engine is not processing events, current
    80     // If engine is not processing events, current
    81     // volume cannot be known for sure.
    81     // volume cannot be known for sure.
   129     else if (retVal > KMAXVolume)
   129     else if (retVal > KMAXVolume)
   130     {
   130     {
   131         retVal = KMAXVolume;
   131         retVal = KMAXVolume;
   132     }
   132     }
   133 
   133 
   134     LOG1( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ChannelVolumeL - retVal=%d", retVal);
   134     LOG1(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ChannelVolumeL - retVal=%d", retVal);
   135     return retVal;
   135     return retVal;
   136 }
   136 }
   137 
   137 
   138 void CMMAMIDIControl::SetChannelVolumeL(TInt aChannel, TInt aVolume)
   138 void CMMAMIDIControl::SetChannelVolumeL(TInt aChannel, TInt aVolume)
   139 {
   139 {
   140     LOG2( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL + aChannel=%d aVolume=%d", aChannel, aVolume);
   140     LOG2(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL + aChannel=%d aVolume=%d", aChannel, aVolume);
   141 
   141 
   142     CMidiClientUtility* midi = iPlayer->MidiClient();
   142     CMidiClientUtility* midi = iPlayer->MidiClient();
   143 
   143 
   144     // Change is done with shortMidiEvent so midi volume -> decibel
   144     // Change is done with shortMidiEvent so midi volume -> decibel
   145     // calculation is avoided (would be needed for midi client api
   145     // calculation is avoided (would be needed for midi client api
   163 #else
   163 #else
   164     if (!((engineState == EClosedDisengaged) ||
   164     if (!((engineState == EClosedDisengaged) ||
   165             (engineState == EOpenDisengaged)))
   165             (engineState == EOpenDisengaged)))
   166 #endif
   166 #endif
   167     {
   167     {
   168         LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL: ExecuteL ->");
   168         LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL: ExecuteL ->");
   169         iVolumeEventWait->StartWait(aChannel);
   169         iVolumeEventWait->StartWait(aChannel);
   170         LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL: ExecuteL <-");
   170         LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL: ExecuteL <-");
   171     }
   171     }
   172     LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL -");
   172     LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SetChannelVolumeL -");
   173 }
   173 }
   174 
   174 
   175 void CMMAMIDIControl::SetProgramL(TInt aChannel,
   175 void CMMAMIDIControl::SetProgramL(TInt aChannel,
   176                                   TInt aBank,
   176                                   TInt aBank,
   177                                   TInt aProgram)
   177                                   TInt aProgram)
   182     midi->SetInstrumentL(aChannel, aBank, aProgram);
   182     midi->SetInstrumentL(aChannel, aBank, aProgram);
   183 }
   183 }
   184 
   184 
   185 TInt CMMAMIDIControl::SendMIDIEventL(const TDesC8* aData)
   185 TInt CMMAMIDIControl::SendMIDIEventL(const TDesC8* aData)
   186 {
   186 {
   187     LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL +");
   187     LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL +");
   188     CMidiClientUtility* midi = iPlayer->MidiClient();
   188     CMidiClientUtility* midi = iPlayer->MidiClient();
   189 
   189 
   190     // SendMessageL only processes first message in the descriptor,
   190     // SendMessageL only processes first message in the descriptor,
   191     // so we need to send blocks of data as many times as needed.
   191     // so we need to send blocks of data as many times as needed.
   192 
   192 
   197         // Delegate event directly to the native implementation
   197         // Delegate event directly to the native implementation
   198         // which checks the validity.
   198         // which checks the validity.
   199         TPtrC8 nextBlock = aData->Right(dataLength - dataSent);
   199         TPtrC8 nextBlock = aData->Right(dataLength - dataSent);
   200         dataSent += midi->SendMessageL(nextBlock);
   200         dataSent += midi->SendMessageL(nextBlock);
   201     }
   201     }
   202     LOG1( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL: sent %d bytes", dataSent);
   202     LOG1(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL: sent %d bytes", dataSent);
   203     LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL -");
   203     LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: SendMIDIEventL -");
   204     return dataSent;
   204     return dataSent;
   205 }
   205 }
   206 
   206 
   207 TInt CMMAMIDIControl::ReInitializeMidiL(const TDesC8* aData)
   207 TInt CMMAMIDIControl::ReInitializeMidiL(const TDesC8* aData)
   208 {
   208 {
   209     LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ReInitializeMidiL + ");
   209     LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ReInitializeMidiL + ");
   210     iPlayer->ReInitializeMidiEngineL(aData);
   210     iPlayer->ReInitializeMidiEngineL(aData);
   211     LOG( EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ReInitializeMidiL - ");
   211     LOG(EJavaMMAPI, EInfo, "MMA: CMMAMIDIControl: ReInitializeMidiL - ");
   212     return KErrNone;
   212     return KErrNone;
   213 }
   213 }
   214 
   214 
   215 void CMMAMIDIControl::MmcuoStateChanged(TMidiState /*aOldState*/,
   215 void CMMAMIDIControl::MmcuoStateChanged(TMidiState /*aOldState*/,
   216                                         TMidiState /*aNewState*/,
   216                                         TMidiState /*aNewState*/,
   223 {
   223 {
   224 }
   224 }
   225 
   225 
   226 void CMMAMIDIControl::MmcuoVolumeChanged(TInt aChannel, TReal32 /*aVolumeInDecibels*/)
   226 void CMMAMIDIControl::MmcuoVolumeChanged(TInt aChannel, TReal32 /*aVolumeInDecibels*/)
   227 {
   227 {
   228     LOG1( EJavaMMAPI, EInfo, "CMMAMIDIControl:: MmcuoVolumeChanged + aChannel=%d", aChannel);
   228     LOG1(EJavaMMAPI, EInfo, "CMMAMIDIControl:: MmcuoVolumeChanged + aChannel=%d", aChannel);
   229     if (iVolumeEventWait)
   229     if (iVolumeEventWait)
   230     {
   230     {
   231         iVolumeEventWait->HandleVolumeChangedEvent(aChannel);
   231         iVolumeEventWait->HandleVolumeChangedEvent(aChannel);
   232     }
   232     }
   233     LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl:: MmcuoVolumeChanged -");
   233     LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl:: MmcuoVolumeChanged -");
   234 }
   234 }
   235 
   235 
   236 void CMMAMIDIControl::MmcuoMuteChanged(TInt /*aChannel*/,TBool /*aMuted*/)
   236 void CMMAMIDIControl::MmcuoMuteChanged(TInt /*aChannel*/,TBool /*aMuted*/)
   237 {
   237 {
   238 }
   238 }
   257 {
   257 {
   258 }
   258 }
   259 
   259 
   260 CMMAMIDIControl::CChannelVolumeEventWait* CMMAMIDIControl::CChannelVolumeEventWait::NewL()
   260 CMMAMIDIControl::CChannelVolumeEventWait* CMMAMIDIControl::CChannelVolumeEventWait::NewL()
   261 {
   261 {
   262     LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::NewL");
   262     LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::NewL");
   263     CChannelVolumeEventWait* self = new(ELeave) CChannelVolumeEventWait();
   263     CChannelVolumeEventWait* self = new(ELeave) CChannelVolumeEventWait();
   264     CleanupStack::PushL(self);
   264     CleanupStack::PushL(self);
   265     self->ConstructL();
   265     self->ConstructL();
   266     CleanupStack::Pop();
   266     CleanupStack::Pop();
   267     return self;
   267     return self;
   283     delete iWait;
   283     delete iWait;
   284 }
   284 }
   285 
   285 
   286 void CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired()
   286 void CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired()
   287 {
   287 {
   288     LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired +");
   288     LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired +");
   289     if (iWait->IsStarted())
   289     if (iWait->IsStarted())
   290     {
   290     {
   291         LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired - cancelling wait");
   291         LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired - cancelling wait");
   292         iWait->AsyncStop();
   292         iWait->AsyncStop();
   293     }
   293     }
   294     LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired -");
   294     LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::TimerExpired -");
   295 }
   295 }
   296 
   296 
   297 void CMMAMIDIControl::CChannelVolumeEventWait::StartWait(TInt aChannel)
   297 void CMMAMIDIControl::CChannelVolumeEventWait::StartWait(TInt aChannel)
   298 {
   298 {
   299     LOG1( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::StartWait aChannel=%d", aChannel);
   299     LOG1(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::StartWait aChannel=%d", aChannel);
   300     iChannel = aChannel;
   300     iChannel = aChannel;
   301 
   301 
   302     if (!iWait->IsStarted())
   302     if (!iWait->IsStarted())
   303     {
   303     {
   304         iTimer->After(KMMAMIDIVolumeChangeTimeout);
   304         iTimer->After(KMMAMIDIVolumeChangeTimeout);
   306     }
   306     }
   307 }
   307 }
   308 
   308 
   309 void CMMAMIDIControl::CChannelVolumeEventWait::StopWait()
   309 void CMMAMIDIControl::CChannelVolumeEventWait::StopWait()
   310 {
   310 {
   311     LOG( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::StopWait");
   311     LOG(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::StopWait");
   312     if (iWait->IsStarted())
   312     if (iWait->IsStarted())
   313     {
   313     {
   314         iTimer->Cancel();
   314         iTimer->Cancel();
   315         iWait->AsyncStop();
   315         iWait->AsyncStop();
   316     }
   316     }
   317 }
   317 }
   318 
   318 
   319 void CMMAMIDIControl::CChannelVolumeEventWait::HandleVolumeChangedEvent(TInt aChannel)
   319 void CMMAMIDIControl::CChannelVolumeEventWait::HandleVolumeChangedEvent(TInt aChannel)
   320 {
   320 {
   321     LOG1( EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::HandleVolumeChangedEvent aChannel=%d", aChannel);
   321     LOG1(EJavaMMAPI, EInfo, "CMMAMIDIControl::CChannelVolumeEventWait::HandleVolumeChangedEvent aChannel=%d", aChannel);
   322     if (iChannel == aChannel)
   322     if (iChannel == aChannel)
   323     {
   323     {
   324         StopWait();
   324         StopWait();
   325     }
   325     }
   326 }
   326 }