photosgallery/viewframework/tvout/src/glxtvconnectionmonitor.cpp
branchRCL_3
changeset 25 191387a8b767
parent 9 6b87b143d312
child 30 a60acebbbd9d
equal deleted inserted replaced
22:2dac0fdba72b 25:191387a8b767
    29 //  INTERNAL INCLUDES
    29 //  INTERNAL INCLUDES
    30 
    30 
    31 #include <glxlog.h>
    31 #include <glxlog.h>
    32 #include <glxpanic.h>
    32 #include <glxpanic.h>
    33 #include "glxtv.h"
    33 #include "glxtv.h"
    34 
    34 #include <AccPolGenericIdDefinitions.h>
    35 
    35 #include <AccPolSubblockNameArray.h>
    36 //-----------------------------------------------------------------------------
    36 //-----------------------------------------------------------------------------
    37 // Return new object
    37 // Return new object
    38 //-----------------------------------------------------------------------------
    38 //-----------------------------------------------------------------------------
    39 //
    39 //
    40 CGlxTvConnectionMonitor* CGlxTvConnectionMonitor::NewL(
    40 CGlxTvConnectionMonitor* CGlxTvConnectionMonitor::NewL(
    56 //
    56 //
    57 CGlxTvConnectionMonitor::~CGlxTvConnectionMonitor()
    57 CGlxTvConnectionMonitor::~CGlxTvConnectionMonitor()
    58     {
    58     {
    59     GLX_LOG_INFO("~CGlxTvConnectionMonitor");
    59     GLX_LOG_INFO("~CGlxTvConnectionMonitor");
    60     Cancel();
    60     Cancel();
       
    61     iTvAccCon.CloseSubSession();
    61     iTvAccServer.Disconnect();
    62     iTvAccServer.Disconnect();
    62     }
    63     }
    63 
    64 
    64 
    65 
    65 //-----------------------------------------------------------------------------
    66 //-----------------------------------------------------------------------------
    81 //-----------------------------------------------------------------------------
    82 //-----------------------------------------------------------------------------
    82 //
    83 //
    83 void CGlxTvConnectionMonitor::ConstructL()
    84 void CGlxTvConnectionMonitor::ConstructL()
    84     {
    85     {
    85     GLX_LOG_INFO("CGlxTvConnectionMonitor::ConstructL");
    86     GLX_LOG_INFO("CGlxTvConnectionMonitor::ConstructL");
    86     User::LeaveIfError( iTvAccServer.Connect() );
    87     User::LeaveIfError(iTvAccServer.Connect());
    87     User::LeaveIfError( iTvAccMode.CreateSubSession( iTvAccServer ) );
    88 	User::LeaveIfError(iTvAccCon.CreateSubSession(iTvAccServer));
    88     User::LeaveIfError( iTvAccMode.GetAccessoryMode( iCurrentAccMode ) );
    89 	User::LeaveIfError(iTvAccCon.GetAccessoryConnectionStatus(iCurrentAccArray));
    89     iTvOutConnectionState = ( iCurrentAccMode.iAccessoryMode == EAccModeTVOut);
    90 	for (int i = 0; i < iCurrentAccArray.Count(); i++)
    90     iHDMIConnectionState = ( iCurrentAccMode.iAccessoryMode == EAccModeHDMI);
    91 		{
    91     
    92 		iTvOutConnectionState
    92     IssueRequest();  
    93 				= (iCurrentAccArray.GetGenericIDL(i).PhysicalConnectionCaps()
       
    94 						== KPCWired);
       
    95 		iHDMIConnectionState
       
    96 				= (iCurrentAccArray.GetGenericIDL(i).PhysicalConnectionCaps()
       
    97 						== KPCHDMI);
       
    98 		}
       
    99 	IssueRequest();  
    93     }
   100     }
    94 
   101 
    95 //-----------------------------------------------------------------------------
   102 //-----------------------------------------------------------------------------
    96 // From class CActive.
   103 // From class CActive.
    97 // Receive notification of change in the connection state
   104 // Receive notification of change in the connection state
   115 //-----------------------------------------------------------------------------
   122 //-----------------------------------------------------------------------------
   116 //
   123 //
   117 void CGlxTvConnectionMonitor::DoCancel()
   124 void CGlxTvConnectionMonitor::DoCancel()
   118     {
   125     {
   119     GLX_LOG_INFO("CGlxTvConnectionMonitor::DoCancel");
   126     GLX_LOG_INFO("CGlxTvConnectionMonitor::DoCancel");
   120     iTvAccMode.CancelNotifyAccessoryModeChanged();
   127     iTvAccCon.CancelGetAccessoryConnectionStatus();
       
   128     iTvAccCon.CancelNotifyAccessoryConnectionStatusChanged();
   121     }
   129     }
   122 
   130 
   123 
   131 
   124 
   132 
   125 //-----------------------------------------------------------------------------
   133 //-----------------------------------------------------------------------------
   139 //-----------------------------------------------------------------------------
   147 //-----------------------------------------------------------------------------
   140 //
   148 //
   141 TBool CGlxTvConnectionMonitor::IsConnected() const
   149 TBool CGlxTvConnectionMonitor::IsConnected() const
   142     {
   150     {
   143     GLX_LOG_INFO("CGlxTvConnectionMonitor::IsConnected");
   151     GLX_LOG_INFO("CGlxTvConnectionMonitor::IsConnected");
       
   152     GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsConnected iTvOutConnectionState=%d",iTvOutConnectionState);
   144     return iTvOutConnectionState;
   153     return iTvOutConnectionState;
   145     }
   154     }
   146 
   155 
   147 //-----------------------------------------------------------------------------
   156 //-----------------------------------------------------------------------------
   148 // Is the TV out cable connected
   157 // Is the TV out cable connected
   150 //-----------------------------------------------------------------------------
   159 //-----------------------------------------------------------------------------
   151 //
   160 //
   152 TBool CGlxTvConnectionMonitor::IsHDMIConnected() const
   161 TBool CGlxTvConnectionMonitor::IsHDMIConnected() const
   153     {
   162     {
   154     GLX_LOG_INFO("CGlxTvConnectionMonitor::IsHDMIConnected");
   163     GLX_LOG_INFO("CGlxTvConnectionMonitor::IsHDMIConnected");
       
   164     GLX_LOG_INFO1("CGlxTvConnectionMonitor::IsHDMIConnected iHDMIConnectionState=%d",iHDMIConnectionState);
   155     return iHDMIConnectionState;
   165     return iHDMIConnectionState;
   156     }
   166     }
   157 
   167 
   158 //-----------------------------------------------------------------------------
   168 //-----------------------------------------------------------------------------
   159 // Request accessory server events
   169 // Request accessory server events
   162 void CGlxTvConnectionMonitor::IssueRequest()
   172 void CGlxTvConnectionMonitor::IssueRequest()
   163     {
   173     {
   164     GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueRequest");
   174     GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueRequest");
   165     if (!IsActive()) // required for testing
   175     if (!IsActive()) // required for testing
   166         {
   176         {
   167         iTvAccMode.NotifyAccessoryModeChanged( iStatus, iCurrentAccMode ); 
   177         iTvAccCon.NotifyAccessoryConnectionStatusChanged(iStatus,iCurrentAccArray);
   168         SetActive(); 
   178         SetActive(); 
   169         }
   179         }
   170     }
   180     }
   171 
   181 
   172 
       
   173 //-----------------------------------------------------------------------------
   182 //-----------------------------------------------------------------------------
   174 // Sends notification to observers if TV Out is connected
   183 // Sends notification to observers if TV Out is connected
   175 //-----------------------------------------------------------------------------
   184 //-----------------------------------------------------------------------------
   176 //
   185 //
   177 void CGlxTvConnectionMonitor::IssueNotificationL()
   186 void CGlxTvConnectionMonitor::IssueNotificationL()
   178     {
   187     {
   179     GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL");
   188 	GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL");
   180     TBool previousTvState = iTvOutConnectionState;
   189 	TBool previousTvState = iTvOutConnectionState;
   181     TBool previousHDMIState = iHDMIConnectionState;
   190 	TBool previousHDMIState = iHDMIConnectionState;
   182     GLX_LOG_INFO2("previousTvState = %d , previousHDMIState = %d",
   191 	GLX_LOG_INFO2("previousTvState = %d , previousHDMIState = %d",
   183             previousTvState,previousHDMIState);
   192 			previousTvState,previousHDMIState);
   184     iTvOutConnectionState = ( iCurrentAccMode.iAccessoryMode == EAccModeTVOut);
   193 
   185     iHDMIConnectionState = ( iCurrentAccMode.iAccessoryMode == EAccModeHDMI);
   194 	//gets the TV status in to the iCurrentAccArray and haves the Latest Accesory in 0-index
   186     // Call Statuschnage only if actually TvState or HDMIState has changed.
   195 	User::LeaveIfError(iTvAccCon.GetAccessoryConnectionStatus(iCurrentAccArray));
   187     if ( previousTvState!= iTvOutConnectionState ||
   196 
   188             previousHDMIState != iHDMIConnectionState)
   197 	CAccPolSubblockNameArray* nameArray = CAccPolSubblockNameArray::NewL();
   189         {
   198 	CleanupStack::PushL(nameArray);
   190         GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL -"
   199 
   191                 " TvConnectionStatusChanged");
   200 	//
   192         iConnectionObserver.HandleTvConnectionStatusChangedL();
   201 	//  Get the number of currently connected accessories
   193         }
   202 	//  Loop through each connected accessory looking for
   194     }
   203 	//  the desired capabilities
   195 
   204 	//
   196 
   205 	iTvOutConnectionState = EFalse;
   197 
   206 	iHDMIConnectionState = EFalse;
   198 
   207 	const TInt count = iCurrentAccArray.Count();
       
   208 	for (TInt index = 0; index < count; index++)
       
   209 		{
       
   210 		TAccPolGenericID genId = iCurrentAccArray.GetGenericIDL(index);
       
   211 		//  Get all supported capabilities for this connected accessory.
       
   212 		iTvAccCon.GetSubblockNameArrayL(genId, *nameArray);
       
   213 		//  Check if this connected accessory supports TV-Out capabality.
       
   214 		if (nameArray->HasName(KAccVideoOut))
       
   215 			{
       
   216 			GLX_LOG_INFO("TV-Out Capabilities Exist");
       
   217 			TAccPolNameRecord nameRecord;
       
   218 			nameRecord.SetNameL(KAccVideoOut);
       
   219 			TAccValueTypeTInt value;
       
   220 			iTvAccCon.GetValueL(genId, nameRecord, value);
       
   221 			if (value.iValue == EAccVideoOutEHDMI)
       
   222 				{
       
   223 				GLX_LOG_INFO("HDMI is connected Capabilities Exist");
       
   224 				iHDMIConnectionState = ETrue;
       
   225 				break;
       
   226 				}
       
   227 			else if (value.iValue == EAccVideoOutCVideo)
       
   228 				{
       
   229 				GLX_LOG_INFO("TV is connected Capabilities Exist");
       
   230 				iTvOutConnectionState = ETrue;
       
   231 				break;
       
   232 				}
       
   233 			}
       
   234 
       
   235 		}
       
   236 	CleanupStack::PopAndDestroy(nameArray);
       
   237 
       
   238 	if (previousTvState != iTvOutConnectionState || previousHDMIState
       
   239 			!= iHDMIConnectionState)
       
   240 		{
       
   241 		GLX_LOG_INFO("CGlxTvConnectionMonitor::IssueNotificationL -"
       
   242 				" TvConnectionStatusChanged");
       
   243 		GLX_LOG_INFO2("CurrentTvState = %d , CurrentHDMIState = %d",
       
   244 				iTvOutConnectionState,iHDMIConnectionState);
       
   245 		iConnectionObserver.HandleTvConnectionStatusChangedL();
       
   246 		}
       
   247 	}
       
   248