accessoryservices/pluggeddisplay/pluggeddisplayengine/inc/tvoutconfigforhdmi.h
changeset 0 4e1aa6a622a0
child 8 6bb05bdcbe09
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/accessoryservices/pluggeddisplay/pluggeddisplayengine/inc/tvoutconfigforhdmi.h	Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,295 @@
+/*
+ * Copyright (c) 2009 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:
+ * CTVOutConfigForHDMI class declaration.
+ *
+ */
+
+#ifndef TVOUTCONFIGFORHDMI_H
+#define TVOUTCONFIGFORHDMI_H
+
+// INCLUDES
+#include <e32base.h>
+#include "multifinitestatemachine.h"
+#include "myasynconeshottimercallback.h"
+
+
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CTvOutConfig;
+class MFSMForBody;
+class CMyAsyncOneShotTimer;
+struct THdmiDviTimings;
+struct TTvSettings;
+class TSupportedHdmiDviMode;
+
+/** Returned struct for function CTVOutConfigForHDMI::ListenCopyProtectionIfNoMissedEvents(). */
+struct TCopyProtctListenRetValues
+    {
+    TInt iError;
+    TFSMEventId iFSMEventId;
+    };
+
+// CLASS DECLARATION
+/**
+ *  TV Out Configurer for HDMI Cable Status FSM.
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib none.
+ *  @since TB 9.2
+ */
+NONSHARABLE_CLASS( CTVOutConfigForHDMI ): public CActive, public MMyAsyncOneShotTimerCallback
+    {
+    public:  // Constructors and destructor
+
+        /**
+         * Symbian two phased constructor.
+         * 
+         * @since S60 TB9.2
+         * @param aFSM A FSM.
+         * @return CTVOutConfigForHDMI*
+         */
+        static CTVOutConfigForHDMI* NewL( MFSMForBody& aFSM );
+
+        /**
+        * Destructor.
+        */
+        virtual ~CTVOutConfigForHDMI();
+        
+    public: // New methods
+        
+        /**
+         * Start listening HDMI Cable connected/disconnected situations if status
+         * haven't changed while not listening.
+         * 
+         * @since TB9.2
+         * @param None.
+         * @return TFSMEventId Event that has occured while not listening:
+         *          EIfTVOutConfigEventUndefined No event occurred,
+         *          EIfTVOutConfigEventCableConnected Connection occurred,
+         *          EIfTVOutConfigEventCableDisconnected Disconnection occurred
+         *          
+         */
+        TFSMEventId ListenHDMICableStatusIfNoMissedEvents();
+
+        /**
+         * Set list of available Tv-configurations.
+         * 
+         * @since TB9.2
+         * @param  aAnalogConfigs  Available Analog Tv configurations.
+         * @param  aHdmiConfigs    Available HDMI/DVI Tv configurations
+         * @return Symbian error code.
+         */
+        TInt SetAvailableTvConfigList(const RArray<TTvSettings>& aAnalogConfigs, const RArray<THdmiDviTimings>& aHdmiConfigs);
+
+        /**
+         *  Enables Tv-out. Latest SetConfig() settings are used.
+         *
+         * @since TB9.2
+         * @param  None.
+         * @return void.
+         */
+        void Enable();
+
+        /**
+         * Disables Tv-out.
+         * 
+         * @since TB9.2
+         * @param  None.
+         * @return void.
+         */
+        void Disable();
+        
+        /**
+         * Start listening for disconnection of HDMI Cable. Connection has failed and
+         * cable has been rejected. Now waiting for end user to disconnect.
+         * 
+         * @since TB9.2
+         * @param None.
+         * @return void
+         *          
+         */
+        void ListenForDisconnection();
+
+        /**
+         * Get pointer of CTvOutConfig.
+         * 
+         * @since TB9.2
+         * @param  None.
+         * @return CTvOutConfig* Pointer to CTvOutConfig.
+         */
+        CTvOutConfig* GetTvOutConfig();
+
+        /**
+         * Start listening Copy Protection status if status
+         * haven't changed while not listening.
+         * 
+         * @since TB9.2
+         * @param None.
+         * @return TCopyProtctListenRetValues
+         *          iError error code, KErrNone if OK
+         *          iFSMEventId Event that has occured while not listening:
+         *          EIfTVOutConfigEventUndefined No event occurred,
+         *          EIfTVOutConfigEventCopyProtectionOn Copy Protection set on,
+         *          EIfTVOutConfigEventCableCopyProtectionOff Copy Protection set off
+         *          
+         */
+        TCopyProtctListenRetValues ListenCopyProtectionIfNoMissedEvents();
+
+        /**
+         * Get latest recorded Copy Protection status.
+         * 
+         * @since TB9.2
+         * @param  None.
+         * @return TBool Copy Protection status.
+         *           
+         */
+        TBool GetLatestRecordedCopyProtectionStatus() const;
+
+        /**
+         * Reset latest recorded Copy Protection status.
+         * 
+         * @since TB9.2
+         * @param  None.
+         * @return void.
+         *           
+         */
+        void ResetLatestRecordedCopyProtectionStatus();
+
+        /**
+         * Listen for setting changes in TV Out Configuration.
+         * 
+         * @since TB9.2
+         * @param  None.
+         * @return void.
+         *           
+         */
+        void ListenSettingsChanges();
+
+        /**
+         * Get the HW supported HDMI display modes
+         * 
+         * @since TB9.2
+         * @param  asupportedModes   place holder for getting the list of display modes.
+         * @return KErrNone if OK. KErrNotFound if the filtered list is empty.
+         *           
+         */
+		TInt GetSupportedHdmiModes( RArray<TSupportedHdmiDviMode>& asupportedModes );
+
+    private:  // Constructors
+
+        /**
+        * C++ constructor.
+        * @param aFSMForBody A FSM.
+        */
+        CTVOutConfigForHDMI( MFSMForBody& aFSM );
+
+        /**
+        * Symbian 2nd phase constructor.
+        * 
+        */
+        void ConstructL();
+
+        /**
+        * Provides Hdmi Dvi Timings
+        */
+        void ReadHdmiDviTimings( THdmiDviTimings& aSetting );
+
+        /**
+         * From MMyAsyncOneShotTimerCallback
+         * This is called when one shot asyncronous timer has elapsed.
+         * 
+         * @since TB9.2
+         * @param  None.
+         * @return void.
+         *           
+         */
+        virtual void OneShotTimeout();
+
+    private: // Functions from base classes        
+        
+        enum TOpt
+          {
+          EOptStartListenHdmiCable,
+          EOptListenHdmiCable,
+          EOptEnableTv,
+          EOptDisableTv,
+          EOptIdle,
+          EOptListenCopyProtection,
+          EOptStartListenForDisconnection,
+          EOptListenForDisconnection,
+          EOptStartListenForSettingsChanges,
+          EOptListenForSettingsChanges
+          };
+
+        /**
+        * RunL()
+        */
+        void RunL();
+
+        /**
+        * DoCancel()
+        */
+        void DoCancel();
+
+        /**
+        * RunError(aError)
+        */
+        TInt RunError(TInt aError);
+        
+    private: // Functions from base classes
+
+
+    private:  // Data
+        
+        enum
+        {
+        EWaitTimeInMsForTvOutConfigBusyServer = 50000
+        };
+                
+        // Handle to TV-out config
+        CTvOutConfig*     iTvConfig;
+
+        // Next operation
+        TOpt  iNextOpt;
+        
+        // A FSM Body.
+        // Not own.
+        MFSMForBody& iFSM;
+        
+        // Last recorded Copy Protection status value.
+        // Read by calling function: 
+        // TBool CTvOutConfig::CopyProtectionStatus() = 0
+        TBool iLastRecordedCopyProtectEnabledStatus;
+        
+        // Asynchronous timer 
+        CMyAsyncOneShotTimer* iMyAsyncOneShotTimer;
+        
+        // Time out reason and next opt after timer has 
+        // elapsed
+        TOpt  iTimeOutReason;
+    };
+
+#endif // TVOUTCONFIGFORHDMI_H