diff -r efebd1779a59 -r c1e808730d6c mmlibs/mmfw/tsrc/mmfunittest/DevSoundTest/a3fcistubextn/a3fcistubextn.cpp --- a/mmlibs/mmfw/tsrc/mmfunittest/DevSoundTest/a3fcistubextn/a3fcistubextn.cpp Fri Apr 16 16:34:49 2010 +0300 +++ b/mmlibs/mmfw/tsrc/mmfunittest/DevSoundTest/a3fcistubextn/a3fcistubextn.cpp Mon May 03 13:56:28 2010 +0300 @@ -84,10 +84,19 @@ // the rest of the parameters can be ignored TPckgBuf volumePkg (aVol); TMMFMessageDestinationPckg setVolDest (TMMFMessageDestination(KUidTestSetVolIf, 0)); - TInt result = iCommand->CustomCommandSync(setVolDest, 0, volumePkg, KNullDesC8); + TInt result = iCommand->CustomCommandSync(setVolDest, ETestSetVolIfSetVolCommand, volumePkg, KNullDesC8); return result; } +TInt CA3fClientCiStubExtn::Vol(TInt aMaxVol) + { + // again the key is is the destination package + TPckgBuf maxVolPkg (aMaxVol); + TMMFMessageDestinationPckg setVolDest (TMMFMessageDestination(KUidTestSetVolIf, 0)); + TInt result = iCommand->CustomCommandSync(setVolDest, ETestSetVolIfVolCommand, maxVolPkg, KNullDesC8); + return result; + } + // __________________________________________________________________________ // Server-side extension @@ -170,24 +179,41 @@ TInt CSetVol::HandleMessageL(const RMmfIpcMessage& aMessage) { - TPckgBuf volPckg; - MmfMessageUtil::ReadL(aMessage, 1, volPckg); - UpdateA3fPointers(); // grab pointers to context, stream etc - SetVolumeL(volPckg()); - - User::LeaveIfError(iContext->RegisterAudioContextObserver(*this)); - - TInt error = iContext->Commit(); - if (!error) - { - iError = KErrNone; - iWait->Start(); - error = iError; - } - (void) iContext->UnregisterAudioContextObserver(*this); - - aMessage.Complete(error); - return KErrNone; // KErrNone says we've handled the message + switch (aMessage.Function()) + { + case ETestSetVolIfSetVolCommand: + { + TPckgBuf volPckg; + MmfMessageUtil::ReadL(aMessage, 1, volPckg); + UpdateA3fPointers(); // grab pointers to context, stream etc + SetVolumeL(volPckg()); + + User::LeaveIfError(iContext->RegisterAudioContextObserver(*this)); + + TInt error = iContext->Commit(); + if (!error) + { + iError = KErrNone; + iWait->Start(); + error = iError; + } + (void) iContext->UnregisterAudioContextObserver(*this); + + aMessage.Complete(error); + return KErrNone; // KErrNone says we've handled the message + } + case ETestSetVolIfVolCommand: + { + TPckgBuf maxVolPckg; + MmfMessageUtil::ReadL(aMessage, 1, maxVolPckg); + UpdateA3fPointers(); // grab pointers to context, stream etc + TInt result = VolumeL(maxVolPckg()); + aMessage.Complete(result); + return KErrNone; // KErrNone says we've handled the message + } + default: + return KErrArgument; + } } void CSetVol::UpdateA3fPointers() @@ -224,6 +250,23 @@ User::LeaveIfError(gainControl->SetGain(channelGains)); CleanupStack::PopAndDestroy(&channelGains); } + +TInt CSetVol::VolumeL(TInt aMaxVolume) + { + RArray channelGains; + CleanupClosePushL(channelGains); + TInt maxGain; + + MAudioGainControl* gainControl = static_cast(iGain->Interface(KUidAudioGainControl)); + User::LeaveIfError(gainControl->GetGain(channelGains)); + User::LeaveIfError(gainControl->GetMaxGain(maxGain)); + + TInt basicVolume = (channelGains[0].iGain + channelGains[1].iGain) / 2; + TInt result = basicVolume * aMaxVolume / maxGain; // scale to 0 to maxVolume + + CleanupStack::PopAndDestroy(&channelGains); + return result; + } void CSetVol::ContextEvent(TUid aEvent, TInt aError) {