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 |
1346 |
1412 |
1347 //------------------------------------------------------------------------------ |
1413 //------------------------------------------------------------------------------ |
1348 // CalculateOverscan |
1414 // CalculateOverscan |
1349 //------------------------------------------------------------------------------ |
1415 //------------------------------------------------------------------------------ |
1350 // |
1416 // |
1351 void CEDIDHandler::UpdateOverscanValues() |
1417 TBool CEDIDHandler::UpdateOverscanValues() |
1352 { |
1418 { |
1353 FUNC_LOG; |
1419 FUNC_LOG; |
1354 |
1420 |
1355 // Overscan from cenrep |
1421 // Overscan from cenrep |
1356 TInt hOverscan = 0; |
1422 TInt hOverscan = 0; |
1357 TInt vOverscan = 0; |
1423 TInt vOverscan = 0; |
1358 CRepository* cenRep = NULL; |
1424 CRepository* cenRep = NULL; |
1359 TInt err = KErrNone; |
1425 TInt err = KErrNone; |
|
1426 TBool valChanged = EFalse; |
1360 |
1427 |
1361 TRAP( err, cenRep = CRepository::NewL( KCRUidTvoutSettings ) ); |
1428 TRAP( err, cenRep = CRepository::NewL( KCRUidTvoutSettings ) ); |
1362 if( err == KErrNone ) |
1429 if( err == KErrNone ) |
1363 { |
1430 { |
1364 |
1431 |
1377 } |
1444 } |
1378 |
1445 |
1379 // Cleanup |
1446 // Cleanup |
1380 delete cenRep; |
1447 delete cenRep; |
1381 } |
1448 } |
|
1449 |
|
1450 if( (iHOverscan != hOverscan) || (iVOverscan != vOverscan) ) |
|
1451 { |
|
1452 valChanged = ETrue; |
|
1453 } |
1382 |
1454 |
1383 // Update overscan values |
1455 // Update overscan values |
1384 iHOverscan = hOverscan; |
1456 iHOverscan = hOverscan; |
1385 iVOverscan = vOverscan; |
1457 iVOverscan = vOverscan; |
1386 |
1458 |
1387 INFO_2( "Overscan Values: %d,%d", iHOverscan, iVOverscan ); |
1459 INFO_3( "Overscan Values: %d,%d Changed:%d", iHOverscan, iVOverscan, valChanged ); |
|
1460 |
|
1461 return valChanged; |
1388 } |
1462 } |
1389 |
1463 |
1390 // ---------------------------------------------------------------------------- |
1464 // ---------------------------------------------------------------------------- |
1391 // CEDIDHandler::FilterAvailableTvConfigList |
1465 // CEDIDHandler::FilterAvailableTvConfigList |
1392 // |
1466 // |
1506 } |
1580 } |
1507 |
1581 |
1508 return retVal; |
1582 return retVal; |
1509 } |
1583 } |
1510 |
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 |
1511 //------------------------------------------------------------------------------ |
1595 //------------------------------------------------------------------------------ |
1512 // C++ constructor |
1596 // C++ constructor |
1513 //------------------------------------------------------------------------------ |
1597 //------------------------------------------------------------------------------ |
1514 // |
1598 // |
1515 CEDIDHandler::CEDIDHandler( MFSMForBody& aFSM, |
1599 CEDIDHandler::CEDIDHandler( MFSMForBody& aFSM, |
1516 CTVOutConfigForHDMI& aTVOutConfigForHDMI ) : |
1600 CTVOutConfigForHDMI& aTVOutConfigForHDMI ) : |
1517 CActive( CActive::EPriorityLow ), |
1601 CActive( CActive::EPriorityLow ), |
1518 iFSM( aFSM ), |
1602 iFSM( aFSM ), |
1519 iTVOutConfigForHDMI( aTVOutConfigForHDMI ), |
1603 iTVOutConfigForHDMI( aTVOutConfigForHDMI ), |
1520 iRetryCounter( 0 ), |
1604 iRetryCounter( 0 ), |
1521 iRequestID( EUndefRequest ) |
1605 iRequestID( EUndefRequest ), |
|
1606 inbrOfExtensions( 0 ), |
|
1607 iCurrentBlock( 0 ) |
1522 { |
1608 { |
1523 FUNC_LOG; |
1609 FUNC_LOG; |
1524 } |
1610 } |
1525 |
1611 |
1526 //------------------------------------------------------------------------------ |
1612 //------------------------------------------------------------------------------ |