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