tvout/tvoutengine/src/glxtvconnectionmonitor.cpp
changeset 33 1ee2af37811f
parent 29 2c833fc9e98f
child 36 6481344a6d67
--- a/tvout/tvoutengine/src/glxtvconnectionmonitor.cpp	Fri May 14 15:52:22 2010 +0300
+++ b/tvout/tvoutengine/src/glxtvconnectionmonitor.cpp	Thu May 27 12:51:42 2010 +0300
@@ -17,10 +17,6 @@
 
 
 
-/**
- * @internal reviewed 24/08/2007 by D Holland
- */
-
 //  CLASS HEADER
 #include "glxtvconnectionmonitor.h"
 
@@ -69,17 +65,15 @@
 // Default C++ constructor
 //-----------------------------------------------------------------------------
 //
-CGlxTvConnectionMonitor::CGlxTvConnectionMonitor
-                           ( MGlxTvConnectionObserver& aConnectionObserver ) 
-                            :CActive(EPriorityStandard), 
-                             iConnectionObserver ( aConnectionObserver ),
-                             iTvOutConnectionState(EFalse),
-                             iHDMIConnectionState(EFalse)
+CGlxTvConnectionMonitor::CGlxTvConnectionMonitor(
+		MGlxTvConnectionObserver& aConnectionObserver) :
+	CActive(EPriorityStandard), iConnectionObserver(aConnectionObserver),
+			iIsTvOutConnected(EFalse), iIsHDMIConnected(EFalse)
 
-    {
-    TRACER("CGlxTvConnectionMonitor");
-    CActiveScheduler::Add( this );
-    }
+	{
+	TRACER("CGlxTvConnectionMonitor");
+	CActiveScheduler::Add(this);
+	}
 
 
 //-----------------------------------------------------------------------------
@@ -146,8 +140,8 @@
 TBool CGlxTvConnectionMonitor::IsConnected() const
     {
     TRACER("CGlxTvConnectionMonitor::IsConnected");
-    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsConnected iTvOutConnectionState=%d",iTvOutConnectionState);
-    return iTvOutConnectionState;
+    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsConnected iIsTvOutConnected=%d",iIsTvOutConnected);
+    return iIsTvOutConnected;
     }
 
 //-----------------------------------------------------------------------------
@@ -158,8 +152,8 @@
 TBool CGlxTvConnectionMonitor::IsHDMIConnected() const
     {
     TRACER("CGlxTvConnectionMonitor::IsHDMIConnected");
-    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsHDMIConnected iHDMIConnectionState=%d",iHDMIConnectionState);
-    return iHDMIConnectionState;
+    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsHDMIConnected iIsHDMIConnected=%d",iIsHDMIConnected);
+    return iIsHDMIConnected;
     }
 
 //-----------------------------------------------------------------------------
@@ -181,21 +175,22 @@
 //-----------------------------------------------------------------------------
 //
 void CGlxTvConnectionMonitor::IssueNotificationL()
-    {
-    TRACER("CGlxTvConnectionMonitor::IssueNotificationL");
-	TBool previousTvState = iTvOutConnectionState;
-	TBool previousHDMIState = iHDMIConnectionState;
-	
+	{
+	TRACER("CGlxTvConnectionMonitor::IssueNotificationL");
+	TBool previousTvState = iIsTvOutConnected;
+	TBool previousHDMIState = iIsHDMIConnected;
+
 	// Update the connection status
 	UpdateConnectionStatusL();
-    
+
 	// trigger tvstatus change only when there is actually a change the in the connection and not 
 	// for spurious events
-	if (previousTvState !=iTvOutConnectionState || previousHDMIState != iHDMIConnectionState)
-	    {
-	    GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL - Connection Altered");
-	    iConnectionObserver.HandleTvConnectionStatusChangedL();
-	    }
+	if (previousTvState != iIsTvOutConnected || previousHDMIState
+			!= iIsHDMIConnected)
+		{
+		GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL - Connection Altered");
+		iConnectionObserver.HandleTvConnectionStatusChangedL();
+		}
 	}
 
 //-----------------------------------------------------------------------------
@@ -207,47 +202,64 @@
     TRACER("CGlxTvConnectionMonitor::UpdateConnectionStatusL()");
 
     GLX_LOG_INFO2("CGlxTvConnectionMonitor::UpdateConnectionStatusL previousTvState = %d , previousHDMIState = %d",
-            iTvOutConnectionState,iHDMIConnectionState);
+            iIsTvOutConnected,iIsHDMIConnected);
+
+    // reset the states
+    iIsHDMIConnected = EFalse;
+    iIsTvOutConnected = EFalse;
 
     //gets the TV status in to the iCurrentAccArray and haves the Latest Accesory in 0-index
     User::LeaveIfError(iTvAccCon.GetAccessoryConnectionStatus(iCurrentAccArray));
 
     CAccPolSubblockNameArray* nameArray = CAccPolSubblockNameArray::NewL();
     CleanupStack::PushL(nameArray);
