accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp
changeset 45 c6215323ad55
parent 44 2c28af138640
child 54 072a9626b290
equal deleted inserted replaced
44:2c28af138640 45:c6215323ad55
   172     iDataBlockPtr = NULL;
   172     iDataBlockPtr = NULL;
   173     delete iEdidParserPtr;
   173     delete iEdidParserPtr;
   174     iEdidParserPtr = NULL;
   174     iEdidParserPtr = NULL;
   175     delete iExtensionParserPtr;
   175     delete iExtensionParserPtr;
   176     iExtensionParserPtr = NULL;
   176     iExtensionParserPtr = NULL;
       
   177 
       
   178 	iCurrentBlock = 0;
       
   179 	inbrOfExtensions = 0;
   177     }
   180     }
   178 
   181 
   179 //------------------------------------------------------------------------------
   182 //------------------------------------------------------------------------------
   180 // CreateHdmiSinkL
   183 // CreateHdmiSinkL
   181 //------------------------------------------------------------------------------
   184 //------------------------------------------------------------------------------
   514     
   517     
   515     switch ( iRequestID )
   518     switch ( iRequestID )
   516         {
   519         {
   517         case EDdcReadRequest:
   520         case EDdcReadRequest:
   518             {
   521             {
   519             if( KErrNone == iStatus.Int() )
   522 			if( KErrNone == iStatus.Int() )
   520                 {
   523 				{				
   521                 TPtrC8
   524 				if( iCurrentBlock == 0 )
   522                     dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) );
   525 					{
   523                 iEdidParserPtr = CEdidParserBase::NewL( dataBlockDes );
   526 					TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) );
   524                 TInt nbrOfExtensions = iEdidParserPtr->GetNumberOfExtensions();
   527 					
   525                 for( TInt i = 0; i < nbrOfExtensions; ++i )
   528 					iEdidParserPtr = CEdidParserBase::NewL( dataBlockDes );
   526                     {
   529 					inbrOfExtensions = iEdidParserPtr->GetNumberOfExtensions();
   527                     if( ECea861Ext == iEdidParserPtr->GetExtensionType( i + 1 ) )
   530 
   528                         {
   531 					INFO_1( "No. of extensions from Block 0: %d", inbrOfExtensions );
   529                         INFO_1( "ECea861Ext extension data block number: %d", ( i+1 ) );
   532 
   530                         iExtensionParserPtr
   533 					if( inbrOfExtensions )
   531                             = iEdidParserPtr->CreateCea861ExtensionParserL( i + 1 );
   534 						{
   532                         break;
   535 						inbrOfExtensions--;
   533                         }
   536 						}
   534                     }
   537  					}
   535                 INFO_1( "Data block count in nbrOfExtensions: %d", nbrOfExtensions );
   538 				else
   536                 iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched );
   539 					{
   537                 iRetryCounter = KErrNone;
   540 					TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) );
   538                 }
   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 				}
   539             else
   597             else
   540                 {
   598                 {
   541                 INFO_1( "CDdcPortAccess::Read failed, error code: %d", iStatus.Int() );
   599                 INFO_1( "CDdcPortAccess::Read failed, error code: %d", iStatus.Int() );
   542                 
   600                 
   543                 if( (iStatus.Int() == KErrNotReady) && (iRetryCounter < KMaxRetryCount) )
   601                 if( (iStatus.Int() == KErrNotReady) && (iRetryCounter < KMaxRetryCount) )
   620     
   678     
   621     if( iDataBlockPtr == NULL )
   679     if( iDataBlockPtr == NULL )
   622         {
   680         {
   623         iDataBlockPtr = new(ELeave) TDataBlock;
   681         iDataBlockPtr = new(ELeave) TDataBlock;
   624         }
   682         }
   625     
   683 	else if( inbrOfExtensions )
   626     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
   627         iDataBlockPtr->iDataBlock,
   696         iDataBlockPtr->iDataBlock,
   628         iStatus );
   697         iStatus );
   629         
   698         
   630     SetActive();
   699     SetActive();
   631         
   700         
  1343 
  1412 
  1344 //------------------------------------------------------------------------------
  1413 //------------------------------------------------------------------------------
  1345 // CalculateOverscan
  1414 // CalculateOverscan
  1346 //------------------------------------------------------------------------------
  1415 //------------------------------------------------------------------------------
  1347 //
  1416 //
  1348 void CEDIDHandler::UpdateOverscanValues()
  1417 TBool CEDIDHandler::UpdateOverscanValues()
  1349     {
  1418     {
  1350     FUNC_LOG;
  1419     FUNC_LOG;
  1351 
  1420 
  1352     // Overscan from cenrep
  1421     // Overscan from cenrep
  1353     TInt hOverscan = 0;
  1422     TInt hOverscan = 0;
  1354     TInt vOverscan = 0;
  1423     TInt vOverscan = 0;
  1355     CRepository* cenRep = NULL;
  1424     CRepository* cenRep = NULL;
  1356     TInt err = KErrNone;
  1425     TInt err = KErrNone;
       
  1426 	TBool valChanged = EFalse;
  1357     
  1427     
  1358     TRAP( err, cenRep = CRepository::NewL( KCRUidTvoutSettings ) );
  1428     TRAP( err, cenRep = CRepository::NewL( KCRUidTvoutSettings ) );
  1359     if( err == KErrNone )
  1429     if( err == KErrNone )
  1360         {
  1430         {
  1361         
  1431         
  1374             }
  1444             }
  1375         
  1445         
  1376         // Cleanup
  1446         // Cleanup
  1377         delete cenRep;
  1447         delete cenRep;
  1378         }
  1448         }
       
  1449 
       
  1450 	if( (iHOverscan != hOverscan) || (iVOverscan != vOverscan) )
       
  1451 		{
       
  1452 		valChanged = ETrue;
       
  1453 		}
  1379     
  1454     
  1380     // Update overscan values
  1455     // Update overscan values
  1381     iHOverscan = hOverscan;
  1456     iHOverscan = hOverscan;
  1382     iVOverscan = vOverscan;
  1457     iVOverscan = vOverscan;
  1383 
  1458 
  1384 	INFO_2( "Overscan Values: %d,%d", iHOverscan, iVOverscan );
  1459 	INFO_3( "Overscan Values: %d,%d Changed:%d", iHOverscan, iVOverscan, valChanged );
       
  1460 
       
  1461 	return valChanged;
  1385     }
  1462     }
  1386 
  1463 
  1387 // ----------------------------------------------------------------------------
  1464 // ----------------------------------------------------------------------------
  1388 // CEDIDHandler::FilterAvailableTvConfigList
  1465 // CEDIDHandler::FilterAvailableTvConfigList
  1389 //
  1466 //
  1523     CTVOutConfigForHDMI& aTVOutConfigForHDMI ) :
  1600     CTVOutConfigForHDMI& aTVOutConfigForHDMI ) :
  1524     CActive( CActive::EPriorityLow ),
  1601     CActive( CActive::EPriorityLow ),
  1525     iFSM( aFSM ),
  1602     iFSM( aFSM ),
  1526     iTVOutConfigForHDMI( aTVOutConfigForHDMI ),
  1603     iTVOutConfigForHDMI( aTVOutConfigForHDMI ),
  1527     iRetryCounter( 0 ),
  1604     iRetryCounter( 0 ),
  1528     iRequestID( EUndefRequest )
  1605     iRequestID( EUndefRequest ),
       
  1606     inbrOfExtensions( 0 ),
       
  1607     iCurrentBlock( 0 )
  1529     {
  1608     {
  1530     FUNC_LOG;
  1609     FUNC_LOG;
  1531     }
  1610     }
  1532 
  1611 
  1533 //------------------------------------------------------------------------------
  1612 //------------------------------------------------------------------------------