devsound/a3fdevsound/src/mmfdevsoundproxy/mmfdevsoundcallbackhandler.cpp
author hgs
Mon, 18 Oct 2010 12:47:26 +0100
changeset 4 9d4397b300d1
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk44_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
// INCLUDE FILES
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
#include "mmfdevsoundproxy.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#include "mmfdevsoundcallbackhandler.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#ifdef _DEBUG
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
#include <e32debug.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
#define SYMBIAN_DEBPRN0(str)                RDebug::Print(str, this)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#define SYMBIAN_DEBPRN1(str, val1)          RDebug::Print(str, this, val1)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
#define SYMBIAN_DEBPRN2(str, val1, val2)    RDebug::Print(str, this, val1, val2)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
#else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
#define SYMBIAN_DEBPRN0(str)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
#define SYMBIAN_DEBPRN1(str, val1)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
#define SYMBIAN_DEBPRN2(str, val1, val2)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
#endif //_DEBUG
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
// ============================ MEMBER FUNCTIONS ==============================
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
// CMsgQueueHandler::NewL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
// Two-phased constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
CMsgQueueHandler* CMsgQueueHandler::NewL(
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
						RMMFDevSoundProxy* aDevSoundProxy,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
						MDevSoundObserver& aDevSoundObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
						RMsgQueue<TMMFDevSoundQueueItem>* aMsgQueue,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
						MMMFDevSoundCustomInterfaceObserver& aDevSoundCIObserver)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
	CMsgQueueHandler* self = new(ELeave) CMsgQueueHandler(aDevSoundProxy,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
														aDevSoundObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
														aMsgQueue,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
														aDevSoundCIObserver);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
	CleanupStack::PushL(self);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
	self->ConstructL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	CleanupStack::Pop(self);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	return self;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
// CMsgQueueHandler::CMsgQueueHandler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
// C++ default constructor can NOT contain any code, that might leave.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
CMsgQueueHandler::CMsgQueueHandler (RMMFDevSoundProxy* aDevSoundProxy,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
									MDevSoundObserver& aDevSoundObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
									RMsgQueue<TMMFDevSoundQueueItem>* aMsgQueue,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
									MMMFDevSoundCustomInterfaceObserver& aDevSoundCIObserver)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
