os/mm/devsound/sounddevbt/PlatSec/src/SoundDevice/MmfBtDevSoundCallbackHandler.cpp
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/mm/devsound/sounddevbt/PlatSec/src/SoundDevice/MmfBtDevSoundCallbackHandler.cpp Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,466 @@
1.4 +// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +//
1.18 +
1.19 +#include "MmfBtDevSoundCallbackHandler.h"
1.20 +
1.21 +//
1.22 +//BufferToBeFilled//
1.23 +//
1.24 +CMMFBufferToBeFilledHandler* CMMFBufferToBeFilledHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver)
1.25 + {
1.26 + CMMFBufferToBeFilledHandler* self = new(ELeave) CMMFBufferToBeFilledHandler(aDevSoundProxy, aDevSoundObserver);
1.27 + CleanupStack::PushL(self);
1.28 + self->ConstructL();
1.29 + CleanupStack::Pop();
1.30 + return self;
1.31 + }
1.32 +
1.33 +CMMFBufferToBeFilledHandler::CMMFBufferToBeFilledHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) :
1.34 + CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver)
1.35 + {
1.36 + CActiveScheduler::Add(this);
1.37 + }
1.38 +
1.39 +void CMMFBufferToBeFilledHandler::ConstructL()
1.40 + {
1.41 + }
1.42 +
1.43 +CMMFBufferToBeFilledHandler::~CMMFBufferToBeFilledHandler()
1.44 + {
1.45 + Cancel();
1.46 + }
1.47 +
1.48 +void CMMFBufferToBeFilledHandler::ReceiveEvents()
1.49 + {
1.50 + _LIT(KBTBFPanic, "CMMFBufferToBeFilledHandler");
1.51 + __ASSERT_ALWAYS(!IsActive(), User::Panic(KBTBFPanic, 1));
1.52 +
1.53 + iDevSoundProxy->ReceiveBufferToBeFilledEvent(iSetPckg, iStatus);
1.54 + SetActive();
1.55 + }
1.56 +
1.57 +void CMMFBufferToBeFilledHandler::CancelReceiveEvents()
1.58 + {
1.59 + Cancel();
1.60 + }
1.61 +
1.62 +void CMMFBufferToBeFilledHandler::RunL()
1.63 + {
1.64 + TMMFDevSoundProxyHwBuf aSet;
1.65 + aSet.iBufferType = iSetPckg().iBufferType;
1.66 + aSet.iRequestSize = iSetPckg().iRequestSize;
1.67 + aSet.iBufferSize = iSetPckg().iBufferSize;
1.68 + aSet.iLastBuffer = iSetPckg().iLastBuffer;
1.69 +
1.70 +
1.71 + CMMFDataBuffer* buffer = CMMFDescriptorBuffer::NewL(aSet.iBufferSize);
1.72 + CleanupStack::PushL(buffer);
1.73 + buffer->SetRequestSizeL(aSet.iRequestSize);
1.74 + CleanupStack::Pop(buffer);
1.75 + buffer->SetLastBuffer(aSet.iLastBuffer);
1.76 + iDevSoundProxy->SetBuffer(buffer);//DevSoundProxy takes the owenership of "buffer"
1.77 +
1.78 + ReceiveEvents();
1.79 + iDevSoundObserver.BufferToBeFilled(buffer);
1.80 + }
1.81 +
1.82 +void CMMFBufferToBeFilledHandler::DoCancel()
1.83 + {
1.84 + iDevSoundProxy->CancelReceiveBufferToBeFilledEvent();
1.85 + }
1.86 +
1.87 +TInt CMMFBufferToBeFilledHandler::RunError(TInt aError)
1.88 + {
1.89 + // report error to client - client should make decesion what to do with the error.
1.90 + iDevSoundObserver.PlayError(aError);
1.91 + ReceiveEvents();
1.92 +
1.93 + return KErrNone;
1.94 + }
1.95 +
1.96 +
1.97 +//
1.98 +//BufferToBeEmptied//
1.99 +//
1.100 +CMMFBufferToBeEmptiedHandler* CMMFBufferToBeEmptiedHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver)
1.101 + {
1.102 + CMMFBufferToBeEmptiedHandler* self = new(ELeave) CMMFBufferToBeEmptiedHandler(aDevSoundProxy, aDevSoundObserver);
1.103 + CleanupStack::PushL(self);
1.104 + self->ConstructL();
1.105 + CleanupStack::Pop();
1.106 + return self;
1.107 + }
1.108 +
1.109 +CMMFBufferToBeEmptiedHandler::CMMFBufferToBeEmptiedHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) :
1.110 + CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver)
1.111 + {
1.112 + CActiveScheduler::Add(this);
1.113 + }
1.114 +
1.115 +void CMMFBufferToBeEmptiedHandler::ConstructL()
1.116 + {
1.117 + }
1.118 +
1.119 +CMMFBufferToBeEmptiedHandler::~CMMFBufferToBeEmptiedHandler()
1.120 + {
1.121 + Cancel();
1.122 + delete iBuffer;
1.123 + }
1.124 +
1.125 +void CMMFBufferToBeEmptiedHandler::ReceiveEvents()
1.126 + {
1.127 + _LIT(KBTBEPanic, "CMMFBufferToBeEmptiedHandler");
1.128 + __ASSERT_ALWAYS(!IsActive(), User::Panic(KBTBEPanic, 1));
1.129 +
1.130 + iDevSoundProxy->ReceiveBufferToBeEmptiedEvent(iSetPckg, iStatus);
1.131 + SetActive();
1.132 + }
1.133 +
1.134 +void CMMFBufferToBeEmptiedHandler::CancelReceiveEvents()
1.135 + {
1.136 + Cancel();
1.137 + }
1.138 +
1.139 +void CMMFBufferToBeEmptiedHandler::RunL()
1.140 + {
1.141 + TMMFDevSoundProxyHwBuf aSet;
1.142 + aSet.iBufferType = iSetPckg().iBufferType;
1.143 + aSet.iRequestSize = iSetPckg().iRequestSize;
1.144 + aSet.iBufferSize = iSetPckg().iBufferSize;
1.145 + aSet.iLastBuffer = iSetPckg().iLastBuffer;
1.146 +
1.147 + if(iBuffer)
1.148 + {
1.149 + delete iBuffer;
1.150 + iBuffer = NULL;
1.151 + }
1.152 + iBuffer = CMMFDescriptorBuffer::NewL(aSet.iBufferSize);
1.153 + iBuffer->SetRequestSizeL(aSet.iRequestSize);
1.154 + iBuffer->SetLastBuffer(aSet.iLastBuffer);
1.155 + User::LeaveIfError(iDevSoundProxy->GetRecordedBufferL(*iBuffer));
1.156 +
1.157 + iDevSoundObserver.BufferToBeEmptied(iBuffer);
1.158 + ReceiveEvents();
1.159 + }
1.160 +
1.161 +void CMMFBufferToBeEmptiedHandler::DoCancel()
1.162 + {
1.163 + iDevSoundProxy->CancelReceiveBufferToBeEmptiedEvent();
1.164 + }
1.165 +
1.166 +TInt CMMFBufferToBeEmptiedHandler::RunError(TInt aError)
1.167 + {
1.168 + // report error to client - client should make decesion what to do with the error.
1.169 + iDevSoundObserver.RecordError(aError);
1.170 + ReceiveEvents();
1.171 +
1.172 + return KErrNone;
1.173 + }
1.174 +
1.175 +//
1.176 +//PlayError//
1.177 +//
1.178 +CMMFPlayErrorHandler* CMMFPlayErrorHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver)
1.179 + {
1.180 + CMMFPlayErrorHandler* self = new(ELeave) CMMFPlayErrorHandler(aDevSoundProxy, aDevSoundObserver);
1.181 + CleanupStack::PushL(self);
1.182 + self->ConstructL();
1.183 + CleanupStack::Pop();
1.184 + return self;
1.185 + }
1.186 +
1.187 +CMMFPlayErrorHandler::CMMFPlayErrorHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) :
1.188 + CActive(EPriorityStandard+1), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver)
1.189 + {
1.190 + CActiveScheduler::Add(this);
1.191 + }
1.192 +
1.193 +void CMMFPlayErrorHandler::ConstructL()
1.194 + {
1.195 + }
1.196 +
1.197 +CMMFPlayErrorHandler::~CMMFPlayErrorHandler()
1.198 + {
1.199 + Cancel();
1.200 + }
1.201 +
1.202 +void CMMFPlayErrorHandler::ReceiveEvents()
1.203 + {
1.204 + _LIT(KPEPanic, "CMMFPlayErrorHandler");
1.205 + __ASSERT_ALWAYS(!IsActive(), User::Panic(KPEPanic, 1));
1.206 +
1.207 + iDevSoundProxy->ReceivePlayErrorEvent(iSetPckg, iStatus);
1.208 + SetActive();
1.209 + }
1.210 +
1.211 +void CMMFPlayErrorHandler::CancelReceiveEvents()
1.212 + {
1.213 + Cancel();
1.214 + }
1.215 +
1.216 +void CMMFPlayErrorHandler::RunL()
1.217 + {
1.218 + iDevSoundObserver.PlayError(iStatus.Int());
1.219 + iStatus = KErrNone;
1.220 + ReceiveEvents();
1.221 + }
1.222 +
1.223 +void CMMFPlayErrorHandler::DoCancel()
1.224 + {
1.225 + iDevSoundProxy->CancelReceivePlayErrorEvent();
1.226 + }
1.227 +
1.228 +TInt CMMFPlayErrorHandler::RunError(TInt /*aError*/)
1.229 + {
1.230 + return KErrNone;
1.231 + }
1.232 +
1.233 +//
1.234 +//RecordError//
1.235 +//
1.236 +CMMFRecordErrorHandler* CMMFRecordErrorHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver)
1.237 + {
1.238 + CMMFRecordErrorHandler* self = new(ELeave) CMMFRecordErrorHandler(aDevSoundProxy, aDevSoundObserver);
1.239 + CleanupStack::PushL(self);
1.240 + self->ConstructL();
1.241 + CleanupStack::Pop();
1.242 + return self;
1.243 + }
1.244 +
1.245 +CMMFRecordErrorHandler::CMMFRecordErrorHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) :
1.246 + CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver)
1.247 + {
1.248 + CActiveScheduler::Add(this);
1.249 + }
1.250 +
1.251 +void CMMFRecordErrorHandler::ConstructL()
1.252 + {
1.253 + }
1.254 +
1.255 +CMMFRecordErrorHandler::~CMMFRecordErrorHandler()
1.256 + {
1.257 + Cancel();
1.258 + }
1.259 +
1.260 +void CMMFRecordErrorHandler::ReceiveEvents()
1.261 + {
1.262 + _LIT(KREPanic, "CMMFRecordErrorHandler");
1.263 + __ASSERT_ALWAYS(!IsActive(), User::Panic(KREPanic, 1));
1.264 +
1.265 + iDevSoundProxy->ReceiveRecordErrorEvent(iSetPckg, iStatus);
1.266 + SetActive();
1.267 + }
1.268 +
1.269 +void CMMFRecordErrorHandler::CancelReceiveEvents()
1.270 + {
1.271 + Cancel();
1.272 + }
1.273 +
1.274 +void CMMFRecordErrorHandler::RunL()
1.275 + {
1.276 + iDevSoundObserver.RecordError(iStatus.Int());
1.277 + iStatus = KErrNone;
1.278 + ReceiveEvents();
1.279 + }
1.280 +
1.281 +void CMMFRecordErrorHandler::DoCancel()
1.282 + {
1.283 + iDevSoundProxy->CancelReceiveRecordErrorEvent();
1.284 + }
1.285 +
1.286 +TInt CMMFRecordErrorHandler::RunError(TInt /*aError*/)
1.287 + {
1.288 + return KErrNone;
1.289 + }
1.290 +
1.291 +//
1.292 +//ToneFinished//
1.293 +//
1.294 +
1.295 +
1.296 +CMMFToneFinishedHandler* CMMFToneFinishedHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver)
1.297 + {
1.298 + CMMFToneFinishedHandler* self = new(ELeave) CMMFToneFinishedHandler(aDevSoundProxy, aDevSoundObserver);
1.299 + CleanupStack::PushL(self);
1.300 + self->ConstructL();
1.301 + CleanupStack::Pop();
1.302 + return self;
1.303 + }
1.304 +
1.305 +CMMFToneFinishedHandler::CMMFToneFinishedHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) :
1.306 + CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver)
1.307 + {
1.308 + CActiveScheduler::Add(this);
1.309 + }
1.310 +
1.311 +void CMMFToneFinishedHandler::ConstructL()
1.312 + {
1.313 + }
1.314 +
1.315 +CMMFToneFinishedHandler::~CMMFToneFinishedHandler()
1.316 + {
1.317 + Cancel();
1.318 + }
1.319 +
1.320 +void CMMFToneFinishedHandler::ReceiveEvents()
1.321 + {
1.322 + _LIT(KTFPanic, "CMMFToneFinishedHandler");
1.323 + __ASSERT_ALWAYS(!IsActive(), User::Panic(KTFPanic, 1));
1.324 +
1.325 + iDevSoundProxy->ReceiveToneFinishedEvent(iSetPckg, iStatus);
1.326 + SetActive();
1.327 + }
1.328 +
1.329 +void CMMFToneFinishedHandler::CancelReceiveEvents()
1.330 + {
1.331 + Cancel();
1.332 + }
1.333 +
1.334 +void CMMFToneFinishedHandler::RunL()
1.335 + {
1.336 + iDevSoundObserver.ToneFinished(iStatus.Int());
1.337 + ReceiveEvents();
1.338 + }
1.339 +
1.340 +void CMMFToneFinishedHandler::DoCancel()
1.341 + {
1.342 + iDevSoundProxy->CancelReceiveToneFinishedEvent();
1.343 + }
1.344 +
1.345 +TInt CMMFToneFinishedHandler::RunError(TInt /*aError*/)
1.346 + {
1.347 + return KErrNone;
1.348 + }
1.349 +
1.350 +//
1.351 +//InitializeComplete//
1.352 +//
1.353 +
1.354 +
1.355 +CMMFInitializeCompleteHandler* CMMFInitializeCompleteHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver)
1.356 + {
1.357 + CMMFInitializeCompleteHandler* self = new(ELeave) CMMFInitializeCompleteHandler(aDevSoundProxy, aDevSoundObserver);
1.358 + CleanupStack::PushL(self);
1.359 + self->ConstructL();
1.360 + CleanupStack::Pop();
1.361 + return self;
1.362 + }
1.363 +
1.364 +CMMFInitializeCompleteHandler::CMMFInitializeCompleteHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) :
1.365 + CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver)
1.366 + {
1.367 + CActiveScheduler::Add(this);
1.368 + }
1.369 +
1.370 +void CMMFInitializeCompleteHandler::ConstructL()
1.371 + {
1.372 + }
1.373 +
1.374 +CMMFInitializeCompleteHandler::~CMMFInitializeCompleteHandler()
1.375 + {
1.376 + Cancel();
1.377 + }
1.378 +
1.379 +void CMMFInitializeCompleteHandler::ReceiveEvents()
1.380 + {
1.381 + _LIT(KICPanic, "CMMFInitializeCompleteHandler");
1.382 + __ASSERT_ALWAYS(!IsActive(), User::Panic(KICPanic, 1));
1.383 +
1.384 + iDevSoundProxy->ReceiveInitializeCompleteEvent(iSetPckg, iStatus);
1.385 + SetActive();
1.386 + }
1.387 +
1.388 +void CMMFInitializeCompleteHandler::CancelReceiveEvents()
1.389 + {
1.390 + Cancel();
1.391 + }
1.392 +
1.393 +void CMMFInitializeCompleteHandler::RunL()
1.394 + {
1.395 + iDevSoundObserver.InitializeComplete(iStatus.Int());
1.396 + iStatus = KErrNone;
1.397 + ReceiveEvents();
1.398 + }
1.399 +
1.400 +void CMMFInitializeCompleteHandler::DoCancel()
1.401 + {
1.402 + iDevSoundProxy->CancelReceiveInitializeCompleteEvent();
1.403 + }
1.404 +
1.405 +TInt CMMFInitializeCompleteHandler::RunError(TInt /*aError*/)
1.406 + {
1.407 + return KErrNone;
1.408 + }
1.409 +
1.410 +//
1.411 +//SendEventToClient//
1.412 +//
1.413 +
1.414 +
1.415 +CMMFSendEventToClientHandler* CMMFSendEventToClientHandler::NewL(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver)
1.416 + {
1.417 + CMMFSendEventToClientHandler* self = new(ELeave) CMMFSendEventToClientHandler(aDevSoundProxy, aDevSoundObserver);
1.418 + CleanupStack::PushL(self);
1.419 + self->ConstructL();
1.420 + CleanupStack::Pop();
1.421 + return self;
1.422 + }
1.423 +
1.424 +CMMFSendEventToClientHandler::CMMFSendEventToClientHandler(RMMFDevSoundProxy* aDevSoundProxy, MDevSoundObserver& aDevSoundObserver) :
1.425 + CActive(EPriorityLow), iDevSoundProxy(aDevSoundProxy), iDevSoundObserver(aDevSoundObserver)
1.426 + {
1.427 + CActiveScheduler::Add(this);
1.428 + }
1.429 +
1.430 +void CMMFSendEventToClientHandler::ConstructL()
1.431 + {
1.432 + }
1.433 +
1.434 +CMMFSendEventToClientHandler::~CMMFSendEventToClientHandler()
1.435 + {
1.436 + Cancel();
1.437 + }
1.438 +
1.439 +void CMMFSendEventToClientHandler::ReceiveEvents()
1.440 + {
1.441 + _LIT(KSETCPanic, "CMMFSendEventToClientHandler");
1.442 + __ASSERT_ALWAYS(!IsActive(), User::Panic(KSETCPanic, 1));
1.443 +
1.444 + iDevSoundProxy->ReceiveSendEventToClientEvent(iEventPckg, iStatus);
1.445 + SetActive();
1.446 + }
1.447 +
1.448 +void CMMFSendEventToClientHandler::CancelReceiveEvents()
1.449 + {
1.450 + Cancel();
1.451 + }
1.452 +
1.453 +void CMMFSendEventToClientHandler::RunL()
1.454 + {
1.455 + iDevSoundObserver.SendEventToClient(iEventPckg());
1.456 + iStatus = KErrNone;
1.457 + ReceiveEvents();
1.458 + }
1.459 +
1.460 +void CMMFSendEventToClientHandler::DoCancel()
1.461 + {
1.462 + iDevSoundProxy->CancelReceiveSendEventToClientEvent();
1.463 + }
1.464 +
1.465 +TInt CMMFSendEventToClientHandler::RunError(TInt /*aError*/)
1.466 + {
1.467 + return KErrNone;
1.468 + }
1.469 +