accessoryservices/pluggeddisplay/pluggeddisplayengine/src/hdmicablestateconnected.cpp
branchRCL_3
changeset 12 4a5c47a50617
parent 0 4e1aa6a622a0
child 17 0b0048910c20
--- a/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/hdmicablestateconnected.cpp	Tue May 11 17:23:24 2010 +0300
+++ b/accessoryservices/pluggeddisplay/pluggeddisplayengine/src/hdmicablestateconnected.cpp	Tue May 25 14:04:18 2010 +0300
@@ -28,6 +28,9 @@
 #include "tvoutconfigforhdmi.h"
 #include "edidhandler.h"
 #include "trace.h"
+#include <centralrepository.h>
+#include <accessoriescrkeys.h>
+#include <tvoutconfig.h>
 
 
 
@@ -77,8 +80,67 @@
         iTVOutConfigForSettingChanges->Cancel();
         delete iTVOutConfigForSettingChanges;
         }
+    if ( iCRWatchForVOverScan )
+        {
+        iCRWatchForVOverScan->Cancel();
+        delete iCRWatchForVOverScan;        
+        }
     }
 
+// ---------------------------------------------------------------------------
+// From MCentralRepositoryObserver.
+// ---------------------------------------------------------------------------
+//
+void CHDMICableStateConnected::CentRepKeyChanged(
+        TUid    aRepositoryId,
+        TUint32 aId )
+    {
+    FUNC_LOG;
+    if ( KCRUidTvoutSettings == aRepositoryId )
+        {
+        if ( KSettingsTvoutVerticalOverscan == aId  )
+            {
+            Input( EPDEIfCentralRepositoryWatch, EPDEIfCentralRepositoryWatchEventKeyChanged );
+            }
+        else
+            {
+            INFO_1("Unexpected CR key ID, aId 0x%x", aId );            
+            }       
+        }
+    else
+        {
+        INFO_1("Unexpected Central Repository ID, aRepositoryId 0x%x", aRepositoryId);
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// From MCentralRepositoryObserver.
+// ---------------------------------------------------------------------------
+//
+void CHDMICableStateConnected::CentRepGetKeyValueFailed(
+        TUid    aRepositoryId,
+        TUint32 aId,
+        TInt    aError )
+    {
+    FUNC_LOG;
+    // Make use of aError argument top get rid of compiler warning.
+    TInt error( aError );
+    if ( ( KCRUidTvoutSettings == aRepositoryId ) && ( KErrNone != error ) )
+        {
+        if ( KSettingsTvoutVerticalOverscan == aId  )
+            {
+            INFO_1(" Getting KSettingsTvoutVerticalOverscan from CR failed, aError %d", error );                                    
+            }
+        else
+            {
+            INFO_1("Unexpected CR key ID, aId 0x%x", aId );            
+            }       
+        }
+    else
+        {
+        INFO_1("Unexpected Central Repository ID, aRepositoryId 0x%x", aRepositoryId);
+        }    
+    }
 
 // ---------------------------------------------------------------------------
 // From MFSMState.
@@ -88,6 +150,7 @@
     {
     FUNC_LOG;
     TInt retVal( KErrNone );
+	iOverScanSettingsChanged = EFalse;
     iCopyProtectListenFailCounter.iCount = 0;
     iTVOutConfigForCopyProtect->ResetLatestRecordedCopyProtectionStatus();
     retVal = iEDIDHandler.FetchEDIDData();
@@ -451,13 +514,22 @@
             else
                 {
                 iSubState = ESubStateConnected;
-                TRAPD( err, iHDMICableStatusFSM.SettingsChangedL() );
-                if ( KErrNone != err )
-                    {
-                    INFO_1( "iHDMICableStatusFSM.SettingsChangedL() failed, error code %i", err ); 
-                    }
+
+				if( !iOverScanSettingsChanged )
+					{
+	                TRAPD( err, iHDMICableStatusFSM.SettingsChangedL() );
+	                if ( KErrNone != err )
+	                    {
+	                    INFO_1( "iHDMICableStatusFSM.SettingsChangedL() failed, error code %i", err ); 
+	                    }
+					}
+				else
+					{
+					iOverScanSettingsChanged = EFalse;
+					}
                 ListenCopyProtectionStatusChanges();
                 iTVOutConfigForSettingChanges->ListenSettingsChanges();
+				iCRWatchForVOverScan->Watch();
                 }
             }
         else if ( EIfTVOutConfigEventEnableFailed == aEvent )
@@ -632,6 +704,7 @@
                 iSubState = ESubStateConnected;
                 ListenCopyProtectionStatusChanges();
                 iTVOutConfigForSettingChanges->ListenSettingsChanges();
+				iCRWatchForVOverScan->Watch();
                 }
             }
         else if ( EPDEIfAccessoryControlEventConnectFailed == aEvent )
