diff -r 191387a8b767 -r a60acebbbd9d photosgallery/viewframework/tvout/src/glxtvconnectionmonitor.cpp --- a/photosgallery/viewframework/tvout/src/glxtvconnectionmonitor.cpp Tue Apr 27 16:37:53 2010 +0300 +++ b/photosgallery/viewframework/tvout/src/glxtvconnectionmonitor.cpp Tue May 11 16:13:40 2010 +0300 @@ -29,6 +29,7 @@ // INTERNAL INCLUDES #include +#include #include #include "glxtv.h" #include @@ -40,7 +41,7 @@ CGlxTvConnectionMonitor* CGlxTvConnectionMonitor::NewL( MGlxTvConnectionObserver& aConnectionObserver ) { - GLX_LOG_INFO("CGlxTvConnectionMonitor::NewL"); + TRACER("CGlxTvConnectionMonitor::NewL"); CGlxTvConnectionMonitor* self = new (ELeave) CGlxTvConnectionMonitor( aConnectionObserver ); CleanupStack::PushL( self ); @@ -56,7 +57,7 @@ // CGlxTvConnectionMonitor::~CGlxTvConnectionMonitor() { - GLX_LOG_INFO("~CGlxTvConnectionMonitor"); + TRACER("~CGlxTvConnectionMonitor"); Cancel(); iTvAccCon.CloseSubSession(); iTvAccServer.Disconnect(); @@ -67,14 +68,15 @@ // Default C++ constructor //----------------------------------------------------------------------------- // -CGlxTvConnectionMonitor::CGlxTvConnectionMonitor - ( MGlxTvConnectionObserver& aConnectionObserver ) - :CActive(EPriorityStandard), - iConnectionObserver ( aConnectionObserver ) - { - GLX_LOG_INFO("CGlxTvConnectionMonitor"); - CActiveScheduler::Add( this ); - } +CGlxTvConnectionMonitor::CGlxTvConnectionMonitor( + MGlxTvConnectionObserver& aConnectionObserver) : + CActive(EPriorityStandard), iConnectionObserver(aConnectionObserver), + iTvOutConnectionState(EFalse), iHDMIConnectionState(EFalse) + + { + TRACER("CGlxTvConnectionMonitor"); + CActiveScheduler::Add(this); + } //----------------------------------------------------------------------------- @@ -83,19 +85,11 @@ // void CGlxTvConnectionMonitor::ConstructL() { - GLX_LOG_INFO("CGlxTvConnectionMonitor::ConstructL"); + TRACER("CGlxTvConnectionMonitor::ConstructL"); 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); - } + + UpdateConnectionStatusL(); IssueRequest(); } @@ -106,7 +100,7 @@ // void CGlxTvConnectionMonitor::RunL() { - GLX_LOG_INFO("CGlxTvConnectionMonitor::RunL"); + TRACER("CGlxTvConnectionMonitor::RunL"); // Check for errors User::LeaveIfError( iStatus.Int() ); // Notify observers @@ -123,7 +117,7 @@ // void CGlxTvConnectionMonitor::DoCancel() { - GLX_LOG_INFO("CGlxTvConnectionMonitor::DoCancel"); + TRACER("CGlxTvConnectionMonitor::DoCancel"); iTvAccCon.CancelGetAccessoryConnectionStatus(); iTvAccCon.CancelNotifyAccessoryConnectionStatusChanged(); } @@ -148,7 +142,7 @@ // TBool CGlxTvConnectionMonitor::IsConnected() const { - GLX_LOG_INFO("CGlxTvConnectionMonitor::IsConnected"); + TRACER("CGlxTvConnectionMonitor::IsConnected"); GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsConnected iTvOutConnectionState=%d",iTvOutConnectionState); return iTvOutConnectionState; } @@ -160,7 +154,7 @@ // TBool CGlxTvConnectionMonitor::IsHDMIConnected() const { - GLX_LOG_INFO("CGlxTvConnectionMonitor::IsHDMIConnected"); + TRACER("CGlxTvConnectionMonitor::IsHDMIConnected"); GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsHDMIConnected iHDMIConnectionState=%d",iHDMIConnectionState); return iHDMIConnectionState; } @@ -171,7 +165,7 @@ // void CGlxTvConnectionMonitor::IssueRequest() { - GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueRequest"); + TRACER("CGlxTvConnectionMonitor::IssueRequest"); if (!IsActive()) // required for testing { iTvAccCon.NotifyAccessoryConnectionStatusChanged(iStatus,iCurrentAccArray); @@ -184,65 +178,91 @@ //----------------------------------------------------------------------------- // void CGlxTvConnectionMonitor::IssueNotificationL() - { - GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL"); + { + TRACER("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; - } - } + // Update the connection status + UpdateConnectionStatusL(); - } - CleanupStack::PopAndDestroy(nameArray); - + // 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 -" - " TvConnectionStatusChanged"); - GLX_LOG_INFO2("CurrentTvState = %d , CurrentHDMIState = %d", - iTvOutConnectionState,iHDMIConnectionState); + GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL - Connection Altered"); iConnectionObserver.HandleTvConnectionStatusChangedL(); } } +//----------------------------------------------------------------------------- +// UpdateConnectionStatusL() +//----------------------------------------------------------------------------- +// +void CGlxTvConnectionMonitor::UpdateConnectionStatusL() + { + TRACER("CGlxTvConnectionMonitor::UpdateConnectionStatusL()"); + + GLX_LOG_INFO2("CGlxTvConnectionMonitor::UpdateConnectionStatusL previousTvState = %d , previousHDMIState = %d", + iTvOutConnectionState,iHDMIConnectionState); + + // reset the states + iHDMIConnectionState = EFalse; + iTvOutConnectionState = 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++) + { + 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); + GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL Video Accessory Supported"); + TAccPolNameRecord nameRecord; + nameRecord.SetNameL(KAccVideoOut); + + if (genId.DeviceTypeCaps( KDTAVDevice ) && + genId.PhysicalConnectionCaps( KPCHDMI )) + { + TAccValueTypeTInt value; + TInt err = iTvAccCon.GetValueL(genId, nameRecord, value); + if (err ==KErrNone) + { + if (value.iValue == EAccVideoOutEHDMI) + { + GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL HDMI is connected"); + iHDMIConnectionState = ETrue; + } + } + } + else if (genId.DeviceTypeCaps( KDTAVDevice ) && + genId.PhysicalConnectionCaps( KPCWired )) + { + TAccValueTypeTInt value; + TInt err = iTvAccCon.GetValueL(genId, nameRecord, value); + if (err ==KErrNone) + { + if (value.iValue == EAccVideoOutCVideo) + { + GLX_LOG_INFO("CGlxTvConnectionMonitor::UpdateConnectionStatusL Tv is connected"); + iTvOutConnectionState = ETrue; + } + } + } + } + CleanupStack::PopAndDestroy(nameArray); + + GLX_LOG_INFO2("CGlxTvConnectionMonitor::UpdateConnectionStatusL CurrentTvState = %d , CurrentHDMIState = %d", + iTvOutConnectionState,iHDMIConnectionState); + }