accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp
branchGCC_SURGE
changeset 49 00076e39386f
parent 45 c6215323ad55
child 54 072a9626b290
equal deleted inserted replaced
38:61516c5786af 49:00076e39386f
    38 const TReal K16d9 = 1.778;
    38 const TReal K16d9 = 1.778;
    39 const TReal K4d3 = 1.333;
    39 const TReal K4d3 = 1.333;
    40 
    40 
    41 const TInt KDefaultCEAMode = E640x480p59_94d60Hz4d3;
    41 const TInt KDefaultCEAMode = E640x480p59_94d60Hz4d3;
    42 const TInt KDefaultCEAModeIndex = 0;
    42 const TInt KDefaultCEAModeIndex = 0;
       
    43 const TInt KDefaultDMTModeIndex = 3;
    43 
    44 
    44 // Retry Delay for EDID access
    45 // Retry Delay for EDID access
    45 const TInt KRetryDelay = 50 * 1000; // 50 milliseconds
    46 const TInt KRetryDelay = 50 * 1000; // 50 milliseconds
    46 
    47 
    47 // Maximum retry count for EDID access
    48 // Maximum retry count for EDID access
   122 
   123 
   123     TInt retVal = KErrNone;
   124     TInt retVal = KErrNone;
   124     RArray<TTvSettings> analogConfigs;
   125     RArray<TTvSettings> analogConfigs;
   125     RArray<THdmiDviTimings> hdmiConfigs;
   126     RArray<THdmiDviTimings> hdmiConfigs;
   126     
   127     
   127     // Update overscan values from cenrep
       
   128     UpdateOverscanValues();
       
   129 
       
   130     // Set video parameters
   128     // Set video parameters
   131     INFO( "--------------------------------------------------------------------" );
   129     INFO( "--------------------------------------------------------------------" );
   132     INFO( "SETTING CEA AND DMT TIMINGS:" );
   130     INFO( "SETTING CEA AND DMT TIMINGS:" );
   133     retVal = SetCeaModes( hdmiConfigs );
   131     retVal = SetCeaModes( hdmiConfigs );
   134     ERROR( retVal, "Failed to set CEA modes" );
   132     ERROR( retVal, "Failed to set CEA modes" );
   174     iDataBlockPtr = NULL;
   172     iDataBlockPtr = NULL;
   175     delete iEdidParserPtr;
   173     delete iEdidParserPtr;
   176     iEdidParserPtr = NULL;
   174     iEdidParserPtr = NULL;
   177     delete iExtensionParserPtr;
   175     delete iExtensionParserPtr;
   178     iExtensionParserPtr = NULL;
   176     iExtensionParserPtr = NULL;
       
   177 
       
   178 	iCurrentBlock = 0;
       
   179 	inbrOfExtensions = 0;
   179     }
   180     }
   180 
   181 
   181 //------------------------------------------------------------------------------
   182 //------------------------------------------------------------------------------
   182 // CreateHdmiSinkL
   183 // CreateHdmiSinkL
   183 //------------------------------------------------------------------------------
   184 //------------------------------------------------------------------------------
   516     
   517     
   517     switch ( iRequestID )
   518     switch ( iRequestID )
   518         {
   519         {
   519         case EDdcReadRequest:
   520         case EDdcReadRequest:
   520             {
   521             {
   521             if( KErrNone == iStatus.Int() )
   522 			if( KErrNone == iStatus.Int() )
   522                 {
   523 				{				
   523                 TPtrC8
   524 				if( iCurrentBlock == 0 )
   524                     dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) );
   525 					{
   525                 iEdidParserPtr = CEdidParserBase::NewL( dataBlockDes );
   526 					TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) );
   526                 TInt nbrOfExtensions = iEdidParserPtr->GetNumberOfExtensions();
   527 					
   527                 for( TInt i = 0; i < nbrOfExtensions; ++i )
   528 					iEdidParserPtr = CEdidParserBase::NewL( dataBlockDes );
   528                     {
   529 					inbrOfExtensions = iEdidParserPtr->GetNumberOfExtensions();
   529                     if( ECea861Ext == iEdidParserPtr->GetExtensionType( i + 1 ) )
   530 
   530                         {
   531 					INFO_1( "No. of extensions from Block 0: %d", inbrOfExtensions );
   531                         INFO_1( "ECea861Ext extension data block number: %d", ( i+1 ) );
   532 
   532                         iExtensionParserPtr
   533 					if( inbrOfExtensions )
   533                             = iEdidParserPtr->CreateCea861ExtensionParserL( i + 1 );
   534 						{
   534                         break;
   535 						inbrOfExtensions--;
   535                         }
   536 						}
   536                     }
   537  					}
   537                 INFO_1( "Data block count in nbrOfExtensions: %d", nbrOfExtensions );
   538 				else
   538                 iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched );
   539 					{
   539                 iRetryCounter = KErrNone;
   540 					TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) );
   540                 }
   541 
       
   542 					INFO_1( "Updating the Rawdata for the Block %d...", iCurrentBlock );
       
   543 					iEdidParserPtr->UpdateRawDataL(dataBlockDes);
       
   544 					
       
   545 					iCurrentBlock++;
       
   546 					if( inbrOfExtensions >= 2 )
       
   547 						{
       
   548  						inbrOfExtensions = inbrOfExtensions - 2;
       
   549 						}
       
   550 					else
       
   551 						{
       
   552 						inbrOfExtensions--;
       
   553 						}
       
   554   					}
       
   555 
       
   556 				if( inbrOfExtensions )
       
   557 					{
       
   558 					iRetryCounter = KErrNone;
       
   559 					
       
   560 					if( ReadEDIDDataL() != KErrNone )
       
   561 						{
       
   562 						ResetData();
       
   563 						iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetchFailed );
       
   564 						}
       
   565 					}
       
   566 				else
       
   567 					{
       
   568 					TInt extensions = iEdidParserPtr->GetNumberOfExtensions();
       
   569 
       
   570 					INFO_1( "No. of extensions from Block 0: %d", extensions );
       
   571 					
       
   572 					for( TInt i = 0; i < extensions; ++i )
       
   573 						{
       
   574 						if( ECea861Ext == iEdidParserPtr->GetExtensionType( i + 1 ) )
       
   575 							{
       
   576 							INFO_1( "ECea861Ext extension data block number: %d", ( i+1 ) );
       
   577 							if( !iExtensionParserPtr )
       
   578 								{
       
   579 								INFO( "First CEA 861 extension is being read..." );
       
   580 								iExtensionParserPtr
       
   581 									= iEdidParserPtr->CreateCea861ExtensionParserL( i + 1 );
       
   582 								}
       
   583 							else
       
   584 								{
       
   585 								INFO_1( "CEA 861 extension is being read... at the index %d", i+1 );
       
   586 								iEdidParserPtr->UpdateCea861ExtensionL( i + 1, iExtensionParserPtr );
       
   587 								}
       
   588  							}
       
   589 						}
       
   590 					}
       
   591 
       
   592 				TRACE_EDID_DATA( *iEdidParserPtr );
       
   593 				
       
   594 				iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched );
       
   595 				iRetryCounter = KErrNone;
       
   596 				}
   541             else
   597             else
   542                 {
   598                 {
   543                 INFO_1( "CDdcPortAccess::Read failed, error code: %d", iStatus.Int() );
   599                 INFO_1( "CDdcPortAccess::Read failed, error code: %d", iStatus.Int() );
   544                 
   600                 
   545                 if( (iStatus.Int() == KErrNotReady) && (iRetryCounter < KMaxRetryCount) )
   601                 if( (iStatus.Int() == KErrNotReady) && (iRetryCounter < KMaxRetryCount) )
   549                     iRetryTimer.After( iStatus, KRetryDelay );
   605                     iRetryTimer.After( iStatus, KRetryDelay );
   550                     SetActive();
   606                     SetActive();
   551                     }
   607                     }
   552                 else
   608                 else
   553                     {
   609                     {
       
   610                     // No EDID data available from the sink
   554                     iRetryCounter = KErrNone;
   611                     iRetryCounter = KErrNone;
   555                     iFSM.Input( EPDEIfEDIDHandler,
   612 					ResetData();
   556                         EPDEIfEDIDHandlerEventEdidDataFetchFailed );
   613 					iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched );
   557                     }
   614                     }
   558                 }
   615                 }
   559             break;
   616             break;
   560             }
   617             }
   561         case ERetryTimerRequest:
   618         case ERetryTimerRequest:
   621     
   678     
   622     if( iDataBlockPtr == NULL )
   679     if( iDataBlockPtr == NULL )
   623         {
   680         {
   624         iDataBlockPtr = new(ELeave) TDataBlock;
   681         iDataBlockPtr = new(ELeave) TDataBlock;
   625         }
   682         }
   626     
   683 	else if( inbrOfExtensions )
   627     retVal = iDdcPortAccess->Read( EMonitorPort, 0, // First block contains EDID data if that exists
   684 		{
       
   685 		if( iDataBlockPtr )
       
   686 			{
       
   687 			delete iDataBlockPtr;
       
   688 			iDataBlockPtr = NULL;
       
   689 			}
       
   690 		iDataBlockPtr = new(ELeave) TDataBlock;
       
   691 		}
       
   692 
       
   693 	INFO_1( "Reading EDID block %d...", iCurrentBlock );
       
   694     
       
   695     retVal = iDdcPortAccess->Read( EMonitorPort, iCurrentBlock, // First block contains EDID data if that exists
   628         iDataBlockPtr->iDataBlock,
   696         iDataBlockPtr->iDataBlock,
   629         iStatus );
   697         iStatus );
   630         
   698         
   631     SetActive();
   699     SetActive();
   632         
   700         
   641 //
   709 //
   642 void CEDIDHandler::FillCommonHdmiDviTimings( THdmiDviTimings& aTimings ) const
   710 void CEDIDHandler::FillCommonHdmiDviTimings( THdmiDviTimings& aTimings ) const
   643     {
   711     {
   644     FUNC_LOG;
   712     FUNC_LOG;
   645     
   713     
   646     aTimings.iTvPhysicalImageWidthMm = iEdidParserPtr->GetHorizontalScreenSize() * 10;
       
   647     aTimings.iTvPhysicalImageHeightMm = iEdidParserPtr->GetVerticalScreenSize() * 10;
       
   648     aTimings.iTvPhysicalImageAspectRatioNumerator = 0;
   714     aTimings.iTvPhysicalImageAspectRatioNumerator = 0;
   649     aTimings.iTvPhysicalImageAspectRatioDenominator = 0;
   715     aTimings.iTvPhysicalImageAspectRatioDenominator = 0;
   650     aTimings.iHorizontalBorderPixels = 0;
   716     aTimings.iHorizontalBorderPixels = 0;
   651     aTimings.iVerticalBorderLinesField1 = 0;
   717     aTimings.iVerticalBorderLinesField1 = 0;
   652     aTimings.iVerticalBorderLinesField2 = 0;
   718     aTimings.iVerticalBorderLinesField2 = 0;
   653     aTimings.iLeftBorderPixels = 0;
   719     aTimings.iLeftBorderPixels = 0;
   654     aTimings.iRightBorderPixels = 0;
   720     aTimings.iRightBorderPixels = 0;
   655     aTimings.iUnderscanEnabled = EFalse;
       
   656     
   721     
   657     if( iExtensionParserPtr )
   722     if( iExtensionParserPtr )
   658         {
   723         {
       
   724         INFO("==CEA Extension Exists");
   659         aTimings.iUnderscanEnabled = iExtensionParserPtr->Underscan();
   725         aTimings.iUnderscanEnabled = iExtensionParserPtr->Underscan();
   660         }
   726         }
       
   727 	else
       
   728 		{
       
   729         INFO("==No CEA Extension");
       
   730 		// No CEA Extension so it should be DVI
       
   731 		// Underscan supported always		
       
   732 		aTimings.iTvPhysicalImageAspectRatioNumerator = 4;
       
   733 		aTimings.iTvPhysicalImageAspectRatioDenominator = 3;
       
   734 		aTimings.iUnderscanEnabled = ETrue;
       
   735 		}
   661     
   736     
   662     if( aTimings.iUnderscanEnabled )
   737     if( aTimings.iUnderscanEnabled )
   663         {
   738         {
       
   739         INFO("==Underscan Enabled");
   664         // Underscan
   740         // Underscan
   665         aTimings.iLeftTopCorner.iX = 0;
   741         aTimings.iLeftTopCorner.iX = 0;
   666         aTimings.iLeftTopCorner.iY = 0;
   742         aTimings.iLeftTopCorner.iY = 0;
   667         aTimings.iRightBottomCorner.iX = aTimings.iHorizontalActivePixels;
   743         aTimings.iRightBottomCorner.iX = aTimings.iHorizontalActivePixels;
   668         aTimings.iRightBottomCorner.iY = aTimings.iVerticalActiveLines;
   744         aTimings.iRightBottomCorner.iY = aTimings.iVerticalActiveLines;
   669         }
   745         }
   670     else
   746     else
   671         {
   747         {
       
   748         INFO("==Underscan Disabled");
   672         // Calculate overscan
   749         // Calculate overscan
   673         CalculateOverscan( aTimings.iLeftTopCorner,
   750         CalculateOverscan( aTimings.iLeftTopCorner,
   674             aTimings.iRightBottomCorner );                
   751             aTimings.iRightBottomCorner );                
   675         }
   752         }
   676     aTimings.iTvPhysicalImageAspectRatioNumerator = iEdidParserPtr->GetAspectRatioLandscape();
       
   677     aTimings.iTvPhysicalImageAspectRatioDenominator = iEdidParserPtr->GetAspectRatioPortrait();
       
   678     aTimings.iConnector = TTvSettings::EHDMI;
   753     aTimings.iConnector = TTvSettings::EHDMI;
   679     aTimings.iTvColorCoordinates.iRed.iX = iEdidParserPtr->GetColorCoordinatesRedX();
   754 
   680     aTimings.iTvColorCoordinates.iRed.iY = iEdidParserPtr->GetColorCoordinatesRedY();
   755 	if( iEdidParserPtr )
   681     aTimings.iTvColorCoordinates.iGreen.iX = iEdidParserPtr->GetColorCoordinatesGreenX();
   756 		{
   682     aTimings.iTvColorCoordinates.iGreen.iY = iEdidParserPtr->GetColorCoordinatesGreenY();
   757 		aTimings.iTvPhysicalImageWidthMm = iEdidParserPtr->GetHorizontalScreenSize() * 10;
   683     aTimings.iTvColorCoordinates.iBlue.iX = iEdidParserPtr->GetColorCoordinatesBlueX();
   758 		aTimings.iTvPhysicalImageHeightMm = iEdidParserPtr->GetVerticalScreenSize() * 10;
   684     aTimings.iTvColorCoordinates.iBlue.iY = iEdidParserPtr->GetColorCoordinatesBlueY();
   759 	    aTimings.iTvPhysicalImageAspectRatioNumerator = iEdidParserPtr->GetAspectRatioLandscape();
   685     aTimings.iTvColorCoordinates.iWhite.iX = iEdidParserPtr->GetColorCoordinatesWhiteX();
   760 	    aTimings.iTvPhysicalImageAspectRatioDenominator = iEdidParserPtr->GetAspectRatioPortrait();
   686     aTimings.iTvColorCoordinates.iWhite.iY = iEdidParserPtr->GetColorCoordinatesWhiteY();
   761 	    aTimings.iTvColorCoordinates.iRed.iX = iEdidParserPtr->GetColorCoordinatesRedX();
   687     aTimings.iTvHdmiVersion = iEdidParserPtr->GetVersion();
   762 	    aTimings.iTvColorCoordinates.iRed.iY = iEdidParserPtr->GetColorCoordinatesRedY();
   688     aTimings.iTvHdmiRevision = iEdidParserPtr->GetRevision();
   763 	    aTimings.iTvColorCoordinates.iGreen.iX = iEdidParserPtr->GetColorCoordinatesGreenX();
       
   764 	    aTimings.iTvColorCoordinates.iGreen.iY = iEdidParserPtr->GetColorCoordinatesGreenY();
       
   765 	    aTimings.iTvColorCoordinates.iBlue.iX = iEdidParserPtr->GetColorCoordinatesBlueX();
       
   766 	    aTimings.iTvColorCoordinates.iBlue.iY = iEdidParserPtr->GetColorCoordinatesBlueY();
       
   767 	    aTimings.iTvColorCoordinates.iWhite.iX = iEdidParserPtr->GetColorCoordinatesWhiteX();
       
   768 	    aTimings.iTvColorCoordinates.iWhite.iY = iEdidParserPtr->GetColorCoordinatesWhiteY();
       
   769 	    aTimings.iTvHdmiVersion = iEdidParserPtr->GetVersion();
       
   770 	    aTimings.iTvHdmiRevision = iEdidParserPtr->GetRevision();
       
   771 		}
   689     Mem::FillZ( ( TAny* )&aTimings.iProductName, ( sizeof( TChar ) * KProductNameChars ) );
   772     Mem::FillZ( ( TAny* )&aTimings.iProductName, ( sizeof( TChar ) * KProductNameChars ) );
   690     Mem::FillZ( ( TAny* )&aTimings.iProductDescription, ( sizeof( TChar ) * KProductDescriptorsChars ) );
   773     Mem::FillZ( ( TAny* )&aTimings.iProductDescription, ( sizeof( TChar ) * KProductDescriptorsChars ) );
   691     aTimings.iSourceType = THdmiDviTimings::ESourceTypeUnknown;
   774     aTimings.iSourceType = THdmiDviTimings::ESourceTypeUnknown;
   692     }
   775     }
   693 
   776 
   859 TInt CEDIDHandler::SetDmtModes( RArray<THdmiDviTimings>& aTimings ) const
   942 TInt CEDIDHandler::SetDmtModes( RArray<THdmiDviTimings>& aTimings ) const
   860     {
   943     {
   861     FUNC_LOG;
   944     FUNC_LOG;
   862     
   945     
   863     TInt retVal(KErrNone);
   946     TInt retVal(KErrNone);
   864     
   947 
   865     // Check established timings 1 and 2
   948 	if( iDataBlockPtr )
   866     retVal = SetDmtModesFromEstablishedTimings( aTimings );
   949 		{
   867     
   950 	    // Check established timings 1 and 2
   868     if( KErrNone == retVal )
   951 	    retVal = SetDmtModesFromEstablishedTimings( aTimings );
   869         {
   952 	    
   870         // Check standard timings
   953 	    if( KErrNone == retVal )
   871         retVal = SetDmtModesFromStandardTimings( aTimings );
   954 	        {
   872         
   955 	        // Check standard timings
   873         if( KErrNone == retVal )
   956 	        retVal = SetDmtModesFromStandardTimings( aTimings );
   874             {
   957 	        
   875             // Check timing descriptors
   958 	        if( KErrNone == retVal )
   876             retVal = SetDmtModesFromTimingDescriptors( aTimings );        
   959 	            {
   877             }
   960 	            // Check timing descriptors
   878         }
   961 	            retVal = SetDmtModesFromTimingDescriptors( aTimings );        
       
   962 	            }
       
   963 	        }
       
   964 		}
       
   965 	else
       
   966 		{
       
   967 		INFO( "==No EDID available from the Sink. Setting DMT 4" );
       
   968 		// No EDID data available from the sink
       
   969 		// Default VGA resolution should be selected
       
   970 		THdmiDviTimings timings;
       
   971 		const TTimingItem* item = TimingByIndex( KDefaultDMTModeIndex, ETimingModeDMT );
       
   972 		if( item )
       
   973 			{
       
   974 			Mem::FillZ( ( TAny* )&timings, sizeof( timings ) );
       
   975 			FillHdmiDviTimings( *item, timings );
       
   976 			retVal = aTimings.Append( timings );
       
   977 			ERROR_1( retVal, "Failed to append DMT timing: %S in array", item->iTimingName );
       
   978 			}
       
   979 		else
       
   980 			{
       
   981 			ERROR_1( KErrArgument, "DMT timing item not found for VIC mode: %d", KDefaultDMTModeIndex );
       
   982 			retVal = KErrNotFound;
       
   983 			}
       
   984 		}
   879     
   985     
   880     return retVal;
   986     return retVal;
   881     }
   987     }
   882 
   988 
   883 //------------------------------------------------------------------------------
   989 //------------------------------------------------------------------------------
  1306 
  1412 
  1307 //------------------------------------------------------------------------------
  1413 //------------------------------------------------------------------------------
  1308 // CalculateOverscan
  1414 // CalculateOverscan
  1309 //------------------------------------------------------------------------------
  1415 //------------------------------------------------------------------------------
  1310 //
  1416 //
  1311 void CEDIDHandler::UpdateOverscanValues()
  1417 TBool CEDIDHandler::UpdateOverscanValues()
  1312     {
  1418     {
  1313     FUNC_LOG;
  1419     FUNC_LOG;
  1314 
  1420 
  1315     // Overscan from cenrep
  1421     // Overscan from cenrep
  1316     TInt hOverscan = 0;
  1422     TInt hOverscan = 0;
  1317     TInt vOverscan = 0;
  1423     TInt vOverscan = 0;
  1318     CRepository* cenRep = NULL;
  1424     CRepository* cenRep = NULL;
  1319     TInt err = KErrNone;
  1425     TInt err = KErrNone;
       
  1426 	TBool valChanged = EFalse;
  1320     
  1427     
  1321     TRAP( err, cenRep = CRepository::NewL( KCRUidTvoutSettings ) );
  1428     TRAP( err, cenRep = CRepository::NewL( KCRUidTvoutSettings ) );
  1322     if( err == KErrNone )
  1429     if( err == KErrNone )
  1323         {
  1430         {
  1324         
  1431         
  1337             }
  1444             }
  1338         
  1445         
  1339         // Cleanup
  1446         // Cleanup
  1340         delete cenRep;
  1447         delete cenRep;
  1341         }
  1448         }
       
  1449 
       
  1450 	if( (iHOverscan != hOverscan) || (iVOverscan != vOverscan) )
       
  1451 		{
       
  1452 		valChanged = ETrue;
       
  1453 		}
  1342     
  1454     
  1343     // Update overscan values
  1455     // Update overscan values
  1344     iHOverscan = hOverscan;
  1456     iHOverscan = hOverscan;
  1345     iVOverscan = vOverscan;
  1457     iVOverscan = vOverscan;
       
  1458 
       
  1459 	INFO_3( "Overscan Values: %d,%d Changed:%d", iHOverscan, iVOverscan, valChanged );
       
  1460 
       
  1461 	return valChanged;
  1346     }
  1462     }
  1347 
  1463 
  1348 // ----------------------------------------------------------------------------
  1464 // ----------------------------------------------------------------------------
  1349 // CEDIDHandler::FilterAvailableTvConfigList
  1465 // CEDIDHandler::FilterAvailableTvConfigList
  1350 //
  1466 //
  1464 		}
  1580 		}
  1465 
  1581 
  1466 	return retVal;
  1582 	return retVal;
  1467     }
  1583     }
  1468 
  1584 
       
  1585 void CEDIDHandler::GetCurrentOverscanValue( TInt& aHOverscan, TInt& aVOverscan )
       
  1586 	{
       
  1587 	FUNC_LOG;
       
  1588 	
       
  1589 	aHOverscan = iHOverscan;
       
  1590 	aVOverscan = iVOverscan;
       
  1591 
       
  1592 	INFO_2("Overscan used: %d, %d", iHOverscan, iVOverscan);
       
  1593 	}
       
  1594 
  1469 //------------------------------------------------------------------------------
  1595 //------------------------------------------------------------------------------
  1470 // C++ constructor
  1596 // C++ constructor
  1471 //------------------------------------------------------------------------------
  1597 //------------------------------------------------------------------------------
  1472 //
  1598 //
  1473 CEDIDHandler::CEDIDHandler( MFSMForBody& aFSM,
  1599 CEDIDHandler::CEDIDHandler( MFSMForBody& aFSM,
  1474     CTVOutConfigForHDMI& aTVOutConfigForHDMI ) :
  1600     CTVOutConfigForHDMI& aTVOutConfigForHDMI ) :
  1475     CActive( CActive::EPriorityLow ),
  1601     CActive( CActive::EPriorityLow ),
  1476     iFSM( aFSM ),
  1602     iFSM( aFSM ),
  1477     iTVOutConfigForHDMI( aTVOutConfigForHDMI ),
  1603     iTVOutConfigForHDMI( aTVOutConfigForHDMI ),
  1478     iRetryCounter( 0 ),
  1604     iRetryCounter( 0 ),
  1479     iRequestID( EUndefRequest )
  1605     iRequestID( EUndefRequest ),
       
  1606     inbrOfExtensions( 0 ),
       
  1607     iCurrentBlock( 0 )
  1480     {
  1608     {
  1481     FUNC_LOG;
  1609     FUNC_LOG;
  1482     }
  1610     }
  1483 
  1611 
  1484 //------------------------------------------------------------------------------
  1612 //------------------------------------------------------------------------------