diff -r c6215323ad55 -r 072a9626b290 accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp --- a/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp Tue Jul 06 15:43:30 2010 +0300 +++ b/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp Wed Aug 18 11:03:14 2010 +0300 @@ -25,6 +25,7 @@ #include #include #include +#include #include "pdeconstants.h" #include "tvoutconfigforhdmi.h" @@ -542,7 +543,6 @@ INFO_1( "Updating the Rawdata for the Block %d...", iCurrentBlock ); iEdidParserPtr->UpdateRawDataL(dataBlockDes); - iCurrentBlock++; if( inbrOfExtensions >= 2 ) { inbrOfExtensions = inbrOfExtensions - 2; @@ -555,6 +555,7 @@ if( inbrOfExtensions ) { + iCurrentBlock++; iRetryCounter = KErrNone; if( ReadEDIDDataL() != KErrNone ) @@ -587,12 +588,11 @@ } } } + TRACE_EDID_DATA( *iEdidParserPtr ); + + iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched ); + iRetryCounter = KErrNone; } - - TRACE_EDID_DATA( *iEdidParserPtr ); - - iFSM.Input( EPDEIfEDIDHandler, EPDEIfEDIDHandlerEventEdidDataFetched ); - iRetryCounter = KErrNone; } else { @@ -637,7 +637,7 @@ // RunL //------------------------------------------------------------------------------ // -TInt CEDIDHandler::RunError( TInt aError ) +TInt CEDIDHandler::RunError( TInt /*aError*/ ) { FUNC_LOG; @@ -771,7 +771,65 @@ } Mem::FillZ( ( TAny* )&aTimings.iProductName, ( sizeof( TChar ) * KProductNameChars ) ); Mem::FillZ( ( TAny* )&aTimings.iProductDescription, ( sizeof( TChar ) * KProductDescriptorsChars ) ); - aTimings.iSourceType = THdmiDviTimings::ESourceTypeUnknown; + + TInt err = KErrNone; + CDeviceTypeInformation* deviceTypeInfo = NULL; + TRAP(err, deviceTypeInfo = SysUtil::GetDeviceTypeInfoL()); + + if(KErrNone == err) + { + #define MAX(a, b) (((a)>(b)) ? (a) : (b)) + #define MIN(a, b) (((a)<(b)) ? (a) : (b)) + + TPtrC16 bufPtrModelCode; + TPtrC16 bufPtrManufacturerName; + TUint loopCount; + TUint maxLen; + TUint maxCharsLen; + TUint minNameCharsLen; + TUint minDescritopCharsLen; + + deviceTypeInfo->GetManufacturerName(bufPtrManufacturerName); + deviceTypeInfo->GetModelCode(bufPtrModelCode); + maxLen = MAX(bufPtrModelCode.Length(),bufPtrManufacturerName.Length()); + maxCharsLen = MAX(KProductNameChars,KProductDescriptorsChars); + minNameCharsLen = MIN(KProductNameChars, bufPtrModelCode.Length()); + minDescritopCharsLen = MIN(KProductDescriptorsChars, bufPtrManufacturerName.Length()); + + INFO_1( "maxLen : %d", maxLen); + INFO_1( "maxCharsLen : %d", maxCharsLen); + INFO_1( "minNameCharsLen : %d", minNameCharsLen); + INFO_1( "minDescritopCharsLen : %d", minDescritopCharsLen); + + for(loopCount = 0; loopCount < maxLen; loopCount++) + { + if(loopCount >= maxCharsLen) + { + break; + } + else + { + if(loopCount < minNameCharsLen) + { + aTimings.iProductName[loopCount] = bufPtrModelCode[loopCount]; + INFO_1( "aTimings.iProductName : %d", aTimings.iProductName[loopCount].GetLowerCase()); + } + if(loopCount < minDescritopCharsLen) + { + aTimings.iProductDescription[loopCount] = bufPtrManufacturerName[loopCount]; + INFO_1( "aTimings.iProductDescription : %d", aTimings.iProductDescription[loopCount].GetLowerCase()); + } + } + } + INFO("Before Deleting Pointer deviceTypeInfo"); + delete deviceTypeInfo; + INFO("After Deleting Pointer deviceTypeInfo"); + aTimings.iSourceType = THdmiDviTimings::ESourceTypePCGeneral; + } + else + { + aTimings.iSourceType = THdmiDviTimings::ESourceTypeUnknown; + } } //------------------------------------------------------------------------------ @@ -1557,6 +1615,30 @@ else // It is DVI connector { TInt modecount = aHdmiConfigs.Count(); + + if( !modecount ) + { + THdmiDviTimings timings; + + INFO( "==No EDID available from the Sink. Setting DMT 4" ); + // No EDID data available from the sink + // Default VGA resolution should be selected + const TTimingItem* item = TimingByIndex( KDefaultDMTModeIndex, ETimingModeDMT ); + if( item ) + { + Mem::FillZ( ( TAny* )&timings, sizeof( timings ) ); + FillHdmiDviTimings( *item, timings ); + timings.iTvPhysicalImageAspectRatioNumerator = 4; + timings.iTvPhysicalImageAspectRatioDenominator = 3; + retVal = aHdmiConfigs.Append( timings ); + ERROR_1( retVal, "Failed to append DMT timing: %S in array", item->iTimingName ); + if( retVal == KErrNone ) + { + modecount = 1; + ceaMode = EFalse; + } + } + } while( modecount-- ) {