accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp
branchRCL_3
changeset 17 0b0048910c20
parent 12 4a5c47a50617
child 19 94cb00198351
equal deleted inserted replaced
15:b2f9f823b5fb 17:0b0048910c20
   123 
   123 
   124     TInt retVal = KErrNone;
   124     TInt retVal = KErrNone;
   125     RArray<TTvSettings> analogConfigs;
   125     RArray<TTvSettings> analogConfigs;
   126     RArray<THdmiDviTimings> hdmiConfigs;
   126     RArray<THdmiDviTimings> hdmiConfigs;
   127     
   127     
   128     // Update overscan values from cenrep
       
   129     UpdateOverscanValues();
       
   130 
       
   131     // Set video parameters
   128     // Set video parameters
   132     INFO( "--------------------------------------------------------------------" );
   129     INFO( "--------------------------------------------------------------------" );
   133     INFO( "SETTING CEA AND DMT TIMINGS:" );
   130     INFO( "SETTING CEA AND DMT TIMINGS:" );
   134     retVal = SetCeaModes( hdmiConfigs );
   131     retVal = SetCeaModes( hdmiConfigs );
   135     ERROR( retVal, "Failed to set CEA modes" );
   132     ERROR( retVal, "Failed to set CEA modes" );
   175     iDataBlockPtr = NULL;
   172     iDataBlockPtr = NULL;
   176     delete iEdidParserPtr;
   173     delete iEdidParserPtr;
   177     iEdidParserPtr = NULL;
   174     iEdidParserPtr = NULL;
   178     delete iExtensionParserPtr;
   175     delete iExtensionParserPtr;
   179     iExtensionParserPtr = NULL;
   176     iExtensionParserPtr = NULL;
       
   177 
       
   178 	iCurrentBlock = 0;
       
   179 	inbrOfExtensions = 0;
   180     }
   180     }
   181 
   181 
   182 //------------------------------------------------------------------------------
   182 //------------------------------------------------------------------------------
   183 // CreateHdmiSinkL
   183 // CreateHdmiSinkL
   184 //------------------------------------------------------------------------------
   184 //------------------------------------------------------------------------------
   517     
   517     
   518     switch ( iRequestID )
   518     switch ( iRequestID )
   519         {
   519         {
   520         case EDdcReadRequest:
   520         case EDdcReadRequest:
   521             {
   521             {
   522             if( KErrNone == iStatus.Int() )
   522 			if( KErrNone == iStatus.Int() )
   523                 {
   523 				{				
   524                 TPtrC8
   524 				if( iCurrentBlock == 0 )
   525                     dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) );
   525 					{
   526                 iEdidParserPtr = CEdidParserBase::NewL( dataBlockDes );
   526 					TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) );
   527                 TInt nbrOfExtensions = iEdidParserPtr->GetNumberOfExtensions();
   527 					
   528                 for( TInt i = 0; i < nbrOfExtensions; ++i )
   528 					iEdidParserPtr = CEdidParserBase::NewL( dataBlockDes );
   529                     {
   529 					inbrOfExtensions = iEdidParserPtr->GetNumberOfExtensions();
   530                     if( ECea861Ext == iEdidParserPtr->GetExtensionType( i + 1 ) )
   530 
   531                         {
   531 					INFO_1( "No. of extensions from Block 0: %d", inbrOfExtensions );
   532                         INFO_1( "ECea861Ext extension data block number: %d", ( i+1 ) );
   532 
   533                         iExtensionParserPtr
   533 					if( inbrOfExtensions )
   534                             = iEdidParserPtr->CreateCea861ExtensionParserL( i + 1 );
   534 						{
   535                         break;
   535 						inbrOfExtensions--;
   536                         }
   536 						}
   537                     }
   537  					}
   538                 INFO_1( "Data block count in nbrOfExtensions: %d", nbrOfExtensions );
   538 				else
   539                 iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched );
   539 					{
   540                 iRetryCounter = KErrNone;
   540 					TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) );
   541                 }
   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 				}
   542             else
   597             else
   543                 {
   598                 {
   544                 INFO_1( "CDdcPortAccess::Read failed, error code: %d", iStatus.Int() );
   599                 INFO_1( "CDdcPortAccess::Read failed, error code: %d", iStatus.Int() );
   545                 
   600                 
   546                 if( (iStatus.Int() == KErrNotReady) && (iRetryCounter < KMaxRetryCount) )
   601                 if( (iStatus.Int() == KErrNotReady) && (iRetryCounter < KMaxRetryCount) )
   623     
   678     
   624     if( iDataBlockPtr == NULL )
   679     if( iDataBlockPtr == NULL )
   625         {
   680         {
   626         iDataBlockPtr = new(ELeave) TDataBlock;
   681         iDataBlockPtr = new(ELeave) TDataBlock;
   627         }
   682         }
   628     
   683 	else if( inbrOfExtensions )
   629     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
   630         iDataBlockPtr->iDataBlock,
   696         iDataBlockPtr->iDataBlock,
   631         iStatus );
   697         iStatus );
   632         
   698         
   633     SetActive();
   699     SetActive();
   634         
   700         
  1506 		}
  1572 		}
  1507 
  1573 
  1508 	return retVal;
  1574 	return retVal;
  1509     }
  1575     }
  1510 
  1576 
       
  1577 void CEDIDHandler::GetCurrentOverscanValue( TInt& aHOverscan, TInt& aVOverscan )
       
  1578 	{
       
  1579 	FUNC_LOG;
       
  1580 	
       
  1581 	aHOverscan = iHOverscan;
       
  1582 	aVOverscan = iVOverscan;
       
  1583 
       
  1584 	INFO_2("Overscan used: %d, %d", iHOverscan, iVOverscan);
       
  1585 	}
       
  1586 
  1511 //------------------------------------------------------------------------------
  1587 //------------------------------------------------------------------------------
  1512 // C++ constructor
  1588 // C++ constructor
  1513 //------------------------------------------------------------------------------
  1589 //------------------------------------------------------------------------------
  1514 //
  1590 //
  1515 CEDIDHandler::CEDIDHandler( MFSMForBody& aFSM,
  1591 CEDIDHandler::CEDIDHandler( MFSMForBody& aFSM,
  1516     CTVOutConfigForHDMI& aTVOutConfigForHDMI ) :
  1592     CTVOutConfigForHDMI& aTVOutConfigForHDMI ) :
  1517     CActive( CActive::EPriorityLow ),
  1593     CActive( CActive::EPriorityLow ),
  1518     iFSM( aFSM ),
  1594     iFSM( aFSM ),
  1519     iTVOutConfigForHDMI( aTVOutConfigForHDMI ),
  1595     iTVOutConfigForHDMI( aTVOutConfigForHDMI ),
  1520     iRetryCounter( 0 ),
  1596     iRetryCounter( 0 ),
  1521     iRequestID( EUndefRequest )
  1597     iRequestID( EUndefRequest ),
       
  1598     inbrOfExtensions( 0 ),
       
  1599     iCurrentBlock( 0 )
  1522     {
  1600     {
  1523     FUNC_LOG;
  1601     FUNC_LOG;
  1524     }
  1602     }
  1525 
  1603 
  1526 //------------------------------------------------------------------------------
  1604 //------------------------------------------------------------------------------