--- a/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp Fri Jul 16 11:04:43 2010 +0300
+++ b/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp Fri Jul 30 10:34:49 2010 +0300
@@ -25,6 +25,7 @@
#include <e32math.h>
#include <accessoriescrkeys.h>
#include <centralrepository.h>
+#include <sysutil.h>
#include "pdeconstants.h"
#include "tvoutconfigforhdmi.h"
@@ -770,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;
+ }
}
//------------------------------------------------------------------------------
@@ -1556,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-- )
{