diff -r 2c28af138640 -r c6215323ad55 accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp --- a/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp Wed Jun 23 19:38:32 2010 +0300 +++ b/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp Tue Jul 06 15:43:30 2010 +0300 @@ -174,6 +174,9 @@ iEdidParserPtr = NULL; delete iExtensionParserPtr; iExtensionParserPtr = NULL; + + iCurrentBlock = 0; + inbrOfExtensions = 0; } //------------------------------------------------------------------------------ @@ -516,26 +519,81 @@ { case EDdcReadRequest: { - if( KErrNone == iStatus.Int() ) - { - TPtrC8 - dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) ); - iEdidParserPtr = CEdidParserBase::NewL( dataBlockDes ); - TInt nbrOfExtensions = iEdidParserPtr->GetNumberOfExtensions(); - for( TInt i = 0; i < nbrOfExtensions; ++i ) - { - if( ECea861Ext == iEdidParserPtr->GetExtensionType( i + 1 ) ) - { - INFO_1( "ECea861Ext extension data block number: %d", ( i+1 ) ); - iExtensionParserPtr - = iEdidParserPtr->CreateCea861ExtensionParserL( i + 1 ); - break; - } - } - INFO_1( "Data block count in nbrOfExtensions: %d", nbrOfExtensions ); - iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched ); - iRetryCounter = KErrNone; - } + if( KErrNone == iStatus.Int() ) + { + if( iCurrentBlock == 0 ) + { + TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) ); + + iEdidParserPtr = CEdidParserBase::NewL( dataBlockDes ); + inbrOfExtensions = iEdidParserPtr->GetNumberOfExtensions(); + + INFO_1( "No. of extensions from Block 0: %d", inbrOfExtensions ); + + if( inbrOfExtensions ) + { + inbrOfExtensions--; + } + } + else + { + TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) ); + + INFO_1( "Updating the Rawdata for the Block %d...", iCurrentBlock ); + iEdidParserPtr->UpdateRawDataL(dataBlockDes); + + iCurrentBlock++; + if( inbrOfExtensions >= 2 ) + { + inbrOfExtensions = inbrOfExtensions - 2; + } + else + { + inbrOfExtensions--; + } + } + + if( inbrOfExtensions ) + { + iRetryCounter = KErrNone; + + if( ReadEDIDDataL() != KErrNone ) + { + ResetData(); + iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetchFailed ); + } + } + else + { + TInt extensions = iEdidParserPtr->GetNumberOfExtensions(); + + INFO_1( "No. of extensions from Block 0: %d", extensions ); + + for( TInt i = 0; i < extensions; ++i ) + { + if( ECea861Ext == iEdidParserPtr->GetExtensionType( i + 1 ) ) + { + INFO_1( "ECea861Ext extension data block number: %d", ( i+1 ) ); + if( !iExtensionParserPtr ) + { + INFO( "First CEA 861 extension is being read..." ); + iExtensionParserPtr + = iEdidParserPtr->CreateCea861ExtensionParserL( i + 1 ); + } + else + { + INFO_1( "CEA 861 extension is being read... at the index %d", i+1 ); + iEdidParserPtr->UpdateCea861ExtensionL( i + 1, iExtensionParserPtr ); + } + } + } + } + + TRACE_EDID_DATA( *iEdidParserPtr ); + + iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched ); + iRetryCounter = KErrNone; + } else { INFO_1( "CDdcPortAccess::Read failed, error code: %d", iStatus.Int() ); @@ -622,8 +680,19 @@ { iDataBlockPtr = new(ELeave) TDataBlock; } + else if( inbrOfExtensions ) + { + if( iDataBlockPtr ) + { + delete iDataBlockPtr; + iDataBlockPtr = NULL; + } + iDataBlockPtr = new(ELeave) TDataBlock; + } + + INFO_1( "Reading EDID block %d...", iCurrentBlock ); - retVal = iDdcPortAccess->Read( EMonitorPort, 0, // First block contains EDID data if that exists + retVal = iDdcPortAccess->Read( EMonitorPort, iCurrentBlock, // First block contains EDID data if that exists iDataBlockPtr->iDataBlock, iStatus ); @@ -1345,7 +1414,7 @@ // CalculateOverscan //------------------------------------------------------------------------------ // -void CEDIDHandler::UpdateOverscanValues() +TBool CEDIDHandler::UpdateOverscanValues() { FUNC_LOG; @@ -1354,6 +1423,7 @@ TInt vOverscan = 0; CRepository* cenRep = NULL; TInt err = KErrNone; + TBool valChanged = EFalse; TRAP( err, cenRep = CRepository::NewL( KCRUidTvoutSettings ) ); if( err == KErrNone ) @@ -1376,12 +1446,19 @@ // Cleanup delete cenRep; } + + if( (iHOverscan != hOverscan) || (iVOverscan != vOverscan) ) + { + valChanged = ETrue; + } // Update overscan values iHOverscan = hOverscan; iVOverscan = vOverscan; - INFO_2( "Overscan Values: %d,%d", iHOverscan, iVOverscan ); + INFO_3( "Overscan Values: %d,%d Changed:%d", iHOverscan, iVOverscan, valChanged ); + + return valChanged; } // ---------------------------------------------------------------------------- @@ -1525,7 +1602,9 @@ iFSM( aFSM ), iTVOutConfigForHDMI( aTVOutConfigForHDMI ), iRetryCounter( 0 ), - iRequestID( EUndefRequest ) + iRequestID( EUndefRequest ), + inbrOfExtensions( 0 ), + iCurrentBlock( 0 ) { FUNC_LOG; }