mmhais/refacladapt/src/tonehwdevice/tonehwdevice.h
author hgs
Fri, 08 Oct 2010 19:40:43 +0100
changeset 0 79dd3e2336a0
permissions -rw-r--r--
2010wk36_01
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     1
/*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
* All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
* Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
* Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
* Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#ifndef C_TONEHWDEVICE_H
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
#define C_TONEHWDEVICE_H
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
//  INCLUDES
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
#include <mmf/server/mmfhwdevice.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
#include <mmf/server/sounddevice.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
#include <mmf/server/mmfhwdevicesetup.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
#include <mmf/server/mmfswcodecwrappercustominterfacesuids.hrh>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
#include <a3f/a3f_trace_utils.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
#include "mdasoundadapter.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
#include "ToneGenerator.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
#include "tonedatapath.h"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
#include <a3f/tonedata.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
//note we need to keep this buffer at 8K as the tone utility expects 8K
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
const TInt KPCM16ToPCM16BufferSize = 0x2000;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
//controlls buffer sizes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
const TInt KDevSoundDefaultFrameSize = 0x1000;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
const TInt KDevSoundMinFrameSize = 0x800; //2K
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
const TInt KDevSoundMaxFrameSize = 0x4000;  //16K
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
const TInt KDevSoundDeltaFrameSize = 0x800; //2K
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
const TInt KDevSoundFramesPerSecond = 4;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
// FORWARD DECLARATIONS
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
class CToneDataPath;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
// CLASS DECLARATION
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
 * Implementation of custom interface class for tone play functionality created by the
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
 * CToneCodec::CustomInterface() method.  It provides
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
 * access to miscellaneous functionality such as volume settings
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
 */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
class TToneCustomInterface : public MPlayCustomInterface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
	TToneCustomInterface() : iVolume(0),iBytesPlayed(0),iDevice(NULL),iRampDuration(0) {}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
	void SetVolume(TUint aVolume);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
	TUint Volume();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
	TUint BytesPlayed();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
	void SetVolumeRamp(const TTimeIntervalMicroSeconds& aRampDuration);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
	TTimeIntervalMicroSeconds& VolumeRamp();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
	void SetDevice(RMdaDevSound* iDevice);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
	TUint iVolume;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
	TUint iBytesPlayed;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
	RMdaDevSound* iDevice;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
	TTimeIntervalMicroSeconds iRampDuration;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
