23 #include <accpolhdmispeakerallocation.h> |
23 #include <accpolhdmispeakerallocation.h> |
24 #include <e32cmn.h> |
24 #include <e32cmn.h> |
25 #include <e32math.h> |
25 #include <e32math.h> |
26 #include <accessoriescrkeys.h> |
26 #include <accessoriescrkeys.h> |
27 #include <centralrepository.h> |
27 #include <centralrepository.h> |
|
28 #include <sysutil.h> |
28 |
29 |
29 #include "pdeconstants.h" |
30 #include "pdeconstants.h" |
30 #include "tvoutconfigforhdmi.h" |
31 #include "tvoutconfigforhdmi.h" |
31 #include "edidhandler.h" |
32 #include "edidhandler.h" |
32 #include "edidparserbase.h" |
33 #include "edidparserbase.h" |
540 TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) ); |
541 TPtrC8 dataBlockDes( iDataBlockPtr->iDataBlock, sizeof( *iDataBlockPtr ) ); |
541 |
542 |
542 INFO_1( "Updating the Rawdata for the Block %d...", iCurrentBlock ); |
543 INFO_1( "Updating the Rawdata for the Block %d...", iCurrentBlock ); |
543 iEdidParserPtr->UpdateRawDataL(dataBlockDes); |
544 iEdidParserPtr->UpdateRawDataL(dataBlockDes); |
544 |
545 |
545 iCurrentBlock++; |
|
546 if( inbrOfExtensions >= 2 ) |
546 if( inbrOfExtensions >= 2 ) |
547 { |
547 { |
548 inbrOfExtensions = inbrOfExtensions - 2; |
548 inbrOfExtensions = inbrOfExtensions - 2; |
549 } |
549 } |
550 else |
550 else |
585 INFO_1( "CEA 861 extension is being read... at the index %d", i+1 ); |
586 INFO_1( "CEA 861 extension is being read... at the index %d", i+1 ); |
586 iEdidParserPtr->UpdateCea861ExtensionL( i + 1, iExtensionParserPtr ); |
587 iEdidParserPtr->UpdateCea861ExtensionL( i + 1, iExtensionParserPtr ); |
587 } |
588 } |
588 } |
589 } |
589 } |
590 } |
|
591 TRACE_EDID_DATA( *iEdidParserPtr ); |
|
592 |
|
593 iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched ); |
|
594 iRetryCounter = KErrNone; |
590 } |
595 } |
591 |
|
592 TRACE_EDID_DATA( *iEdidParserPtr ); |
|
593 |
|
594 iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched ); |
|
595 iRetryCounter = KErrNone; |
|
596 } |
596 } |
597 else |
597 else |
598 { |
598 { |
599 INFO_1( "CDdcPortAccess::Read failed, error code: %d", iStatus.Int() ); |
599 INFO_1( "CDdcPortAccess::Read failed, error code: %d", iStatus.Int() ); |
600 |
600 |
635 //------------------------------------------------------------------------------ |
635 //------------------------------------------------------------------------------ |
636 // From class CActive. |
636 // From class CActive. |
637 // RunL |
637 // RunL |
638 //------------------------------------------------------------------------------ |
638 //------------------------------------------------------------------------------ |
639 // |
639 // |
640 TInt CEDIDHandler::RunError( TInt aError ) |
640 TInt CEDIDHandler::RunError( TInt /*aError*/ ) |
641 { |
641 { |
642 FUNC_LOG; |
642 FUNC_LOG; |
643 |
643 |
644 /*TInt err( aError ); |
644 /*TInt err( aError ); |
645 // Avoid Panic in CActiveScheduler |
645 // Avoid Panic in CActiveScheduler |
769 aTimings.iTvHdmiVersion = iEdidParserPtr->GetVersion(); |
769 aTimings.iTvHdmiVersion = iEdidParserPtr->GetVersion(); |
770 aTimings.iTvHdmiRevision = iEdidParserPtr->GetRevision(); |
770 aTimings.iTvHdmiRevision = iEdidParserPtr->GetRevision(); |
771 } |
771 } |
772 Mem::FillZ( ( TAny* )&aTimings.iProductName, ( sizeof( TChar ) * KProductNameChars ) ); |
772 Mem::FillZ( ( TAny* )&aTimings.iProductName, ( sizeof( TChar ) * KProductNameChars ) ); |
773 Mem::FillZ( ( TAny* )&aTimings.iProductDescription, ( sizeof( TChar ) * KProductDescriptorsChars ) ); |
773 Mem::FillZ( ( TAny* )&aTimings.iProductDescription, ( sizeof( TChar ) * KProductDescriptorsChars ) ); |
774 aTimings.iSourceType = THdmiDviTimings::ESourceTypeUnknown; |
774 |
|
775 TInt err = KErrNone; |
|
776 CDeviceTypeInformation* deviceTypeInfo = NULL; |
|
777 TRAP(err, deviceTypeInfo = SysUtil::GetDeviceTypeInfoL()); |
|
778 |
|
779 if(KErrNone == err) |
|
780 { |
|
781 #define MAX(a, b) (((a)>(b)) ? (a) : (b)) |
|
782 #define MIN(a, b) (((a)<(b)) ? (a) : (b)) |
|
783 |
|
784 TPtrC16 bufPtrModelCode; |
|
785 TPtrC16 bufPtrManufacturerName; |
|
786 TUint loopCount; |
|
787 TUint maxLen; |
|
788 TUint maxCharsLen; |
|
789 TUint minNameCharsLen; |
|
790 TUint minDescritopCharsLen; |
|
791 |
|
792 deviceTypeInfo->GetManufacturerName(bufPtrManufacturerName); |
|
793 deviceTypeInfo->GetModelCode(bufPtrModelCode); |
|
794 maxLen = MAX(bufPtrModelCode.Length(),bufPtrManufacturerName.Length()); |
|
795 maxCharsLen = MAX(KProductNameChars,KProductDescriptorsChars); |
|
796 minNameCharsLen = MIN(KProductNameChars, bufPtrModelCode.Length()); |
|
797 minDescritopCharsLen = MIN(KProductDescriptorsChars, bufPtrManufacturerName.Length()); |
|
798 |
|
799 INFO_1( "maxLen : %d", maxLen); |
|
800 INFO_1( "maxCharsLen : %d", maxCharsLen); |
|
801 INFO_1( "minNameCharsLen : %d", minNameCharsLen); |
|
802 INFO_1( "minDescritopCharsLen : %d", minDescritopCharsLen); |
|
803 |
|
804 for(loopCount = 0; loopCount < maxLen; loopCount++) |
|
805 { |
|
806 if(loopCount >= maxCharsLen) |
|
807 { |
|
808 break; |
|
809 } |
|
810 else |
|
811 { |
|
812 if(loopCount < minNameCharsLen) |
|
813 { |
|
814 aTimings.iProductName[loopCount] = bufPtrModelCode[loopCount]; |
|
815 INFO_1( "aTimings.iProductName : %d", aTimings.iProductName[loopCount].GetLowerCase()); |
|
816 } |
|
817 if(loopCount < minDescritopCharsLen) |
|
818 { |
|
819 aTimings.iProductDescription[loopCount] = bufPtrManufacturerName[loopCount]; |
|
820 INFO_1( "aTimings.iProductDescription : %d", aTimings.iProductDescription[loopCount].GetLowerCase()); |
|
821 } |
|
822 } |
|
823 } |
|
824 INFO("Before Deleting Pointer deviceTypeInfo"); |
|
825 delete deviceTypeInfo; |
|
826 INFO("After Deleting Pointer deviceTypeInfo"); |
|
827 aTimings.iSourceType = THdmiDviTimings::ESourceTypePCGeneral; |
|
828 } |
|
829 else |
|
830 { |
|
831 aTimings.iSourceType = THdmiDviTimings::ESourceTypeUnknown; |
|
832 } |
775 } |
833 } |
776 |
834 |
777 //------------------------------------------------------------------------------ |
835 //------------------------------------------------------------------------------ |
778 // CEDIDHandler::FillHdmiDviTimings |
836 // CEDIDHandler::FillHdmiDviTimings |
779 //------------------------------------------------------------------------------ |
837 //------------------------------------------------------------------------------ |
1555 } |
1613 } |
1556 } |
1614 } |
1557 else // It is DVI connector |
1615 else // It is DVI connector |
1558 { |
1616 { |
1559 TInt modecount = aHdmiConfigs.Count(); |
1617 TInt modecount = aHdmiConfigs.Count(); |
|
1618 |
|
1619 if( !modecount ) |
|
1620 { |
|
1621 THdmiDviTimings timings; |
|
1622 |
|
1623 INFO( "==No EDID available from the Sink. Setting DMT 4" ); |
|
1624 // No EDID data available from the sink |
|
1625 // Default VGA resolution should be selected |
|
1626 const TTimingItem* item = TimingByIndex( KDefaultDMTModeIndex, ETimingModeDMT ); |
|
1627 if( item ) |
|
1628 { |
|
1629 Mem::FillZ( ( TAny* )&timings, sizeof( timings ) ); |
|
1630 FillHdmiDviTimings( *item, timings ); |
|
1631 timings.iTvPhysicalImageAspectRatioNumerator = 4; |
|
1632 timings.iTvPhysicalImageAspectRatioDenominator = 3; |
|
1633 retVal = aHdmiConfigs.Append( timings ); |
|
1634 ERROR_1( retVal, "Failed to append DMT timing: %S in array", item->iTimingName ); |
|
1635 if( retVal == KErrNone ) |
|
1636 { |
|
1637 modecount = 1; |
|
1638 ceaMode = EFalse; |
|
1639 } |
|
1640 } |
|
1641 } |
1560 |
1642 |
1561 while( modecount-- ) |
1643 while( modecount-- ) |
1562 { |
1644 { |
1563 |
1645 |
1564 if( aHdmiConfigs[ modecount ].iDmtMode && (EFalse == ceaMode) ) |
1646 if( aHdmiConfigs[ modecount ].iDmtMode && (EFalse == ceaMode) ) |