sl@0: // Copyright (c) 2005-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 "MmfBtDevSoundCallbackHandler.h" sl@0: sl@0: // sl@0: //BufferToBeFilled// sl@0: // sl@0: CMMFBufferToBeFilledHandler* CMMFBufferToBeFilledHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) sl@0: { sl@0: CMMFBufferToBeFilledHandler* self = new(ELeave) CMMFBufferToBeFilledHandler(aDevSoundProxy, aDevSoundObserver); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CMMFBufferToBeFilledHandler::CMMFBufferToBeFilledHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) : sl@0: CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: void CMMFBufferToBeFilledHandler::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CMMFBufferToBeFilledHandler::~CMMFBufferToBeFilledHandler() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFBufferToBeFilledHandler::ReceiveEvents() sl@0: { sl@0: _LIT(KBTBFPanic, "CMMFBufferToBeFilledHandler"); sl@0: __ASSERT_ALWAYS(!IsActive(), User::Panic(KBTBFPanic, 1)); sl@0: sl@0: iDevSoundProxy->ReceiveBufferToBeFilledEvent(iSetPckg, iStatus); sl@0: SetActive(); sl@0: } sl@0: sl@0: void CMMFBufferToBeFilledHandler::CancelReceiveEvents() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFBufferToBeFilledHandler::RunL() sl@0: { sl@0: TMMFDevSoundProxyHwBuf aSet; sl@0: aSet.iBufferType = iSetPckg().iBufferType; sl@0: aSet.iRequestSize = iSetPckg().iRequestSize; sl@0: aSet.iBufferSize = iSetPckg().iBufferSize; sl@0: aSet.iLastBuffer = iSetPckg().iLastBuffer; sl@0: sl@0: sl@0: CMMFDataBuffer* buffer = CMMFDescriptorBuffer::NewL(aSet.iBufferSize); sl@0: CleanupStack::PushL(buffer); sl@0: buffer->SetRequestSizeL(aSet.iRequestSize); sl@0: CleanupStack::Pop(buffer); sl@0: buffer->SetLastBuffer(aSet.iLastBuffer); sl@0: iDevSoundProxy->SetBuffer(buffer);//DevSoundProxy takes the owenership of "buffer" sl@0: sl@0: ReceiveEvents(); sl@0: iDevSoundObserver.BufferToBeFilled(buffer); sl@0: } sl@0: sl@0: void CMMFBufferToBeFilledHandler::DoCancel() sl@0: { sl@0: iDevSoundProxy->CancelReceiveBufferToBeFilledEvent(); sl@0: } sl@0: sl@0: TInt CMMFBufferToBeFilledHandler::RunError(TInt aError) sl@0: { sl@0: // report error to client - client should make decesion what to do with the error. sl@0: iDevSoundObserver.PlayError(aError); sl@0: ReceiveEvents(); sl@0: sl@0: return KErrNone; sl@0: } sl@0: sl@0: sl@0: // sl@0: //BufferToBeEmptied// sl@0: // sl@0: CMMFBufferToBeEmptiedHandler* CMMFBufferToBeEmptiedHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) sl@0: { sl@0: CMMFBufferToBeEmptiedHandler* self = new(ELeave) CMMFBufferToBeEmptiedHandler(aDevSoundProxy, aDevSoundObserver); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CMMFBufferToBeEmptiedHandler::CMMFBufferToBeEmptiedHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) : sl@0: CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: void CMMFBufferToBeEmptiedHandler::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CMMFBufferToBeEmptiedHandler::~CMMFBufferToBeEmptiedHandler() sl@0: { sl@0: Cancel(); sl@0: delete iBuffer; sl@0: } sl@0: sl@0: void CMMFBufferToBeEmptiedHandler::ReceiveEvents() sl@0: { sl@0: _LIT(KBTBEPanic, "CMMFBufferToBeEmptiedHandler"); sl@0: __ASSERT_ALWAYS(!IsActive(), User::Panic(KBTBEPanic, 1)); sl@0: sl@0: iDevSoundProxy->ReceiveBufferToBeEmptiedEvent(iSetPckg, iStatus); sl@0: SetActive(); sl@0: } sl@0: sl@0: void CMMFBufferToBeEmptiedHandler::CancelReceiveEvents() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFBufferToBeEmptiedHandler::RunL() sl@0: { sl@0: TMMFDevSoundProxyHwBuf aSet; sl@0: aSet.iBufferType = iSetPckg().iBufferType; sl@0: aSet.iRequestSize = iSetPckg().iRequestSize; sl@0: aSet.iBufferSize = iSetPckg().iBufferSize; sl@0: aSet.iLastBuffer = iSetPckg().iLastBuffer; sl@0: sl@0: if(iBuffer) sl@0: { sl@0: delete iBuffer; sl@0: iBuffer = NULL; sl@0: } sl@0: iBuffer = CMMFDescriptorBuffer::NewL(aSet.iBufferSize); sl@0: iBuffer->SetRequestSizeL(aSet.iRequestSize); sl@0: iBuffer->SetLastBuffer(aSet.iLastBuffer); sl@0: User::LeaveIfError(iDevSoundProxy->GetRecordedBufferL(*iBuffer)); sl@0: sl@0: iDevSoundObserver.BufferToBeEmptied(iBuffer); sl@0: ReceiveEvents(); sl@0: } sl@0: sl@0: void CMMFBufferToBeEmptiedHandler::DoCancel() sl@0: { sl@0: iDevSoundProxy->CancelReceiveBufferToBeEmptiedEvent(); sl@0: } sl@0: sl@0: TInt CMMFBufferToBeEmptiedHandler::RunError(TInt aError) sl@0: { sl@0: // report error to client - client should make decesion what to do with the error. sl@0: iDevSoundObserver.RecordError(aError); sl@0: ReceiveEvents(); sl@0: sl@0: return KErrNone; sl@0: } sl@0: sl@0: // sl@0: //PlayError// sl@0: // sl@0: CMMFPlayErrorHandler* CMMFPlayErrorHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) sl@0: { sl@0: CMMFPlayErrorHandler* self = new(ELeave) CMMFPlayErrorHandler(aDevSoundProxy, aDevSoundObserver); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CMMFPlayErrorHandler::CMMFPlayErrorHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) : sl@0: CActive(EPriorityStandard+1), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: void CMMFPlayErrorHandler::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CMMFPlayErrorHandler::~CMMFPlayErrorHandler() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFPlayErrorHandler::ReceiveEvents() sl@0: { sl@0: _LIT(KPEPanic, "CMMFPlayErrorHandler"); sl@0: __ASSERT_ALWAYS(!IsActive(), User::Panic(KPEPanic, 1)); sl@0: sl@0: iDevSoundProxy->ReceivePlayErrorEvent(iSetPckg, iStatus); sl@0: SetActive(); sl@0: } sl@0: sl@0: void CMMFPlayErrorHandler::CancelReceiveEvents() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFPlayErrorHandler::RunL() sl@0: { sl@0: iDevSoundObserver.PlayError(iStatus.Int()); sl@0: iStatus = KErrNone; sl@0: ReceiveEvents(); sl@0: } sl@0: sl@0: void CMMFPlayErrorHandler::DoCancel() sl@0: { sl@0: iDevSoundProxy->CancelReceivePlayErrorEvent(); sl@0: } sl@0: sl@0: TInt CMMFPlayErrorHandler::RunError(TInt /*aError*/) sl@0: { sl@0: return KErrNone; sl@0: } sl@0: sl@0: // sl@0: //RecordError// sl@0: // sl@0: CMMFRecordErrorHandler* CMMFRecordErrorHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) sl@0: { sl@0: CMMFRecordErrorHandler* self = new(ELeave) CMMFRecordErrorHandler(aDevSoundProxy, aDevSoundObserver); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CMMFRecordErrorHandler::CMMFRecordErrorHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) : sl@0: CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: void CMMFRecordErrorHandler::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CMMFRecordErrorHandler::~CMMFRecordErrorHandler() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFRecordErrorHandler::ReceiveEvents() sl@0: { sl@0: _LIT(KREPanic, "CMMFRecordErrorHandler"); sl@0: __ASSERT_ALWAYS(!IsActive(), User::Panic(KREPanic, 1)); sl@0: sl@0: iDevSoundProxy->ReceiveRecordErrorEvent(iSetPckg, iStatus); sl@0: SetActive(); sl@0: } sl@0: sl@0: void CMMFRecordErrorHandler::CancelReceiveEvents() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFRecordErrorHandler::RunL() sl@0: { sl@0: iDevSoundObserver.RecordError(iStatus.Int()); sl@0: iStatus = KErrNone; sl@0: ReceiveEvents(); sl@0: } sl@0: sl@0: void CMMFRecordErrorHandler::DoCancel() sl@0: { sl@0: iDevSoundProxy->CancelReceiveRecordErrorEvent(); sl@0: } sl@0: sl@0: TInt CMMFRecordErrorHandler::RunError(TInt /*aError*/) sl@0: { sl@0: return KErrNone; sl@0: } sl@0: sl@0: // sl@0: //ToneFinished// sl@0: // sl@0: sl@0: sl@0: CMMFToneFinishedHandler* CMMFToneFinishedHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) sl@0: { sl@0: CMMFToneFinishedHandler* self = new(ELeave) CMMFToneFinishedHandler(aDevSoundProxy, aDevSoundObserver); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CMMFToneFinishedHandler::CMMFToneFinishedHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) : sl@0: CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: void CMMFToneFinishedHandler::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CMMFToneFinishedHandler::~CMMFToneFinishedHandler() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFToneFinishedHandler::ReceiveEvents() sl@0: { sl@0: _LIT(KTFPanic, "CMMFToneFinishedHandler"); sl@0: __ASSERT_ALWAYS(!IsActive(), User::Panic(KTFPanic, 1)); sl@0: sl@0: iDevSoundProxy->ReceiveToneFinishedEvent(iSetPckg, iStatus); sl@0: SetActive(); sl@0: } sl@0: sl@0: void CMMFToneFinishedHandler::CancelReceiveEvents() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFToneFinishedHandler::RunL() sl@0: { sl@0: iDevSoundObserver.ToneFinished(iStatus.Int()); sl@0: ReceiveEvents(); sl@0: } sl@0: sl@0: void CMMFToneFinishedHandler::DoCancel() sl@0: { sl@0: iDevSoundProxy->CancelReceiveToneFinishedEvent(); sl@0: } sl@0: sl@0: TInt CMMFToneFinishedHandler::RunError(TInt /*aError*/) sl@0: { sl@0: return KErrNone; sl@0: } sl@0: sl@0: // sl@0: //InitializeComplete// sl@0: // sl@0: sl@0: sl@0: CMMFInitializeCompleteHandler* CMMFInitializeCompleteHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) sl@0: { sl@0: CMMFInitializeCompleteHandler* self = new(ELeave) CMMFInitializeCompleteHandler(aDevSoundProxy, aDevSoundObserver); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CMMFInitializeCompleteHandler::CMMFInitializeCompleteHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) : sl@0: CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: void CMMFInitializeCompleteHandler::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CMMFInitializeCompleteHandler::~CMMFInitializeCompleteHandler() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFInitializeCompleteHandler::ReceiveEvents() sl@0: { sl@0: _LIT(KICPanic, "CMMFInitializeCompleteHandler"); sl@0: __ASSERT_ALWAYS(!IsActive(), User::Panic(KICPanic, 1)); sl@0: sl@0: iDevSoundProxy->ReceiveInitializeCompleteEvent(iSetPckg, iStatus); sl@0: SetActive(); sl@0: } sl@0: sl@0: void CMMFInitializeCompleteHandler::CancelReceiveEvents() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFInitializeCompleteHandler::RunL() sl@0: { sl@0: iDevSoundObserver.InitializeComplete(iStatus.Int()); sl@0: iStatus = KErrNone; sl@0: ReceiveEvents(); sl@0: } sl@0: sl@0: void CMMFInitializeCompleteHandler::DoCancel() sl@0: { sl@0: iDevSoundProxy->CancelReceiveInitializeCompleteEvent(); sl@0: } sl@0: sl@0: TInt CMMFInitializeCompleteHandler::RunError(TInt /*aError*/) sl@0: { sl@0: return KErrNone; sl@0: } sl@0: sl@0: // sl@0: //SendEventToClient// sl@0: // sl@0: sl@0: sl@0: CMMFSendEventToClientHandler* CMMFSendEventToClientHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) sl@0: { sl@0: CMMFSendEventToClientHandler* self = new(ELeave) CMMFSendEventToClientHandler(aDevSoundProxy, aDevSoundObserver); sl@0: CleanupStack::PushL(self); sl@0: self->ConstructL(); sl@0: CleanupStack::Pop(); sl@0: return self; sl@0: } sl@0: sl@0: CMMFSendEventToClientHandler::CMMFSendEventToClientHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) : sl@0: CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver) sl@0: { sl@0: CActiveScheduler::Add(this); sl@0: } sl@0: sl@0: void CMMFSendEventToClientHandler::ConstructL() sl@0: { sl@0: } sl@0: sl@0: CMMFSendEventToClientHandler::~CMMFSendEventToClientHandler() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFSendEventToClientHandler::ReceiveEvents() sl@0: { sl@0: _LIT(KSETCPanic, "CMMFSendEventToClientHandler"); sl@0: __ASSERT_ALWAYS(!IsActive(), User::Panic(KSETCPanic, 1)); sl@0: sl@0: iDevSoundProxy->ReceiveSendEventToClientEvent(iEventPckg, iStatus); sl@0: SetActive(); sl@0: } sl@0: sl@0: void CMMFSendEventToClientHandler::CancelReceiveEvents() sl@0: { sl@0: Cancel(); sl@0: } sl@0: sl@0: void CMMFSendEventToClientHandler::RunL() sl@0: { sl@0: iDevSoundObserver.SendEventToClient(iEventPckg()); sl@0: iStatus = KErrNone; sl@0: ReceiveEvents(); sl@0: } sl@0: sl@0: void CMMFSendEventToClientHandler::DoCancel() sl@0: { sl@0: iDevSoundProxy->CancelReceiveSendEventToClientEvent(); sl@0: } sl@0: sl@0: TInt CMMFSendEventToClientHandler::RunError(TInt /*aError*/) sl@0: { sl@0: return KErrNone; sl@0: } sl@0: