--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/accessoryservices/pluggeddisplay/pluggeddisplayengine/inc/edidhandler.h Tue Feb 02 00:53:00 2010 +0200
@@ -0,0 +1,416 @@
+/*
+ * 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:
+ * CEDIDHandler class declaration.
+ *
+ */
+
+#ifndef C_EDIDHANDLER_H
+#define C_EDIDHANDLER_H
+
+// INCLUDES
+#include <e32base.h>
+#include <ddc_access.h>
+#include <tvoutconfig.h>
+#include <accpolhdmiaudioformat.h>
+#include <accpolhdmivideoformat.h>
+#include <accpolhdmilatency.h>
+#include <tvoutconfigdef.h>
+
+#include "ediddatatypes.h"
+#include "videotimings.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class CDdcPortAccess;
+class MFSMForBody;
+class CEdidParserBase;
+class CCea861EdidParser;
+class CTVOutConfigForHDMI;
+class CAccPolHdmiSink;
+class CAccPolHdmiLatency;
+class CAccPolHdmiSpeakerAllocation;
+
+// CLASS DECLARATION
+/**
+ * Class to handle EDID data.
+ *
+ * @code
+ * ?good_class_usage_example(s)
+ * @endcode
+ *
+ * @lib none.
+ * @since TB 9.2
+ */
+NONSHARABLE_CLASS( CEDIDHandler ): public CActive
+ {
+public:
+ // Request Identifier
+ enum TRequestTypeID
+ {
+ EUndefRequest = 0x0,
+ EDdcReadRequest,
+ ERetryTimerRequest,
+ };
+
+ // Constructors and destructor
+
+ /**
+ * Symbian two phased constructor.
+ *
+ * @since S60 TB9.2
+ * @param aFSM A FSM.
+ * @param CTVOutConfigForHDMI TV Out Configurer.
+ * @return CEDIDHandler*
+ */
+ static CEDIDHandler* NewL( MFSMForBody& aFSM,
+ CTVOutConfigForHDMI& aTVOutConfigForHDMI );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CEDIDHandler();
+
+public:
+ // New methods
+
+ /**
+ * Fetch EDID Data.
+ *
+ * @since TB9.2
+ * @param None.
+ * @return Error code, KErrNone if successfull.
+ */
+ TInt FetchEDIDData();
+
+ /**
+ * Set video parameters of TV Out Configuration.
+ *
+ * @since TB9.2
+ * @param None.
+ * @return Error code, KErrNone if successfull.
+ */
+ TInt SetVideoParameters();
+
+ /**
+ * Reset EDID Data.
+ *
+ * @since TB9.2
+ * @param None.
+ * @return void.
+ */
+ void ResetData();
+
+ /**
+ * Create HDMI Sink object.
+ *
+ * @since TB9.2
+ * @param None.
+ * @return CAccPolHdmiSink* HDMI sink object.
+ */
+ CAccPolHdmiSink* CreateHdmiSinkL();
+
+ /**
+ * Create HDMI Video Format object.
+ *
+ * @since TB9.2
+ * @param aHdmiVideoFormatArray Array of CAccPolHdmiVideoFormat pointers.
+ * @return void.
+ */
+ void CreateHdmiVideoFormatL( RAccPolHdmiVideoFormatArray& aHdmiVideoFormatArray );
+
+ /**
+ * Create HDMI Latency object.
+ *
+ * @since TB9.2
+ * @param aHdmiLatencyArray Array of CAccPolHdmiLatency pointers.
+ * @return None.
+ */
+ void CreateHdmiLatencyL( RAccPolHdmiLatencyArray& aHdmiLatencyArray );
+
+ /**
+ * Create HDMI Audio Format object.
+ *
+ * @since TB9.2
+ * @param aHdmiAudioFormatArray Array of CAccPolHdmiAudioFormat pointers.
+ * @return void.
+ */
+ void CreateHdmiAudioFormatL( RAccPolHdmiAudioFormatArray& aHdmiAudioFormatArray );
+
+ /**
+ * Create HDMI Speaker Allocation object.
+ *
+ * @since TB9.2
+ * @param None.
+ * @return CAccPolHdmiSpeakerAllocation* HDMI Speaker Allocation object.
+ */
+ CAccPolHdmiSpeakerAllocation* CreateHdmiSpeakerAllocationL();
+
+ /**
+ * Tells whether or not HDCP is supported at the moment.
+ *
+ * @since TB9.2
+ * @param None.
+ * @return TBool Symbian error code. KErrNone, if ok. KErrNotFound if cannot be defined.
+ */
+ TInt GetHdcpSupportStatus( TBool& aHdcpSupport ) const;
+
+private:
+
+ /**
+ * Read EDID Data from DDC Access.
+ *
+ * @since TB9.2
+ * @param None.
+ * @return Error code. KErrNone if successful.
+ */
+ TInt ReadEDIDDataL();
+
+ // Functions from base class CActive
+
+ /**
+ * RunL()
+ */
+ void RunL();
+
+ /**
+ * DoCancel()
+ */
+ void DoCancel();
+
+ /**
+ * RunError()
+ */
+ TInt RunError( TInt aError );
+
+private:
+ // Constructors
+
+ /**
+ * C++ constructor.
+ * @param aFSM A FSM.
+ * @param CTVOutConfigForHDMI TV Out Configurer.
+ */
+ CEDIDHandler( MFSMForBody& aFSM,
+ CTVOutConfigForHDMI& aTVOutConfigForHDMI );
+
+ /**
+ * Symbian 2nd phase constructor.
+ *
+ */
+ void ConstructL();
+
+private:
+
+ /**
+ * Fills the common timing attributes which can be received from
+ * edidparser or cenrep.
+ *
+ * @param aTimings Timings struct which is filled.
+ * @return None.
+ */
+ void FillCommonHdmiDviTimings( THdmiDviTimings& aTimings ) const;
+
+ /**
+ * Fills out the THdmiDviTimings based on the timing item.
+ *
+ * @param aItem Timing item from which the data is used.
+ * @param aTimings Timings struct which is filled.
+ * @return None.
+ */
+ void FillHdmiDviTimings( const TTimingItem& aItem,
+ THdmiDviTimings& aTimings ) const;
+
+ /**
+ * Fills out the THdmiDviTimings based on the descriptor block.
+ *
+ * @param aDescBlock Descriptor block.
+ * @param aTimings Timings struct which is filled.
+ * @return None.
+ */
+ void FillHdmiDviTimings( const TEdidDescriptorBlock& aDescBlock,
+ THdmiDviTimings& aTimings ) const;
+
+ /**
+ * Set cea modes.
+ *
+ * @param aTimings Array to fill.
+ * @return system error code.
+ */
+ TInt SetCeaModes( RArray<THdmiDviTimings>& aTimings ) const;
+
+ /**
+ * Set dmt modes.
+ *
+ * @param aTimings Array to fill.
+ * @return system error code.
+ */
+ TInt SetDmtModes( RArray<THdmiDviTimings>& aTimings ) const;
+
+ /**
+ * Set dmt modes from established timings 1 and 2.
+ *
+ * @param aTimings Array to fill.
+ * @return system error code.
+ */
+ TInt SetDmtModesFromEstablishedTimings( RArray<THdmiDviTimings>& aTimings ) const;
+
+ /**
+ * Set dmt modes from standard timings.
+ *
+ * @param aTimings Array to fill.
+ * @return None.
+ */
+ TInt SetDmtModesFromStandardTimings( RArray<THdmiDviTimings>& aTimings ) const;
+
+ /**
+ * Set dmt modes from timing descriptors.
+ *
+ * @param aTimings Array to fill.
+ * @return None.
+ */
+ TInt SetDmtModesFromTimingDescriptors( RArray<THdmiDviTimings>& aTimings ) const;
+
+ /**
+ * Get timing by index.
+ *
+ * @param aIndex Indes of the item to get
+ * @param aType Timing type: CEA or DMT.
+ * @return const TTimingItem*
+ */
+ const TTimingItem* TimingByIndex( TInt aIndex,
+ TTimingModeType aType ) const;
+
+ /**
+ * Get timing by resolution.
+ *
+ * @param aWidth Horizontal size.
+ * @param aHeight Vertical size.
+ * @param
+ * @param aType Timing type: CEA or DMT.
+ * @return const TTimingItem*
+ */
+ const TTimingItem* TimingByResolution( TUint16 aWidth,
+ TUint16 aHeight,
+ TUint16 aRefreshRate,
+ TTimingModeType aType ) const;
+
+ /**
+ * Set DMT mode by resolution.
+ *
+ * @param aTimings Array where to append new DMT timing.
+ * @param aWidth Width of the resolution.
+ * @param aHeight Height of the resolution.
+ * @param aRefreshRate Refresh rate used.
+ * @return None.
+ */
+ TInt SetDmtModeByResolution( RArray<THdmiDviTimings>& aTimings,
+ TUint16 aWidth,
+ TUint16 aHeight,
+ TUint16 aRefreshRate ) const;
+
+ /**
+ * Resolves aspect ratio from width and height.
+ *
+ * @param aWidth Horizontal pixels.
+ * @param aHeight Vertical lines.
+ * @return TTvSettings::TAspectRatio.
+ */
+ TTvSettings::TAspectRatio ResolveAspectRatio( TUint16 aWidth,
+ TUint16 aHeight ) const;
+
+ /**
+ * Calculates overscan in pixels. The top left and right bottom should
+ * cover the full screen from which the overscan is calculated.
+ *
+ * @param aTLCorner Top left corner.
+ * @param aRBCorner Right bottom corner.
+ * @return None.
+ */
+ void CalculateOverscan( TPoint& aTLCorner, TPoint& aBRCorner ) const;
+
+ /**
+ * Update overscan values from cenrep.
+ *
+ * @param None.
+ * @return None.
+ */
+ void UpdateOverscanValues();
+
+ /**
+ * Filter out the unsupported TV configurations.
+ *
+ * @param aHdmiConfigs Available HDMI/DVI Tv configurations.
+ * @return KErrNone if OK. KErrNotFound if the filtered list is empty.
+ *
+ */
+ TInt FilterAvailableTvConfigList( RArray<THdmiDviTimings>& aHdmiConfigs );
+
+private: // Data
+
+ class TDataBlock
+ {
+ public:
+ TUint8 iDataBlock[KSizeOfSegment];
+ };
+
+ // Display Data Channel
+ // Own.
+ CDdcPortAccess* iDdcPortAccess;
+
+ // A FSM pointer.
+ // Not own.
+ MFSMForBody& iFSM;
+
+ // CEdidParserBase is the base class for parsing EDID data
+ // Own.
+ CEdidParserBase* iEdidParserPtr;
+
+ // CCea861EdidParser is the base class for parsing
+ // CEA 861 EDID extension data
+ // Own.
+ CCea861EdidParser* iExtensionParserPtr;
+
+ // EDID Data Block pointer.
+ // Own
+ TDataBlock* iDataBlockPtr;
+
+ // TV Out Configurer.
+ // Not own.
+ CTVOutConfigForHDMI& iTVOutConfigForHDMI;
+
+ // Horizontal overscan in pixels (1% == 100)
+ TInt iHOverscan;
+
+ // Vertical overscan in pixels (1% == 100)
+ TInt iVOverscan;
+
+ // Timer for reading EDID data
+ RTimer iRetryTimer;
+
+ // Retry Counter
+ TInt iRetryCounter;
+
+ // Request ID
+ TRequestTypeID iRequestID;
+ };
+
+#endif // C_EDIDHANDLER_H