+
     //  Get the number of currently connected accessories
     //  Loop through each connected accessory looking for
     //  the desired capabilities
     //
     const TInt count = iCurrentAccArray.Count();
     GLX_LOG_INFO1("CGlxTvConnectionMonitor::UpdateConnectionStatusL current count value is %d",count);
-    for (TInt index = 0; index <count; index++)
+    for (TInt index = 0; index < count; index++)
         {
-        TAccPolGenericID genId = iCurrentAccArray.GetGenericIDL(index);
-        //  Get all supported capabilities for this connected accessory.
-        iTvAccCon.GetSubblockNameArrayL(genId, *nameArray);
+        const TAccPolGenericID genId = iCurrentAccArray.GetGenericIDL(index);
         //  Check if this connected accessory supports TV-Out capabality.
         GLX_LOG_INFO1("CGlxTvConnectionMonitor::UpdateConnectionStatusL current index value is %d",index);
-        if (nameArray->HasName(KAccVideoOut))
+        GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL Video Accessory Supported");
+        TAccPolNameRecord nameRecord;
+        nameRecord.SetNameL(KAccVideoOut);
+
+        if (genId.DeviceTypeCaps( KDTAVDevice ) &&
+                genId.PhysicalConnectionCaps( KPCHDMI ))
             {
-            GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL Video Accessory Supported");
-            TAccPolNameRecord nameRecord;
-            nameRecord.SetNameL(KAccVideoOut);
             TAccValueTypeTInt value;
-            iTvAccCon.GetValueL(genId, nameRecord, value);
-            if (value.iValue == EAccVideoOutEHDMI)
+            TInt err = iTvAccCon.GetValueL(genId, nameRecord, value);
+            if (err ==KErrNone)
                 {
-                GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL HDMI is connected");
-                iHDMIConnectionState = ETrue;
+                if (value.iValue == EAccVideoOutEHDMI)
+                    {
+                    GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL HDMI is connected");
+                    iIsHDMIConnected = ETrue;
+                    }
                 }
-            else if (value.iValue == EAccVideoOutCVideo)
+            }
+        else if (genId.DeviceTypeCaps( KDTAVDevice ) &&
+                genId.PhysicalConnectionCaps( KPCWired ))
+            {
+            TAccValueTypeTInt value;
+            TInt err = iTvAccCon.GetValueL(genId, nameRecord, value);
+            if (err ==KErrNone)
                 {
-                GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL TV is connected");
-                iTvOutConnectionState = ETrue;
+                if (value.iValue == EAccVideoOutCVideo)
+                    {
+                    GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL Tv is connected");
+                    iIsTvOutConnected = ETrue;
+                    }
                 }
             }
         }
     CleanupStack::PopAndDestroy(nameArray);
 
     GLX_LOG_INFO2("CGlxTvConnectionMonitor::UpdateConnectionStatusL CurrentTvState = %d , CurrentHDMIState = %d",
-            iTvOutConnectionState,iHDMIConnectionState);
+            iIsTvOutConnected,iIsHDMIConnected);
     }