accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp
changeset 50 48a00b70dc49
parent 48 86cf7a1b7eb9
child 59 0f7422b6b602
--- 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-- )
 				  {