accessoryservices/pluggeddisplay/pluggeddisplayengine/src/edidhandler.cpp
changeset 54 072a9626b290
parent 45 c6215323ad55
child 63 09d657f1ee00
equal deleted inserted replaced
45:c6215323ad55 54:072a9626b290
    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
   553 						}
   553 						}
   554   					}
   554   					}
   555 
   555 
   556 				if( inbrOfExtensions )
   556 				if( inbrOfExtensions )
   557 					{
   557 					{
       
   558 					iCurrentBlock++;
   558 					iRetryCounter = KErrNone;
   559 					iRetryCounter = KErrNone;
   559 					
   560 					
   560 					if( ReadEDIDDataL() != KErrNone )
   561 					if( ReadEDIDDataL() != KErrNone )
   561 						{
   562 						{
   562 						ResetData();
   563 						ResetData();
   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) )