@@ -780,6 +853,7 @@
                 iTVOutConfigForCopyProtect->Cancel();
                 // Stop listen setting changes
                 iTVOutConfigForSettingChanges->Cancel();
+				iCRWatchForVOverScan->Cancel();
                 iSubState = ESubStateIdlingDisable;
                 iTVOutConfigForHDMI.Disable();            
                 }
@@ -792,6 +866,7 @@
             iTVOutConfigForCopyProtect->Cancel();
             // Stop listen setting changes
             iTVOutConfigForSettingChanges->Cancel();
+			iCRWatchForVOverScan->Cancel();
             // Disable tv out
             iTVOutConfigForHDMI.Disable();            
             }
@@ -808,6 +883,7 @@
                 iTVOutConfigForCopyProtect->Cancel();
                 // Stop listen setting changes
                 iTVOutConfigForSettingChanges->Cancel();
+				iCRWatchForVOverScan->Cancel();
                 iTVOutConfigForHDMI.Disable();                       
                 }
             else
@@ -821,6 +897,7 @@
                     iTVOutConfigForCopyProtect->Cancel();
                     // Stop listen setting changes
                     iTVOutConfigForSettingChanges->Cancel();
+					iCRWatchForVOverScan->Cancel();
                     iSubState = ESubStateIdlingDisable;
                     iTVOutConfigForHDMI.Disable();            
                     }
@@ -851,6 +928,7 @@
                 iTVOutConfigForHDMI.Cancel();
                 // Stop listening Copy Protection status
                 iTVOutConfigForCopyProtect->Cancel();
+				iCRWatchForVOverScan->Cancel();
                 iSubState = ESubStateRejectingDisable;
                 iTVOutConfigForHDMI.Disable();            
                 }
@@ -862,6 +940,7 @@
             iTVOutConfigForHDMI.Cancel();
             // Stop listening Copy Protection status
             iTVOutConfigForCopyProtect->Cancel();
+			iCRWatchForVOverScan->Cancel();
             if ( iTVOutConfigForHDMI.GetTvOutConfig()->Enabled() )
                 {
                 iSubState = ESubStateResettingDisable;
@@ -887,6 +966,7 @@
             iTVOutConfigForHDMI.Cancel();
             // Stop listening Copy Protection status
             iTVOutConfigForCopyProtect->Cancel();
+			iCRWatchForVOverScan->Cancel();
             iTVOutConfigForHDMI.Disable();            
             }
         else
@@ -895,6 +975,55 @@
             }
         break;
         }
