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 //------------------------------------------------------------------------------ |