vtengines/videoteleng/Inc/Audio/CVtEngAudioHandler.h
changeset 0 ed9695c8bcbe
child 8 07d1685f0cd4
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/vtengines/videoteleng/Inc/Audio/CVtEngAudioHandler.h	Mon Nov 23 14:47:47 2009 +0200
@@ -0,0 +1,304 @@
+/*
+* Copyright (c) 2004-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Audio handler class.
+*
+*/
+
+
+
+#ifndef CVTENGAUDIOHANDLER_H
+#define CVTENGAUDIOHANDLER_H
+
+//  INCLUDES
+#include    <e32base.h>
+#include    "MVtEngAudio.h"
+#include    "CVtEngOperation.h"
+#include    "MVtEngSettingPSObserver.h"
+#include    "CVTEngPubSubsListener.h"
+#include    "CVtEngAccessoryHandler.h"
+#include    "MVtEngAccessoryObserver.h"
+// new audio routing
+#include    "telephonyaudiorouting.h"
+#include    "mtelephonyaudioroutingobserver.h"
+#include    <rphcltserver.h>
+#include    <mmf/server/sounddevice.h>
+
+// FORWARD DECLARATIONS
+class CVtEngStateManager;
+class CRoutingEnabler;
+
+/**
+*  Class for audio handling.
+*
+*  @lib videoteleng.lib
+*  @since Series 60 2.6
+*/
+NONSHARABLE_CLASS( CVtEngAudioHandler )
+    : public CBase,
+      public MVtEngAudio,
+      private MVtEngAccessoryObserver,
+      private MTelephonyAudioRoutingObserver
+    {
+    public: // Constructors and destructor
+
+        /**
+        * Two-phased constructor.
+        */
+        static CVtEngAudioHandler* NewL();
+
+        /**
+        * Destructor.
+        */
+        virtual ~CVtEngAudioHandler();
+
+    public: // New functions.
+
+        /**
+        * Performs on operation in the handler.
+        * @param operation to be performed on the handler
+        */
+        void HandleL( CVtEngOperation& aOperation );
+
+        /**
+        * Creates/releases temporary DevSound instance.
+        * @param aEnable
+        *   ETrue creates devSound
+        *   EFalse destructs devSound
+        */
+        void SetRoutingEnablerL( const TBool aEnable );
+
+        /**
+        * Increases audio volume
+        */
+        TBool IncreaseVolume();
+
+        /**
+        * Decreases audio volume
+        */
+        TBool DecreaseVolume();
+
+    private: // Functions from base classes.
+
+        // from MVtEngAccessoryObserver
+
+        /** @see MVtEngAccessoryObserver */
+        virtual void AccessoryModeChanged( const TAccMode& aMode,
+            const TBool aActivated );
+
+        // from MTelephonyAudioRoutingObserver
+
+        /** @see MTelephonyAudioRoutingObserver::AvailableOutputsChanged */
+		virtual void AvailableOutputsChanged( CTelephonyAudioRouting& aTelephonyAudioRouting );
+
+        /** @see MTelephonyAudioRoutingObserver::OutputChanged */
+		virtual void OutputChanged( CTelephonyAudioRouting& aTelephonyAudioRouting );
+
+        /** @see MTelephonyAudioRoutingObserver::SetOutputComplete */
+		virtual void SetOutputComplete( CTelephonyAudioRouting& aTelephonyAudioRouting,
+		    TInt aError );
+
+    public: // Functions from base classes.
+
+        /** @see MVtEngAudio::GetRoutingState. */
+        virtual TInt GetRoutingState( TAudioRoutingState& aAudioRoutingState );
+
+        /** @see MVtEngAudio::GetRoutingAvailability. */
+        virtual TInt GetRoutingAvailability(
+            const TAudioRoutingState aAudioRoutingState,
+            TBool& aAvailable );
+
+        /** @see MVtEngAudio::GetHeadsetType. */
+        virtual TInt GetHeadsetType( TWiredHeadsetType& aHeadsetType );
+
+        /** @see MVtEngAudio::OutputVolume. */
+        virtual TInt OutputVolume( const TBool aHandsetVolume ) const;
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CVtEngAudioHandler();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Completes operation.
+        * @param aResult error code
+        */
+        void CompleteOperation( TInt aResult );
+
+        /**
+        * Sets loudspeaker on / off.
+        * @param aTurnOn ETrue if on, EFalse if off
+        * @param aShowNote ETrue if note is allowed to be shown, EFalse if not
+        */
+        void SetLoudspeakerL( TBool aTurnOn, TBool aShowNote );
+
+        /**
+        * Sets Bluetooth on / off.
+        * @param aTurnOn ETrue if on, EFalse if off
+        */
+        void SetBluetoothL( TBool aTurnOn );
+
+        /**
+        * Updates current volume that should be used.
+        */
+        void UpdateCurrentVolume();
+
+        /**
+        * Checks if given audio output route is available.
+        * @return ETrue if given audio output route is available
+        */
+        TBool IsOutputAvailable( const CTelephonyAudioRouting::TAudioOutput aOutput );
+
+        /**
+        * Modifies the volume by aDelta.
+        */
+        TBool AdjustVolume( const TInt aDelta );
+
+    private: // Data
+
+        // Enumeration flags used in the implementation.
+        enum
+            {
+            // Handset
+            EFlagHandset = 1,
+            // Loudspeaker
+            EFlagLoudspeaker = 2,
+            // Bluetooth handsfree
+            EFlagBT = 4,
+            // Wired headset
+            EFlagWiredHeadset = 8
+            };
+
+        // Accessory mode listener class.
+        CVtEngAccessoryHandler* iAccHandler;
+
+        // Contains the current accessory and it's audio mode.
+        TAccPolAccessoryMode iAccMode;
+
+        // Pointer to telephony audio routing instance
+        CTelephonyAudioRouting* iTelephonyAudioRouting;
+
+        // Current audio routing state
+        CTelephonyAudioRouting::TAudioOutput iCurrentAudioOutput;
+
+        // Holds old routing state.
+        TAudioRoutingState iOldAudioRoutingState;
+
+        // Pointer to an operation.
+        CVtEngOperation* iOperation;
+
+        /**
+        * For enabling audio routing before actual
+        * DevSound for play is created.
+        */
+        CRoutingEnabler*    iRoutingEnabler;
+    };
+
+/**
+* Class for handling dummy DevSound. It enables audio routing
+* before video call is connected. Proper devSound instance
+* must exist in order to control audio routing. Actual instance
+* is created in protocol in later phase of the stack
+* initialization and one in here is deleted.
+*/
+NONSHARABLE_CLASS( CRoutingEnabler ) :
+    public CBase,
+    private MDevSoundObserver
+    {
+    public: // constructor and destructor
+
+        // Constructor
+        static CRoutingEnabler* NewL();
+
+        // Destructor
+        ~CRoutingEnabler();
+
+    private: // constructors
+
+        // c++ constructor
+        CRoutingEnabler();
+
+        /**
+        * Creates and starts devSound.
+        */
+        void StartL();
+
+    public: // new functions
+
+        public: // from MDevSoundObserver
+
+        /**
+        * @see MDevSoundObserver
+        */
+        virtual void InitializeComplete( TInt aError );
+
+        /**
+        * @see MDevSoundObserver
+        */
+        virtual void ToneFinished( TInt aError );
+
+        /**
+        * @see MDevSoundObserver
+        */
+        virtual void BufferToBeFilled( CMMFBuffer* aBuffer );
+
+        /**
+        * @see MDevSoundObserver
+        */
+        virtual void PlayError( TInt aError );
+
+        /**
+        * @see MDevSoundObserver
+        */
+        virtual void BufferToBeEmptied( CMMFBuffer* aBuffer );
+
+        /**
+        * @see MDevSoundObserver
+        */
+        virtual void RecordError( TInt aError );
+
+        /**
+        * @see MDevSoundObserver
+        */
+        virtual void ConvertError( TInt aError );
+
+        /**
+        * @see MDevSoundObserver
+        */
+        virtual void DeviceMessage(
+            TUid aMessageType,
+            const TDesC8& aMsg );
+
+    private:
+        // Temporary DevSound instance to enable audio routing
+        // before actual instance in protocol is ready.
+        // Routing can be changed already when MO call is alerting.
+        CMMFDevSound* iDevSound;
+
+        // Variable to detect failure in Devsound initialization or PlayInitL().
+        // If failure happens, Devsound instance is deleted outside callback
+        // in desctructor. ETrue; failure happened, EFalse; all OK
+        TBool iDevsoundInitializeFailure;
+    };
+
+
+#endif      // CVTENGAUDIOHANDLER_H
+
+// End of File