diff -r 613e4e943120 -r b68f3e90dca1 devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.cpp --- a/devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.cpp Thu Sep 02 22:02:55 2010 +0300 +++ b/devsound/a3fdevsound/src/mmfdevsoundserver/mmfdevsoundsession.cpp Fri Sep 17 08:37:57 2010 +0300 @@ -269,8 +269,25 @@ iAsyncQueueStart->Cancel(); // just in case. ResetNotifiedError(); + if (aMessage.Function() == RMessage2::EDisConnect) + { + TBool complete = iAdapter->CloseDevSound(); + if(!complete) + { + iRequestBeingServiced.SetMessage(aMessage); + iOperationCompletePending = ETrue; + ResetNotifiedError(); + } + else + { + // if we get here, iClosing wait will have been started and we'd be waiting + iClosingWait->AsyncStop(); + } + return; + } + TMMFMessageDestinationPckg destinationPckg; - MmfMessageUtil::ReadL(aMessage, 0, destinationPckg); + User::LeaveIfError(MessageRead(aMessage, 0, destinationPckg)); SYMBIAN_DEBPRN2(_L("CMMFDevSoundSession[0x%x]::DoServiceRequestL - DestinationHandle [%d] InterfaceId [%d] "), destinationPckg().DestinationHandle(), destinationPckg().InterfaceId()); if ((destinationPckg().DestinationHandle() == KMMFObjectHandleDevSound) && (destinationPckg().InterfaceId() == KUidInterfaceMMFDevSound)) @@ -459,21 +476,6 @@ } } } - else if (aMessage.Function() == RMessage2::EDisConnect) - { - TBool complete = iAdapter->CloseDevSound(); - if(!complete) - { - iRequestBeingServiced.SetMessage(aMessage); - iOperationCompletePending = ETrue; - ResetNotifiedError(); - } - else - { - // if we get here, iClosing wait will have been started and we'd be waiting - iClosingWait->AsyncStop(); - } - } else { // If there's a CI extension, see if that handles this request @@ -578,12 +580,14 @@ void CMMFDevSoundSession::EnqueueRequest(const RMmfIpcMessage& aMessage) { + SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::EnqueueRequest - Enter")); // Encapsule the request TMMFDevSoundRequest request; request.SetMessage(aMessage); // Append TInt error = iQueuedRequests.Append(request); - __ASSERT_DEBUG(error == KErrNone, Panic(EQueueRequestsFailedToAppend)); + __ASSERT_DEBUG(error == KErrNone, Panic(EQueueRequestsFailedToAppend)); + SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::EnqueueRequest - Exit")); } // @@ -607,7 +611,7 @@ User::LeaveIfError(err); DoSetClientConfigL();// added here instead of the CreateL() TMMFDevSoundProxySettingsPckg devSoundBuf; - MmfMessageUtil::ReadL(aMessage,1,devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,1,devSoundBuf)); iCachedClientData = devSoundBuf; TMMFState mode = devSoundBuf().iMode; iAdapter->InitializeL(mode); @@ -644,7 +648,7 @@ User::LeaveIfError(err); DoSetClientConfigL();// added here instead of the CreateL() TMMFDevSoundProxySettingsPckg devSoundBuf; - MmfMessageUtil::ReadL(aMessage,1,devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,1,devSoundBuf)); iCachedClientData = devSoundBuf; TUid HWDev = devSoundBuf().iHWDev; TMMFState mode = devSoundBuf().iMode; @@ -678,7 +682,7 @@ User::LeaveIfError(err); DoSetClientConfigL();// added here instead of the CreateL() TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage, TInt(1), devSoundBuf)); iCachedClientData = devSoundBuf; TFourCC desiredFourCC = devSoundBuf().iDesiredFourCC; TMMFState mode = devSoundBuf().iMode; @@ -755,7 +759,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iConfig = iAdapter->Config(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -766,7 +770,7 @@ TBool CMMFDevSoundSession::DoSetConfigL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TMMFCapabilities config = devSoundBuf().iConfig; iAdapter->SetConfigL(config); iOperationCompletePending = ETrue; @@ -782,7 +786,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iMaxVolume = iAdapter->MaxVolume(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -795,7 +799,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iVolume = iAdapter->Volume(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -806,7 +810,7 @@ TBool CMMFDevSoundSession::DoSetVolumeL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage, TInt(1),devSoundBuf)); TInt volume = devSoundBuf().iVolume; TBool asyncOperation; User::LeaveIfError(iAdapter->SetVolume(volume, asyncOperation)); @@ -823,7 +827,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iMaxGain = iAdapter->MaxGain(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -836,7 +840,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iGain = iAdapter->Gain(); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -847,7 +851,7 @@ TBool CMMFDevSoundSession::DoSetGainL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TInt gain = devSoundBuf().iGain; TBool asyncOperation; User::LeaveIfError(iAdapter->SetGain(gain, asyncOperation)); @@ -864,7 +868,7 @@ TMMFDevSoundProxySettings devSoundSet; iAdapter->GetPlayBalanceL(devSoundSet.iLeftPercentage, devSoundSet.iRightPercentage); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -875,7 +879,7 @@ TBool CMMFDevSoundSession::DoSetPlayBalanceL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TInt leftPercentage = devSoundBuf().iLeftPercentage; TInt rightPercentage = devSoundBuf().iRightPercentage; TBool asyncOperation; @@ -893,7 +897,7 @@ TMMFDevSoundProxySettings devSoundSet; iAdapter->GetRecordBalanceL(devSoundSet.iLeftPercentage, devSoundSet.iRightPercentage); TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -904,7 +908,7 @@ TBool CMMFDevSoundSession::DoSetRecordBalanceL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TInt leftPercentage = devSoundBuf().iLeftPercentage; TInt rightPercentage = devSoundBuf().iRightPercentage; TBool asyncOperation; @@ -970,7 +974,7 @@ } TMMFDevSoundProxyHwBufPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); iBufferPlay->SetLastBuffer(devSoundBuf().iLastBuffer); TPtr8 dataPtr(iChunk.Base(), devSoundBuf().iBufferSize, devSoundBuf().iBufferSize); @@ -1002,7 +1006,7 @@ TBool completed = iAdapter->Stop(); if (completed) { - iQueuedRequests.Reset(); + FlushQueuedRequests(); FlushEventQueue(); // completed returned here means we were idle to start with. TODO could possibly skip this flush iChunk.Close(); } @@ -1030,7 +1034,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoPlayToneL - Enter")); TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); iCachedClientData = devSoundBuf; TInt frequency = devSoundBuf().iFrequencyOne; TTimeIntervalMicroSeconds duration(devSoundBuf().iDuration); @@ -1060,7 +1064,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoPlayDualToneL - Enter")); TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); iCachedClientData = devSoundBuf; TInt frequencyOne = devSoundBuf().iFrequencyOne; TInt frequencyTwo = devSoundBuf().iFrequencyTwo; @@ -1101,8 +1105,7 @@ iDtmfString = HBufC::NewL(dtmfLength); TPtr dtmfPtr = iDtmfString->Des(); - aMessage.ReadL(TInt(2), dtmfPtr); - + User::LeaveIfError(MessageRead(aMessage, TInt(2), dtmfPtr)); iAdapter->PlayDTMFStringL(*iDtmfString); iOperationCompletePending = ETrue; SYMBIAN_DEBPRN1(_L("CMMFDevSoundSession[0x%x]::DoPlayDTMFStringL - Exit. Return value is [%d]"), ETrue); @@ -1136,7 +1139,7 @@ iToneSeqBuf = HBufC8::NewL(toneLength); TPtr8 toneSeqPtr = iToneSeqBuf->Des(); - aMessage.ReadL(TInt(1), toneSeqPtr); + User::LeaveIfError(MessageRead(aMessage,TInt(1), toneSeqPtr)); iAdapter->PlayToneSequenceL(*iToneSeqBuf); iOperationCompletePending = ETrue; @@ -1162,7 +1165,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoPlayFixedSequenceL - Enter")); TPckgBuf buf; - aMessage.ReadL(TInt(1),buf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),buf)); TInt seqNum = buf(); iSeqNum = seqNum; iAdapter->PlayFixedSequenceL(seqNum); @@ -1189,7 +1192,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoSetDTMFLengthsL - Enter")); TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TTimeIntervalMicroSeconds32 toneOnLength = devSoundBuf().iToneOnLength; TTimeIntervalMicroSeconds32 toneOffLength = devSoundBuf().iToneOffLength; TTimeIntervalMicroSeconds32 pauseLength = devSoundBuf().iPauseLength; @@ -1206,7 +1209,7 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoSetVolumeRampL - Enter")); TMMFDevSoundProxySettingsPckg devSoundBuf; - aMessage.ReadL(TInt(1),devSoundBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),devSoundBuf)); TTimeIntervalMicroSeconds duration = devSoundBuf().iDuration; User::LeaveIfError(iAdapter->SetVolumeRamp(duration)); iOperationCompletePending = EFalse; // Volume ramp doesn't result on commit @@ -1224,14 +1227,14 @@ iArray.Reset(); TMMFPrioritySettingsPckg prioritySetBuf; - aMessage.ReadL(TInt(1),prioritySetBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),prioritySetBuf)); TMMFPrioritySettings prioritySet = prioritySetBuf(); iAdapter->GetSupportedInputDataTypesL(iArray, prioritySet); TPckgBuf pckg; pckg() = iArray.Count(); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -1246,14 +1249,14 @@ iArray.Reset(); TMMFPrioritySettingsPckg prioritySetBuf; - aMessage.ReadL(TInt(1),prioritySetBuf); + User::LeaveIfError(MessageRead(aMessage,TInt(1),prioritySetBuf)); TMMFPrioritySettings prioritySet = prioritySetBuf(); iAdapter->GetSupportedOutputDataTypesL(iArray, prioritySet); TPckgBuf pckg; pckg() = iArray.Count(); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -1266,7 +1269,7 @@ { TPckgBuf pckg; pckg() = iAdapter->SamplesRecorded(); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -1278,7 +1281,7 @@ { TPckgBuf pckg; pckg() = iAdapter->SamplesPlayed(); - aMessage.WriteL(TInt(2),pckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),pckg)); return ETrue; } @@ -1290,10 +1293,10 @@ { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::DoSetToneRepeatsL - Enter")); TPckgBuf countRepeat; - aMessage.ReadL(TInt(1),countRepeat); + User::LeaveIfError(MessageRead(aMessage,TInt(1),countRepeat)); TPckgBuf repeatTS; - aMessage.ReadL(TInt(2),repeatTS); + User::LeaveIfError(MessageRead(aMessage,TInt(2),repeatTS)); User::LeaveIfError(iAdapter->SetToneRepeats(countRepeat(), repeatTS())); SYMBIAN_DEBPRN1(_L("CMMFDevSoundSession[0x%x]::DoSetToneRepeatsL - Exit. Return value is [%d]"), ETrue); return ETrue; @@ -1307,7 +1310,7 @@ const RMmfIpcMessage& aMessage) { TPckgBuf prioritySet; - aMessage.ReadL(TInt(1),prioritySet); + User::LeaveIfError(MessageRead(aMessage,TInt(1),prioritySet)); User::LeaveIfError(iAdapter->SetPrioritySettings(prioritySet())); iOperationCompletePending = EFalse; @@ -1326,7 +1329,7 @@ TInt fixSeqCount = iAdapter->FixedSequenceCount(); fixSeqCountPckg = fixSeqCount; - aMessage.WriteL(TInt(2),fixSeqCountPckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),fixSeqCountPckg)); SYMBIAN_DEBPRN1(_L("CMMFDevSoundSession[0x%x]::DoFixedSequenceCountL - Exit. Return value is [%d]"), ETrue); return ETrue; } @@ -1354,7 +1357,7 @@ stream.WriteInt32L(iArray[i].FourCC()); i++; } - aMessage.WriteL(TInt(2), dataCopyBuffer->Ptr(0)); + User::LeaveIfError(MessageWrite(aMessage, TInt(2), dataCopyBuffer->Ptr(0))); stream.Close(); CleanupStack::PopAndDestroy(&stream); CleanupStack::PopAndDestroy(dataCopyBuffer); @@ -1377,14 +1380,14 @@ return EFalse; } TPckgBuf requestChunkBuf; - MmfMessageUtil::Read(aMessage, TInt(1), requestChunkBuf); + User::LeaveIfError(MessageRead(aMessage, TInt(1), requestChunkBuf)); TBool requestChunk = requestChunkBuf(); if (requestChunk) { // if the client requests, always do EOpen iHwBufPckgFill().iChunkOp = EOpen; } - TInt err = MmfMessageUtil::Write(aMessage, TInt(2), iHwBufPckgFill); + TInt err = MessageWrite(aMessage, TInt(2), iHwBufPckgFill); if ( (err == KErrNone) && (iHwBufPckgFill().iChunkOp == EOpen) ) { aMessage.Complete(iChunk); @@ -1410,7 +1413,7 @@ return EFalse; } - TInt err = MmfMessageUtil::Write(aMessage, TInt(2), iHwBufPckgEmpty); + TInt err = MessageWrite(aMessage, TInt(2), iHwBufPckgEmpty); if ( (err == KErrNone) && (iHwBufPckgEmpty().iChunkOp == EOpen) ) { aMessage.Complete(iChunk); @@ -1456,7 +1459,7 @@ aMessage.Complete(err); return EFalse; } - aMessage.WriteL(TInt(2),timePckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),timePckg)); return ETrue; } @@ -1465,7 +1468,7 @@ TBool isSupported = EFalse; TPckgBuf isSupportedPckg(isSupported); isSupportedPckg() = iAdapter->IsResumeSupported(); - aMessage.WriteL(TInt(2),isSupportedPckg); + User::LeaveIfError(MessageWrite(aMessage,TInt(2),isSupportedPckg)); return ETrue; } @@ -1522,7 +1525,8 @@ // (other items were commented in a header). // CMMFDevSoundSession::CMMFDevSoundSession() : - iSetClientConfigApplied (EFalse) + iSetClientConfigApplied (EFalse), + iDisconnecting (EFalse) { } @@ -1640,6 +1644,8 @@ void CMMFDevSoundSession::Disconnect(const RMessage2& aMessage) { SYMBIAN_DEBPRN0(_L("CMMFDevSoundSession[0x%x]::Disconnect - Enter")); + iDisconnecting = ETrue; + if (NeedToQueue()) { // if we are in the middle of something, enqueue and wait @@ -2106,7 +2112,7 @@ if (iRequestBeingServiced.Function()==EMMFDevSoundProxyStop) { // flush the queue - will have removed any stale items added between initial call and MMRC's reaction - iQueuedRequests.Reset(); + FlushQueuedRequests(); FlushEventQueue(); iChunk.Close(); } @@ -2116,7 +2122,7 @@ TMMFDevSoundProxySettings devSoundSet; devSoundSet.iCaps = iDevSoundCapabilities; TMMFDevSoundProxySettingsPckg pckg(devSoundSet); - iRequestBeingServiced.Message().Write(TInt(2),pckg); + MessageWrite(iRequestBeingServiced.Message(),TInt(2),pckg); } if(iRequestBeingServiced.Function()==EMMFDevSoundProxyCancelInitialize) @@ -2541,11 +2547,11 @@ TBool CMMFDevSoundSession::DoRegisterAsClientL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg buf; - aMessage.ReadL(0,buf); + User::LeaveIfError(MessageRead(aMessage,0,buf)); HBufC8* notificationRegistrationData = NULL; notificationRegistrationData = HBufC8::NewLC(User::LeaveIfError(aMessage.GetDesLengthL(1))); TPtr8 dataPtr(notificationRegistrationData->Des()); - aMessage.ReadL(1,dataPtr); + User::LeaveIfError(MessageRead(aMessage,1,dataPtr)); DoSetClientConfigL();// added here instead of the CreateL() TInt err = KErrNone; err = iAdapter->RegisterAsClient(buf().iNotificationEventUid,dataPtr); @@ -2561,7 +2567,7 @@ TBool CMMFDevSoundSession::DoCancelRegisterAsClientL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg buf; - aMessage.ReadL(0,buf); + User::LeaveIfError(MessageRead(aMessage,0,buf)); TInt err = KErrNone; err = iAdapter->CancelRegisterAsClient(buf().iNotificationEventUid); if (err != KErrNone) @@ -2575,14 +2581,14 @@ TBool CMMFDevSoundSession::DoGetResourceNotificationDataL(const RMmfIpcMessage& aMessage) { TMMFDevSoundProxySettingsPckg buf; - aMessage.ReadL(0,buf); + User::LeaveIfError(MessageRead(aMessage,0,buf)); HBufC8* notificationData = NULL; notificationData = HBufC8::NewLC(User::LeaveIfError(aMessage.GetDesMaxLengthL(2))); TPtr8 dataPtr(notificationData->Des()); - aMessage.ReadL(2,dataPtr); + User::LeaveIfError(MessageRead(aMessage,2,dataPtr)); TInt err = KErrNone; err = iAdapter->GetResourceNotificationData(buf().iNotificationEventUid,dataPtr); - aMessage.WriteL(2,*notificationData); + User::LeaveIfError(MessageWrite(aMessage,2,*notificationData)); CleanupStack::PopAndDestroy(1); // Notification data if (err != KErrNone) { @@ -2611,7 +2617,7 @@ if (aMessage.HasCapability(ECapabilityMultimediaDD) && aMessage.HasCapability(ECapabilityUserEnvironment)) { TPckgBuf threadId; - aMessage.ReadL(1, threadId); + User::LeaveIfError(MessageRead(aMessage, 1, threadId)); CMMFDevSoundServer* server = const_cast(static_cast(Server())); @@ -2640,6 +2646,46 @@ iAdapter->BufferErrorEvent(); } +void CMMFDevSoundSession::FlushQueuedRequests() + { + for (TInt queueIndex = (iQueuedRequests.Count() - 1); queueIndex >= 0; --queueIndex) + { + if ((iQueuedRequests[queueIndex].Type() == TMMFDevSoundRequest::ESessionEvents) && + (iQueuedRequests[queueIndex].Function() == RMessage2::EDisConnect)) + { + continue; + } + iQueuedRequests.Remove(queueIndex); + } + } + +TInt CMMFDevSoundSession::MessageRead(const RMmfIpcMessage& aMessage, TInt aParam, TDes8& aResult) + { + if (!iDisconnecting) + { + return MmfMessageUtil::Read(aMessage, aParam, aResult); + } + return KErrBadHandle; + } + +TInt CMMFDevSoundSession::MessageRead(const RMmfIpcMessage& aMessage, TInt aParam, TDes16& aResult) + { + if (!iDisconnecting) + { + return aMessage.Read(aParam, aResult); + } + return KErrBadHandle; + } + +TInt CMMFDevSoundSession::MessageWrite(const RMmfIpcMessage& aMessage, TInt aParam, const TDesC8& aValue) + { + if (!iDisconnecting) + { + return MmfMessageUtil::Write(aMessage, aParam, aValue); + } + return KErrBadHandle; + } + void CMMFDevSoundSession::ResetNotifiedError() // called at beginning of commit cycle, so any error will be from callbacks {