devsound/devsoundrefplugin/src/controller/audio/MmfAudioToneController.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
// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     2
// All rights reserved.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     7
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     8
// Initial Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    10
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    11
// Contributors:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    12
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    13
// Description:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    14
//
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    15
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    16
#ifndef __MMF_AUDIOTONECONTROLLER_H__
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    17
#define __MMF_AUDIOTONECONTROLLER_H__
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    18
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    19
// Standard EPOC32 includes required by this header file
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    20
#include <e32base.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    21
#include <e32std.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    22
#include <ecom/implementationproxy.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    23
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    24
// Public Media Server includes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    25
#include <mmf/common/mmfcontroller.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    26
#include <mmf/server/mmfdatasink.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    27
#include <mmf/server/mmfdatasource.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    28
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    29
#include <mmf/common/mmfstandardcustomcommands.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    30
#include <mmf/server/sounddevice.h>
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    31
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    32
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    33
/** 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    34
Panic category and codes for the Audio Tone Controller 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    35
@internalTechnology
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    36
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    37
_LIT(KMMFAudioToneControllerPanicCategory, "MMFAudioToneController");
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    38
enum TMMFMdaAudioToneControllerPanicCodes
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    39
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    40
	EMMFMdaAudioToneControllerAlreadyPrepared,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    41
	EMMFMdaAudioToneControllerBadToneConfig,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    42
	EMMFMdaAudioToneControllerBadMixinCall
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    43
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    44
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    45
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    46
The public API for clients of the MMFAudioToneController
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    47
@internalTechnology
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    48
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    49
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    50
class CMMFAudioToneController : public CMMFController, 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    51
							public MMMFAudioPlayDeviceCustomCommandImplementor,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    52
							public MMMFAudioPlayControllerCustomCommandImplementor,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    53
							public MDevSoundObserver,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    54
							public MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    55
	{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    56
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    57
	static CMMFController* NewL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    58
	virtual ~CMMFAudioToneController();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    59
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    60
	//implement CMMFController ecom plugin interface
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    61
	virtual void AddDataSourceL(MDataSource& aDataSource);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    62
	virtual void AddDataSinkL(MDataSink& aDataSink);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    63
	virtual void RemoveDataSourceL(MDataSource& aDataSource);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    64
	virtual void RemoveDataSinkL(MDataSink& aDataSink);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    65
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    66
	virtual void ResetL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    67
	virtual void PrimeL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    68
	virtual void PrimeL(TMMFMessage& aMessage);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    69
	virtual void PlayL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    70
	virtual void PauseL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    71
	virtual void StopL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    72
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    73
	virtual TTimeIntervalMicroSeconds PositionL() const {User::Leave(KErrNotSupported); TTimeIntervalMicroSeconds zero(0); return zero;}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    74
	virtual void SetPositionL(const TTimeIntervalMicroSeconds& /*aPosition*/){} 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    75
	virtual TTimeIntervalMicroSeconds DurationL() const {TTimeIntervalMicroSeconds zero(0); return zero;}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    76
	virtual void CustomCommand(TMMFMessage& aMessage);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    77
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    78
	virtual void SetPrioritySettings(const TMMFPrioritySettings& aPrioritySettings);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    79
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    80
	virtual void GetNumberOfMetaDataEntriesL(TInt& /*aNumberOfEntries*/){User::Leave(KErrNotSupported);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    81
	virtual CMMFMetaDataEntry* GetMetaDataEntryL(TInt /*aIndex*/){User::Leave(KErrNotSupported); return NULL;}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    82
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    83
	//from MMMFAudioPlayDeviceCustomCommandImplementor
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    84
	virtual void MapdSetVolumeL(TInt aVolume);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    85
	virtual void MapdGetMaxVolumeL(TInt& aMaxVolume);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    86
	virtual void MapdGetVolumeL(TInt& aVolume);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    87
	virtual void MapdSetVolumeRampL(const TTimeIntervalMicroSeconds& aRampDuration);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    88
	virtual void MapdSetBalanceL(TInt aBalance);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    89
	virtual void MapdGetBalanceL(TInt& aBalance);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    90
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    91
	//from MMMFAudioPlayControllerCustomCommandImplementor
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    92
	virtual void MapcSetPlaybackWindowL(const TTimeIntervalMicroSeconds& /*aStart*/, const TTimeIntervalMicroSeconds& /*aEnd*/) {User::Leave(KErrNotSupported);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    93
	virtual void MapcDeletePlaybackWindowL() {User::Leave(KErrNotSupported);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    94
	virtual void MapcGetLoadingProgressL(TInt& /*aPercentageComplete*/) {User::Leave(KErrNotSupported);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    95
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    96
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    97
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    98
	// From DevSoundObserver
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
    99
	void InitializeComplete(TInt aError);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   100
	void ToneFinished(TInt aError); 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   101
	void BufferToBeFilled(CMMFBuffer* /*aBuffer*/) {Panic(EMMFMdaAudioToneControllerBadMixinCall);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   102
	void PlayError(TInt /*aError*/)	{Panic(EMMFMdaAudioToneControllerBadMixinCall);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   103
	void BufferToBeEmptied(CMMFBuffer* /*aBuffer*/)	{Panic(EMMFMdaAudioToneControllerBadMixinCall);} 
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   104
	void RecordError(TInt /*aError*/)	{Panic(EMMFMdaAudioToneControllerBadMixinCall);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   105
	void ConvertError(TInt /*aError*/)  {Panic(EMMFMdaAudioToneControllerBadMixinCall);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   106
	void DeviceMessage(TUid /*aMessageId*/, const TDesC8& /*aMsg*/) {Panic(EMMFMdaAudioToneControllerBadMixinCall);}	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   107
	void SendEventToClient(const TMMFEvent& aEvent);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   108
	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   109
	//from MMMFAudioPlayControllerSetRepeatsCustomCommandImplementor
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   110
	virtual TInt MapcSetRepeats(TInt aRepeatNumberOfTimes, const TTimeIntervalMicroSeconds& aTrailingSilence);
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   111
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   112
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   113
public:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   114
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   115
/**
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   116
 TControllerState is an enumeration within the namespace  CMMFAudioToneController
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   117
 The enumeration provides a set of control states:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   118
 EStopped is the initial state the controller resides in after it has been loaded
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   119
 EPrimed is the state the controller is in when it has been associated with datapaths but is not streaming data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   120
 EPlaying is the state the controller is in when it is streaming data
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   121
*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   122
	enum TControllerState
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   123
		{
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   124
		EStopped,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   125
		EPrimed,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   126
		EPriming,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   127
		EPausePlaying,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   128
		EPlaying,
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   129
		};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   130
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   131
protected:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   132
	CMMFAudioToneController();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   133
protected:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   134
	void ConstructL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   135
	void NegotiateL();
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   136
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   137
	// state accessor functions
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   138
	TBool SetState( TControllerState aState );
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   139
	TControllerState State() const ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   140
	TBool            IsValidStateTransition( TControllerState aState ) const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   141
	TBool            Invariant() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   142
	TBool            IsValidState( TControllerState aState ) const ;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   143
	TBool            ResetPostCondition() const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   144
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   145
	void             CalculateLeftRightBalance( TInt& aLeft, TInt& aRight, TInt aBalance ) const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   146
	void			 CalculateBalance( TInt& aBalance, TInt aLeft, TInt aRight ) const;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   147
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   148
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   149
	void Panic(TInt aPanicCode) const {User::Panic(KMMFAudioToneControllerPanicCategory, aPanicCode);}
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   150
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   151
private:
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   152
/** The data source provided by the Controller Framework, not owned (do not delete) */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   153
	MDataSource*             iDataSource;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   154
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   155
/** buffer that holds the data to be played */
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   156
	CMMFDataBuffer*          iToneSequenceData;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   157
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   158
/** the Dev Sound that will be used to play the tone*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   159
	CMMFDevSound*            iMMFDevSound;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   160
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   161
/** Current state of the controller, see TControllerState*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   162
	TControllerState         iState;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   163
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   164
/** Priority setting used to controll access the Dev Sound*/	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   165
	TMMFPrioritySettings     iPrioritySettings;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   166
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   167
/** Indicates whether both a surce and data sink have been supplied by the Controller Framework*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   168
	TBool                    iSourceAndSinkAdded;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   169
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   170
/** Indicates whether DevSound supports resume for current configuration*/
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   171
	TBool                    iIsResumeSupported;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   172
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   173
/** Used to store message */	
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   174
	TMMFMessage*			 iMessage;
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   175
	};
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   176
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   177
79dd3e2336a0 2010wk36_01
hgs
parents:
diff changeset
   178
#endif