/*
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
* Codec Implementation
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
class CToneCodec : public CBase
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
	Indicates the result of processing data from the source buffer to a destination buffer
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
	and provides functions to compare the result code.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
	The CToneCodec buffer sizes should be set to return EProcessComplete
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
	The other return codes are to keep the ProcessL method compatible with
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
	the 7.0s CMMFCodec API.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
	class TCodecProcessResult
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
	public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
		/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
		Flag to track the codec's processing status.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
		*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
		enum TCodecProcessResultStatus
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
			{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
			/** The codec has successfully completed its processing. */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
			EProcessComplete,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
			/** Could not empty the source buffer because the destination buffer became full. */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
			EProcessIncomplete,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
			/** Codec came across an end of data. */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
			EEndOfData,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
			/** Could not fill the destination buffer because the source buffer has been emptied. */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
			EDstNotFilled,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
			/** An error occured. */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
			EProcessError
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
			};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
		/** Overloaded operator to test equality. */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
		TBool operator==(const TCodecProcessResultStatus aStatus) const {return (iCodecProcessStatus == aStatus);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
		/** Overloaded operator to test inequality. */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
		TBool operator!=(const TCodecProcessResultStatus aStatus) const {return (iCodecProcessStatus != aStatus);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
		/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
		Default constructor.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
		*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
		TCodecProcessResult()
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
			:iCodecProcessStatus(EProcessError), iSrcBytesProcessed(0), iDstBytesAdded(0) {};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
		public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
		/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
		The codec's processing status
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
		@see enum TCodecProcessResultStatus
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
		*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
		TCodecProcessResultStatus iCodecProcessStatus;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
		/** The number of source bytes processed */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
		TUint iSrcBytesProcessed;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
		/** The number of bytes added to the destination buffer */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
		TUint iDstBytesAdded;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
		};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
	CToneCodec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
	~CToneCodec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
	Processes the data in the specified source buffer and writes the processed data to
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
	the specified destination buffer.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
	This function is synchronous, when the function returns the data has been processed.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
	@param	aSource
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
			The source buffer containing data to encode or decode.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
	@param	aDest
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
	 		The destination buffer to hold the data after encoding or decoding.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
	@return	The result of the processing.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
	@see    TCodecProcessResult
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
	TCodecProcessResult ProcessL(const CMMFBuffer& aSource, CMMFBuffer& aDest);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   158
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   159
	Gets the max size of the source buffer passed into the
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   160
	CToneCodec::ProcessL function.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   161
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   162
	Note that this means that this is the Max size of each buffer passed to the codec.  The actual
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
	size of the data could be less than the max size.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   164
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   165
	@return The max size of the source buffer in bytes.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   166
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   167
	TUint SourceBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   168
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   169
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   170
	Gets the max size of the sink (destination) buffer passed into the
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   171
	CToneCodec::ProcessL method.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   172
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   173
	Note that this means that this is the Max size of each buffer passed to the codec.  The actual
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   174
	size of the data written to this buffer could be less than the max size.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   175
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   176
	@return The max size of the sink buffer in bytes.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   177
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   178
	TUint SinkBufferSize();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   179
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   180
	TBool IsNullCodec() {return ETrue;};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   181
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   182
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   183
	private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   184
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   185
	TUint iBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   186
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   187
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   188
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   189
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   190
class CToneHwDevice : public CMMFHwDevice,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   191
					  public MMMFHwDeviceObserver
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   192
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   193
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   194
	public:  // Constructors and destructor
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   195
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   196
	static CToneHwDevice* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   197
	~CToneHwDevice();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   198
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   199
	public: // New functions
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   200
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   201
	public: // Functions from base classes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   202
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   203
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   204
	TInt Init(THwDeviceInitParams& aDevInfo);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   205
	TInt Start(TDeviceFunc /*aFuncCmd*/, TDeviceFlow /*aFlowCmd*/);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   206
	TInt Stop();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   207
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   208
	/* This function is not used in tone playback*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   209
	TInt Pause();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   210
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   211
	TAny* CustomInterface(TUid aInterfaceUid);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   212
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   213
	TInt FillThisHwBuffer(CMMFBuffer& aHwBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   214
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   215
	TInt ThisHwBufferFilled(CMMFBuffer& aMmfBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   216
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   217
	/*From MMMFHwDeviceObserver*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   218
	/* This function is not used in tone playback*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   219
	TInt ThisHwBufferEmptied(CMMFBuffer& aMmfBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   220
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   221
	/*From MMMFHwDeviceObserver*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   222
	/* This function is not used in tone playback*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   223
	TInt EmptyThisHwBuffer(CMMFBuffer& aMmfBuffer);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   224
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   225
	/*From MMMFHwDeviceObserver*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   226
	TInt MsgFromHwDevice(TUid aMessageType, const TDesC8 &aMsg);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   227
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   228
	/*From MMMFHwDeviceObserver*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   229
	void Stopped();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   230
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   231
	/*From MMMFHwDeviceObserver*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   232
	void Error(TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   233
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   234
	TInt SetConfig(TTaskConfig& aConfig);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   235
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   236
	/* This function is not used in tone playback*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   237
	TInt StopAndDeleteCodec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   238
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   239
	/* This function is not used in tone playback*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   240
	TInt DeleteCodec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   241
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   242
	CToneCodec& Codec();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   243
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   244
	TInt GenerateBufferData();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   245
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   246
	void SetActiveToneBuffer();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   247
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   248
	TInt SamplingFrequency();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   249
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   250
	TInt NumberOfChannels();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   251
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   252
	TInt FillFreeToneBuffer();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   253
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   254
	TInt ReadToneData();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   255
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   256
	void FreeBuffers();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   257
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   258
	TBool ValidDTMFString(const TDesC& aDTMFString);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   259
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   260
	TBool RecognizeSequence(const TDesC8& aData);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   261
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   262
	protected:  // New functions
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   263
	protected:  // Functions from base classes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   264
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   265
	private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   266
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   267
	CToneHwDevice();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   268
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   269
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   270
	public:		// Data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   271
	protected:	// Data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   272
	private:	// Data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   273
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   274
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   275
	* Pointer to the buffer that was last sent to the observer to be filled.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   276
	* Own pointer.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   277
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   278
	CMMFDataBuffer* iHwDataBufferFill;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   279
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   280
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   281
	* Hwdevice observer. Information is send to upper level by using this pointer.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   282
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   283
	MMMFHwDeviceObserver* iHwDeviceObserver;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   284
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   285
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   286
	The datapath used to transfer the data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   287
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   288
	CToneDataPath* iDataPath;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   289
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   290
	MPlayCustomInterface* iPlayCustomInterface;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   291
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   292
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   293
	* Initialize status of the tone
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   294
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   295
	TBool iToneInitialized;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   296
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   297
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   298
	* Playback status of the tone
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   299
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   300
	TBool iTonePlaying;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   301
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   302
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   303
	* Pointer to information about hwdevice initializing parameters.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   304
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   305
	//TSizeHwDeviceInitArgs* iSizeHwDeviceInitArgs;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   306
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   307
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   308
	* Type of the tone
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   309
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   310
	TToneData::TToneType iToneType;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   311
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   312
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   313
	* Tone Data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   314
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   315
	TToneData myToneData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   316
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   317
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   318
	* Tone Codec
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   319
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   320
	CToneCodec *iCodec;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   321
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   322
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   323
	The buffer size of the sound device
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   324
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   325
	TUint iDeviceBufferSize;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   326
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   327
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   328
	The sample rate of the sound device
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   329
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   330
	TInt iSampleRate;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   331
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   332
	/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   333
	The number of channels of the sound device
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   334
	*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   335
	TInt iChannels;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   336
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   337
	TBool iLastBuffer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   338
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   339
	TTimeIntervalMicroSeconds iRampDuration;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   340
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   341
	//WINS Sound Device Structures
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   342
	RMdaDevSound::TCurrentSoundFormatBuf soundDeviceSettings;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   343
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   344
	// Double buffer tone playing
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   345
	CMMFDataBuffer*				iToneBuffer1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   346
	CMMFDataBuffer*				iToneBuffer2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   347
	// Reference to current tone buffer playing
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   348
	CMMFDataBuffer*				iActiveToneBuffer;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   349
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   350
	TBool						iFirstCallFromHwDevice;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   351
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   352
	//Tone Stuff:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   353
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   354
	MMdaToneSynthesis*			iCurrentGenerator;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   355
	TMdaSimpleToneGenerator		iToneGen;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   356
	TMdaDualToneGenerator		iDualToneGen;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   357
	TMdaDTMFGenerator			iDTMFGen;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   358
	TMdaSequenceGenerator		iSequenceGen; // Not Supported
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   359
	TInt						iRepeatCount;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   360
	TInt						iFrequency1;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   361
	TInt						iFrequency2;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   362
	TTimeIntervalMicroSeconds	iRepeatTrailingSilence;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   363
	TTimeIntervalMicroSeconds	iDuration;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   364
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   365
	TTimeIntervalMicroSeconds32 myToneOnLength;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   366
	TTimeIntervalMicroSeconds32 myToneOffLength;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   367
	TTimeIntervalMicroSeconds32 myPauseLength;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   368
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   369
	TDesC *iDTMFString;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   370
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   371
	TDesC8 *iSequenceData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   372
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   373
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   374
	#include "tonehwdevice.inl"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   375
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   376
#endif
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   377
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   378
// End of File