:	CActive(EPriorityStandard),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
	iDevSoundProxy(aDevSoundProxy),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
	iDevSoundObserver(aDevSoundObserver),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
	iMsgQueue(aMsgQueue),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
	iChunkDataPtr(0, 0, 0),
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
	iDevSoundCIObserver(aDevSoundCIObserver)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
	CActiveScheduler::Add(this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
// CMsgQueueHandler::ConstructL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
// Symbian 2nd phase constructor can leave.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
void CMsgQueueHandler::ConstructL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
	iEmptyBuffer = CMMFDescriptorBuffer::NewL(0);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
	iAsyncQueueFinish = new (ELeave) CAsyncCallBack(CActive::EPriorityStandard);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
	TCallBack asyncCallback(AsyncQueueFinishCallback, this);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
	iAsyncQueueFinish->Set(asyncCallback);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
// CMsgQueueHandler::~CMsgQueueHandler
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
// Destructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
CMsgQueueHandler::~CMsgQueueHandler()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
	Cancel();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
	if ( iMsgQueue )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
		iMsgQueue->Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
	iChunk.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
	delete iDataBuffer;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
	delete iEmptyBuffer;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
	delete iAsyncQueueFinish;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
// CMsgQueueHandler::ReceiveEvents
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
// Subscribes for Play Error event from the DevSound server.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
void CMsgQueueHandler::ReceiveEvents()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::ReceiveEvents - Enter"));	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
    if (!IsActive())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
		iMsgQueue->NotifyDataAvailable(iStatus);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
		SetActive();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::ReceiveEvents - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
// CMsgQueueHandler::RunL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
// Handles active object’s request completion event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
void CMsgQueueHandler::RunL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::RunL - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
    TInt err = iMsgQueue->Receive(iCurrentItem);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
	if (err == KErrNone || err == KErrUnderflow)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
		// Signal that we're ready to process the next message
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
		ReceiveEvents();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
	if (err == KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
		switch (iCurrentItem.iRequest)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
			case EMMFDevSoundProxyICEvent:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
				DoInitComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
			case EMMFDevSoundProxyBTBFEvent:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
				iAsyncQueueFinish->Cancel(); // if still active, means previous cycle did not Finish(). Cancel.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
				TRAP(err, DoBTBFCompleteL());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
				if (err)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
					iAsyncQueueFinish->CallBack(); // async call to Finish()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
					iDevSoundObserver.PlayError(err);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
			case EMMFDevSoundProxyBTBEEvent:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
				iAsyncQueueFinish->Cancel(); // if still active, means previous cycle did not Finish(). Cancel.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
				TRAP(err, DoBTBECompleteL());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
				if (err)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
					iAsyncQueueFinish->CallBack(); // async call to Finish()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
					iDevSoundObserver.RecordError(err);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
			case EMMFDevSoundProxyPEEvent:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
				if (iCurrentItem.iErrorCode == KErrDied ||
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
					iCurrentItem.iErrorCode == KErrNotReady)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
					{ 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
					DoPlayErrorComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
					// "this" pointer is no longer valid here as the associated
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
					// instance of the DevSound has been deleted along with this
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
					// CMsgQueueHandler object. So, we can only return here.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
					return;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
				else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
					DoPlayErrorComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
			case EMMFDevSoundProxyREEvent:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
				DoRecordErrorComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
			case EMMFDevSoundProxyTFEvent:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
				DoToneFinishedComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
			case EMMFDevSoundProxySETCEvent:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
				DoSendEventToClientComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
			case EMMFDevSoundCustomCommandCloseMuxDemuxPair:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
				TMMFEvent pckgevent = iCurrentItem.iEventPckg();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
				TInt handle = pckgevent.iEventType.iUid;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
				iDevSoundCIObserver.CloseCustomInterface(handle);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
			case EMMFDevSoundProxyPausedRecordCompleteEvent:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
				DoPausedRecordComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
			default:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
				break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::RunL - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
// CMsgQueueHandler::RunError
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
// Called by CActive object framework if RunL leaves.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
TInt CMsgQueueHandler::RunError(TInt aError)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
    SYMBIAN_DEBPRN1(_L("CMsgQueueHandler[0x%x]::RunError - Enter. Error [%d]"), aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
    TMMFEvent event;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
	event.iErrorCode = aError;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
	iDevSoundObserver.SendEventToClient(event);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::RunError - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
	return KErrNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
// CMsgQueueHandler::DoCancel
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
// Called when client cancels the wait for a completion of an outstanding
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
// request.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
void CMsgQueueHandler::DoCancel()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoCancel - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
    iMsgQueue->CancelDataAvailable();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoCancel - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
// CMsgQueueHandler::DoInitComplete
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
// Handles initialization completion event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
void CMsgQueueHandler::DoInitComplete()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoInitComplete - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
    iDevSoundObserver.InitializeComplete(iCurrentItem.iErrorCode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoInitComplete - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
// CMsgQueueHandler::DoPlayErrorComplete
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
// Handles play completion or cancel event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
void CMsgQueueHandler::DoPlayErrorComplete()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoPlayErrorComplete - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
    iAsyncQueueFinish->CallBack(); // async call to Finish()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
	iDevSoundObserver.PlayError(iCurrentItem.iErrorCode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoPlayErrorComplete - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
// CMsgQueueHandler::DoBTBFCompleteL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
// Handles CMMFDevSound object's data request event to supply CMMFDevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
// with the buffer that it needs to play.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
void CMsgQueueHandler::DoBTBFCompleteL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoBTBFCompleteL - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
    // Returns either chunk handle or NULL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
	// any error is assumed to be due to a pending PlayError(), so the error here is ignored - the PlayError() call will ensure the client remains lively
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
	// the chunk has been closed by the server. No action should be taken.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
	TBool requestChunk = iDataBuffer==NULL; // if we have no buffer, tell server we need a chunk handle
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
	TInt handle = iDevSoundProxy->BufferToBeFilledData(requestChunk, iSetPckg);
4
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   291
	User::LeaveIfError(handle);
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   292
	
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   293
	if ( iSetPckg().iChunkOp == EOpen )
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
		{
4
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   295
		AssignDataBufferToChunkL(handle);
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
		}
4
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   297
	else
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   298
		{
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   299
		UpdateDataBufferL();
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   300
		}
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   301
	iDataBuffer->SetStatus(EAvailable);
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   302
	
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   303
	// Let the MMF fill the buffer with data
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   304
	iDevSoundObserver.BufferToBeFilled(iDataBuffer);
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoBTBFCompleteL - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
// CMsgQueueHandler::DoBTBECompleteL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
// Handles CMMFDevSound object's data request event to supply CMMFDevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
// with the buffer that it needs to record.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
void CMsgQueueHandler::DoBTBECompleteL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoBTBECompleteL - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
    // Returns either chunk handle or NULL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
	// any error is assumed to be due to a pending RecordError(), so the error here is ignored - the RecordError() call will ensure the client remains lively
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
	// the chunk has been closed by the server. No action should be taken.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
	TInt handle = iDevSoundProxy->BufferToBeEmptiedData(iSetPckg);
4
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   321
	User::LeaveIfError(handle);
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   322
	
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   323
	if ( iSetPckg().iChunkOp == EOpen )
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
		{
4
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   325
		AssignDataBufferToChunkL(handle);
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
		}
4
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   327
	
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   328
	__ASSERT_ALWAYS(iDataBuffer, User::Leave(KErrGeneral)); //iDataBuffer should never be empty here
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   329
	iDataBuffer->SetStatus(EFull);	
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   330
	iDataBuffer->Data().SetLength(iSetPckg().iRequestSize);
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   331
	iDevSoundObserver.BufferToBeEmptied(iDataBuffer);
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   332
	
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoBTBECompleteL - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
// CMsgQueueHandler::DoRecordErrorComplete
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
// Handles record completion or cancel event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
void CMsgQueueHandler::DoRecordErrorComplete()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoRecordErrorComplete - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
    iAsyncQueueFinish->CallBack(); // async call to Finish()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
	iDevSoundObserver.RecordError(iCurrentItem.iErrorCode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoRecordErrorComplete - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
// CMsgQueueHandler::DoToneFinishedComplete
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   351
// Handles tone play completion event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   352
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   353
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   354
void CMsgQueueHandler::DoToneFinishedComplete()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   355
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   356
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoToneFinishedComplete - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   357
    iDevSoundObserver.ToneFinished(iCurrentItem.iErrorCode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   358
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoToneFinishedComplete - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   359
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   360
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   361
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   362
// CMsgQueueHandler::DoSendEventToClientComplete
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   363
// Sends DevSound server event completion notification to the client.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   364
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   365
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   366
void CMsgQueueHandler::DoSendEventToClientComplete()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   367
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   368
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoSendEventToClientComplete - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   369
    iDevSoundObserver.SendEventToClient(iCurrentItem.iEventPckg());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   370
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoSendEventToClientComplete - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   371
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   372
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   373
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   374
// CMsgQueueHandler::DoPausedRecordComplete
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   375
// Handles CMMFDevSound object's data request event to supply CMMFDevSound
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   376
// with the last buffer that it needs to record.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   377
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   378
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   379
void CMsgQueueHandler::DoPausedRecordComplete()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   380
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   381
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoPausedRecordComplete - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   382
    ASSERT(iEmptyBuffer);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   383
	iEmptyBuffer->SetLastBuffer(ETrue);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   384
	iDevSoundObserver.BufferToBeEmptied(iEmptyBuffer);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   385
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoPausedRecordComplete - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   386
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   387
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   388
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   389
// CMsgQueueHandler::AssignDataBufferToChunkL
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   390
// Updates chunk handle.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   391
// ----------------------------------------------------------------------------
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   392
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   393
void CMsgQueueHandler::AssignDataBufferToChunkL(TInt aHandle)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   394
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   395
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::AssignDataBufferToChunkL - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   396
    if ( iChunk.Handle() )
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   397
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   398
		iChunk.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   399
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   400
	User::LeaveIfError(iChunk.SetReturnedHandle(aHandle));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   401
	// Adjust ptr to map only requested size
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   402
	// The existing clients should handle TPtr with length zero and max length
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   403
	// iSetPckg().iBufferSize.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   404
	// When we make sure every client handles it, replace second parameter with
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   405
	// zero.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   406
	//iChunkDataPtr.Set(iChunk.Base(), 0, iSetPckg().iBufferSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   407
	iChunkDataPtr.Set(iChunk.Base(), iSetPckg().iBufferSize, iSetPckg().iBufferSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   408
	if (!iDataBuffer)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   409
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   410
		iDataBuffer = CMMFPtrBuffer::NewL();	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   411
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   412
	UpdateDataBufferL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   413
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::AssignDataBufferToChunkL - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   414
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   415
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   416
void CMsgQueueHandler::UpdateDataBufferL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   417
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   418
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::UpdateDataBufferL - Enter"));
4
9d4397b300d1 2010wk44_01
hgs
parents: 0
diff changeset
   419
    __ASSERT_ALWAYS(iDataBuffer, User::Leave(KErrGeneral)); // to get here, we should have a data buffer
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   420
	iDataBuffer->SetPtr(iChunkDataPtr);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   421
	iDataBuffer->SetRequestSizeL(iSetPckg().iRequestSize);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   422
	iDataBuffer->SetLastBuffer(EFalse);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   423
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::UpdateDataBufferL - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   424
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   425
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   426
void CMsgQueueHandler::Finish()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   427
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   428
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::Finish - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   429
    if (iDataBuffer)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   430
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   431
		delete iDataBuffer;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   432
		iDataBuffer = NULL;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   433
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   434
	if (iChunk.Handle())
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   435
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   436
		iChunk.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   437
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   438
	SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::Finish - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   439
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   440
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   441
// 	AsyncQueueStartCallback
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   442
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   443
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   444
TInt CMsgQueueHandler::AsyncQueueFinishCallback(TAny* aPtr)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   445
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   446
    CMsgQueueHandler* self = static_cast<CMsgQueueHandler*>(aPtr);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   447
	self->DoAsyncQueueFinishCallback();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   448
	return KErrNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   449
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   450
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   451
void CMsgQueueHandler::DoAsyncQueueFinishCallback()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   452
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   453
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoAsyncQueueFinishCallback - Enter"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   454
    Finish();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   455
    SYMBIAN_DEBPRN0(_L("CMsgQueueHandler[0x%x]::DoAsyncQueueFinishCallback - Exit"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   456
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   457
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   458
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   459
// End of File