+    case EPDEIfCentralRepositoryWatch:
+        {       
+        INFO( "Interface: EPDEIfCentralRepositoryWatch" );
+        if ( EPDEIfCentralRepositoryWatchEventKeyChanged == aEvent )
+            {
+            INFO( "Event: EPDEIfCentralRepositoryWatchEventKeyChanged" );
+
+			// Get the available config
+			THdmiDviTimings curConfig;
+			
+			iTVOutConfigForHDMI.GetTvOutConfig()->GetConfig( curConfig );
+
+			if( (TTvSettings::EHDMI == curConfig.iConnector) && (!curConfig.iUnderscanEnabled) )
+				{					
+				// Clear the available config				
+				ClearAvailableTvOutConfig();
+
+				TInt retVal = iEDIDHandler.SetVideoParameters();
+				if ( KErrNone != retVal )
+					{
+					INFO( "Going to state <Rejected> since video parameter setting failed!" );		  
+					iTVOutConfigForSettingChanges->Cancel();
+					iCRWatchForVOverScan->Cancel();
+					iHDMICableStatusFSM.Transit( EHDMICableStateRejected ); 		
+					}
+				else
+					{
+					TFSMEventId event = iTVOutConfigForHDMI.ListenHDMICableStatusIfNoMissedEvents();
+					if ( EIfTVOutConfigEventCableDisconnected == event )
+						{
+						INFO( "Retreating back to <Idle> since cable was disconnected while not listening!" );		  
+						iTVOutConfigForSettingChanges->Cancel();
+						iCRWatchForVOverScan->Cancel();
+						iHDMICableStatusFSM.Transit( EHDMICableStateIdle ); 		
+						}
+					else
+						{
+						iOverScanSettingsChanged = ETrue;
+						iSubState = ESubStateWaitForSettingsChanged;
+						}
+					}				
+				}
+            }
+        else
+            {
+            INFO_1( "Unknown Event Id: %i", aEvent );        
+            }
+        break;
+        }       
     default:
         {
         INFO_1( "Event received from unknown/unexpected interface Id: %i", aInterfaceId );        
@@ -938,8 +1067,24 @@
         else if ( EIfTVOutConfigEventSettingsChanged == aEvent )
             {
             INFO( "Event: EIfTVOutConfigEventSettingsChanged" );
-            iSubState = ESubStateEnable;
-            iTVOutConfigForHDMI.Enable();
+			if( iOverScanSettingsChanged )
+				{
+	            if ( iTVOutConfigForHDMI.GetTvOutConfig()->Enabled() )
+	                {
+	                iSubState = ESubStateResettingDisable;
+	                iTVOutConfigForHDMI.Disable();
+	                }
+	            else
+	                {
+	                iSubState = ESubStateResettingEnable;
+	                iTVOutConfigForHDMI.Enable();                
+	                }
+				}
+			else
+				{
+	            iSubState = ESubStateEnable;
+	            iTVOutConfigForHDMI.Enable();
+				}
             }
         else if ( EIfTVOutConfigEventSettingsChangesListenFailed == aEvent )
             {
@@ -962,14 +1107,38 @@
     }
 
 // ---------------------------------------------------------------------------
+// ClearAvailableConfig
+// ---------------------------------------------------------------------------
+//
+void CHDMICableStateConnected::ClearAvailableTvOutConfig()
+    {
+    FUNC_LOG;
+    
+    if( iTVOutConfigForHDMI.GetTvOutConfig() )
+        {
+        RArray<THdmiDviTimings> HdmiSettingsArray;        
+    	RArray<TTvSettings> TvSettingsArray;       
+    
+        TInt err = iTVOutConfigForHDMI.GetTvOutConfig()->SetAvailableTvConfigList( TvSettingsArray, HdmiSettingsArray );
+        
+        HdmiSettingsArray.Close();
+    	TvSettingsArray.Close();
+        }              
+    }
+
+
+// ---------------------------------------------------------------------------
 // ConstructL
 // ---------------------------------------------------------------------------
 //
 void CHDMICableStateConnected::ConstructL()
     {
     FUNC_LOG;
+    // Create Central Repository Watchers
+    iCRWatchForVOverScan = CCentralRepositoryWatch::NewL(*this, KCRUidTvoutSettings, KSettingsTvoutVerticalOverscan );
+	
     iTVOutConfigForCopyProtect = CTVOutConfigForHDMI::NewL( iHDMICableStatusFSM );
-    iTVOutConfigForSettingChanges = CTVOutConfigForHDMI::NewL( iHDMICableStatusFSM );
+    iTVOutConfigForSettingChanges = CTVOutConfigForHDMI::NewL( iHDMICableStatusFSM );	
     }