devsound/a3fdevsound/src/mmfdevsoundproxy/mmfdevsoundcallbackhandler.h
author hgs
Tue, 02 Nov 2010 12:28:51 +0000
changeset 6 fe9d1bf55678
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
* All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
* Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
* Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
* Description:
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
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#ifndef MMFDEVSOUNDCALLBACKHANDLER_H
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#define MMFDEVSOUNDCALLBACKHANDLER_H
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
//  INCLUDES
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
#include <e32base.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#include <e32msgqueue.h>
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
#include "mmfaudioclientserver.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
// CLASS DECLARATION
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
class RMMFDevSoundProxy;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
class MDevSoundObserver;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
*  Utility class to handle Play Error callback from DevSound server.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
*  @lib MMFDevSound.dll
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
*  @since 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
class CMsgQueueHandler : public CActive
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
public:  // Constructors and destructor
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
	* Constructs, and returns a pointer to, a new
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
	* CMMFPlayErrorHandler object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
	* Leaves on failure..
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
	* @param RMMFDevSoundProxy* aDevSoundProxy A handle to DevSoundProxy to
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
	*        subcribe for event notification from server.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
	* @param MDevSoundObserver& aDevSoundObserver A reference to
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
	*        MDevSoundObserver to which the events will be forwarded to.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
	* @param aDevSoundCIObserver Observer which will receive Custom Interface events
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
	* @return CMMFPlayErrorHandler* A pointer to newly created object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
	static CMsgQueueHandler* NewL(RMMFDevSoundProxy* aDevSoundProxy,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
								MDevSoundObserver& aDevSoundObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
								RMsgQueue<TMMFDevSoundQueueItem>* aMsgQueue,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
								MMMFDevSoundCustomInterfaceObserver& aDevSoundCIObserver);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
	* Destructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
	~CMsgQueueHandler();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
	* Subscribes for Play Error event from DevSound server.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
	* @since 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
	* @return void
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
	void ReceiveEvents();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
	* Called by DevSound server when Play Error event occurs.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
	* Leaves on failure.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
	* @since 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
	* @return void
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
	void RunL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
	* Called by CActive object framework if RunL leaves.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
	* @since 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
	* @param TInt aError Reason for leave
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
	* @return TInt KErrNone if error is handled succesfully, else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
	* corresponding error codel
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
	TInt RunError(TInt aError);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
	* Called by CActive object framework when client cancels active object.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
	* @since 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
	* @return void
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
	void DoCancel();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
	* Called as part of Stop() process to recover any buffers etc
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
	void Finish();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
private:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
	* C++ default constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
	CMsgQueueHandler(RMMFDevSoundProxy* aDevSoundProxy,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
					MDevSoundObserver& aDevSoundObserver,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
					RMsgQueue<TMMFDevSoundQueueItem>* aMsgQueue,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
					MMMFDevSoundCustomInterfaceObserver& aDevSoundCIObserver);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
	/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
	* By default Symbian 2nd phase constructor is private.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
	void ConstructL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
	/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
	* Handles initialization completion event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
	void DoInitComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
	/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
	* Handles play completion or cancel event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
	void DoPlayErrorComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	* Handles record completion or cancel event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
	void DoRecordErrorComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
	/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
	* Handles CMMFDevSound object's data request event to supply
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
	* CMMFDevSound with the buffer that it needs to play.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
	void DoBTBFCompleteL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
	/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
	* Handles CMMFDevSound object's data request event to supply
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
	* CMMFDevSound with the buffer that it needs to record.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
	void DoBTBECompleteL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
	/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
	* Handles tone play completion event.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
	void DoToneFinishedComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
	/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
	* Sends DevSound server event completion notification to the client.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
	void DoSendEventToClientComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
	/* Handles CMMFDevSound object's data request event to supply 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
	* CMMFDevSound with the last buffer that it needs to record.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
	void DoPausedRecordComplete();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
	/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
	* Allocates local data buffer and links it with the global chunk.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
	* @param aHandle Handle to a global chunk or 0 if chunk already exists.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
	void AssignDataBufferToChunkL(TInt aHandle);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
	/*
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
	* Update existing data buffer with latest buffer info from server
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
	* but using existing chunk
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
	*/
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
	void UpdateDataBufferL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
	static TInt AsyncQueueFinishCallback(TAny* aPtr);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
	void DoAsyncQueueFinishCallback();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
private:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
	RMMFDevSoundProxy* iDevSoundProxy;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
	MDevSoundObserver& iDevSoundObserver;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
	TMMFDevSoundProxyHwBufPckg iSetPckg;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
	TMMFEventPckg iEventPckg;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
	RMsgQueue<TMMFDevSoundQueueItem>* iMsgQueue;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
	TMMFDevSoundQueueItem   iCurrentItem;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
	RChunk iChunk;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
	TPtr8 iChunkDataPtr;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
	CMMFPtrBuffer* iDataBuffer;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
	CMMFDataBuffer* iEmptyBuffer;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
	MMMFDevSoundCustomInterfaceObserver& iDevSoundCIObserver;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
	CAsyncCallBack*				iAsyncQueueFinish;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
	};
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
#endif      // MMFDEVSOUNDCALLBACKHANDLER_H
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
// End of File