photosgallery/viewframework/tvout/src/glxtvconnectionmonitor.cpp
branchRCL_3
changeset 25 191387a8b767
parent 9 6b87b143d312
child 30 a60acebbbd9d
--- a/photosgallery/viewframework/tvout/src/glxtvconnectionmonitor.cpp	Wed Apr 14 15:57:24 2010 +0300
+++ b/photosgallery/viewframework/tvout/src/glxtvconnectionmonitor.cpp	Tue Apr 27 16:37:53 2010 +0300
@@ -31,8 +31,8 @@
 #include <glxlog.h>
 #include <glxpanic.h>
 #include "glxtv.h"
-
-
+#include <AccPolGenericIdDefinitions.h>
+#include <AccPolSubblockNameArray.h>
 //-----------------------------------------------------------------------------
 // Return new object
 //-----------------------------------------------------------------------------
@@ -58,6 +58,7 @@
     {
     GLX_LOG_INFO("~CGlxTvConnectionMonitor");
     Cancel();
+    iTvAccCon.CloseSubSession();
     iTvAccServer.Disconnect();
     }
 
@@ -83,13 +84,19 @@
 void CGlxTvConnectionMonitor::ConstructL()
     {
     GLX_LOG_INFO("CGlxTvConnectionMonitor::ConstructL");
-    User::LeaveIfError( iTvAccServer.Connect() );
-    User::LeaveIfError( iTvAccMode.CreateSubSession( iTvAccServer ) );
-    User::LeaveIfError( iTvAccMode.GetAccessoryMode( iCurrentAccMode ) );
-    iTvOutConnectionState = ( iCurrentAccMode.iAccessoryMode == EAccModeTVOut);
-    iHDMIConnectionState = ( iCurrentAccMode.iAccessoryMode == EAccModeHDMI);
-    
-    IssueRequest();  
+    User::LeaveIfError(iTvAccServer.Connect());
+	User::LeaveIfError(iTvAccCon.CreateSubSession(iTvAccServer));
+	User::LeaveIfError(iTvAccCon.GetAccessoryConnectionStatus(iCurrentAccArray));
+	for (int i = 0; i < iCurrentAccArray.Count(); i++)
+		{
+		iTvOutConnectionState
+				= (iCurrentAccArray.GetGenericIDL(i).PhysicalConnectionCaps()
+						== KPCWired);
+		iHDMIConnectionState
+				= (iCurrentAccArray.GetGenericIDL(i).PhysicalConnectionCaps()
+						== KPCHDMI);
+		}
+	IssueRequest();  
     }
 
 //-----------------------------------------------------------------------------
@@ -117,7 +124,8 @@
 void CGlxTvConnectionMonitor::DoCancel()
     {
     GLX_LOG_INFO("CGlxTvConnectionMonitor::DoCancel");
-    iTvAccMode.CancelNotifyAccessoryModeChanged();
+    iTvAccCon.CancelGetAccessoryConnectionStatus();
+    iTvAccCon.CancelNotifyAccessoryConnectionStatusChanged();
     }
 
 
@@ -141,6 +149,7 @@
 TBool CGlxTvConnectionMonitor::IsConnected() const
     {
     GLX_LOG_INFO("CGlxTvConnectionMonitor::IsConnected");
+    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsConnected iTvOutConnectionState=%d",iTvOutConnectionState);
     return iTvOutConnectionState;
     }
 
@@ -152,6 +161,7 @@
 TBool CGlxTvConnectionMonitor::IsHDMIConnected() const
     {
     GLX_LOG_INFO("CGlxTvConnectionMonitor::IsHDMIConnected");
+    GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsHDMIConnected iHDMIConnectionState=%d",iHDMIConnectionState);
     return iHDMIConnectionState;
     }
 
@@ -164,35 +174,75 @@
     GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueRequest");
     if (!IsActive()) // required for testing
         {
-        iTvAccMode.NotifyAccessoryModeChanged( iStatus, iCurrentAccMode ); 
+        iTvAccCon.NotifyAccessoryConnectionStatusChanged(iStatus,iCurrentAccArray);
         SetActive(); 
         }
     }
 
-
 //-----------------------------------------------------------------------------
 // Sends notification to observers if TV Out is connected
 //-----------------------------------------------------------------------------
 //
 void CGlxTvConnectionMonitor::IssueNotificationL()
     {
-    GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL");
-    TBool previousTvState = iTvOutConnectionState;
-    TBool previousHDMIState = iHDMIConnectionState;
-    GLX_LOG_INFO2("previousTvState = %d , previousHDMIState = %d",
-            previousTvState,previousHDMIState);
-    iTvOutConnectionState = ( iCurrentAccMode.iAccessoryMode == EAccModeTVOut);
-    iHDMIConnectionState = ( iCurrentAccMode.iAccessoryMode == EAccModeHDMI);
-    // Call Statuschnage only if actually TvState or HDMIState has changed.
-    if ( previousTvState!= iTvOutConnectionState ||
-            previousHDMIState != iHDMIConnectionState)
-        {
-        GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL -"
-                " TvConnectionStatusChanged");
-        iConnectionObserver.HandleTvConnectionStatusChangedL();
-        }
-    }
+	GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL");
+	TBool previousTvState = iTvOutConnectionState;
+	TBool previousHDMIState = iHDMIConnectionState;
+	GLX_LOG_INFO2("previousTvState = %d , previousHDMIState = %d",
+			previousTvState,previousHDMIState);
+
+	//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
+	//
+	iTvOutConnectionState = EFalse;
+	iHDMIConnectionState = EFalse;
+	const TInt count = iCurrentAccArray.Count();
+	for (TInt index = 0; index < count; index++)
+		{
+		TAccPolGenericID genId = iCurrentAccArray.GetGenericIDL(index);
+		//  Get all supported capabilities for this connected accessory.
+		iTvAccCon.GetSubblockNameArrayL(genId, *nameArray);
+		//  Check if this connected accessory supports TV-Out capabality.
+		if (nameArray->HasName(KAccVideoOut))
+			{
+			GLX_LOG_INFO("TV-Out Capabilities Exist");
+			TAccPolNameRecord nameRecord;
+			nameRecord.SetNameL(KAccVideoOut);
+			TAccValueTypeTInt value;
+			iTvAccCon.GetValueL(genId, nameRecord, value);
+			if (value.iValue == EAccVideoOutEHDMI)
+				{
+				GLX_LOG_INFO("HDMI is connected Capabilities Exist");
+				iHDMIConnectionState = ETrue;
+				break;
+				}
+			else if (value.iValue == EAccVideoOutCVideo)
+				{
+				GLX_LOG_INFO("TV is connected Capabilities Exist");
+				iTvOutConnectionState = ETrue;
+				break;
+				}
+			}
 
+		}
+	CleanupStack::PopAndDestroy(nameArray);
 
+	if (previousTvState != iTvOutConnectionState || previousHDMIState
+			!= iHDMIConnectionState)
+		{
+		GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL -"
+				" TvConnectionStatusChanged");
+		GLX_LOG_INFO2("CurrentTvState = %d , CurrentHDMIState = %d",
+				iTvOutConnectionState,iHDMIConnectionState);
+		iConnectionObserver.HandleTvConnectionStatusChangedL();
+		}
+	}
+