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 |
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 |