diff -r 2dac0fdba72b -r 191387a8b767 photosgallery/viewframework/tvout/src/glxtvconnectionmonitor.cpp --- 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 #include #include "glxtv.h" - - +#include +#include //----------------------------------------------------------------------------- // 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(); + } + } +