+ return bReturn;
+
+ cec_logical_address addr = m_logicalAddresses.primary;
+
+ if (type != CEC_DEVICE_TYPE_RESERVED)
+ {
+ for (uint8_t iPtr = 0; iPtr < 16; iPtr++)
+ {
+ if (m_logicalAddresses[iPtr] && m_busDevices[iPtr]->m_type == type)
+ {
+ addr = (cec_logical_address) iPtr;
+ break;
+ }
+ }
+ }
+
+ return SetStreamPath(m_busDevices[addr]->GetPhysicalAddress(false)) &&
+ m_busDevices[addr]->TransmitActiveSource();
+}
+
+bool CCECProcessor::SetActiveSource(cec_logical_address iAddress)
+{
+ return SetStreamPath(m_busDevices[iAddress]->GetPhysicalAddress(false));
+}
+
+bool CCECProcessor::SetActiveView(void)
+{
+ return SetActiveSource(m_types.IsEmpty() ? CEC_DEVICE_TYPE_RESERVED : m_types[0]);
+}
+
+bool CCECProcessor::SetDeckControlMode(cec_deck_control_mode mode, bool bSendUpdate /* = true */)
+{
+ bool bReturn(false);
+
+ CCECBusDevice *device = GetDeviceByType(CEC_DEVICE_TYPE_PLAYBACK_DEVICE);
+ if (device)
+ {
+ ((CCECPlaybackDevice *) device)->SetDeckControlMode(mode);
+ if (bSendUpdate)
+ ((CCECPlaybackDevice *) device)->TransmitDeckStatus(CECDEVICE_TV);
+ bReturn = true;
+ }
+
+ return bReturn;
+}
+
+bool CCECProcessor::SetDeckInfo(cec_deck_info info, bool bSendUpdate /* = true */)
+{
+ bool bReturn(false);
+
+ CCECBusDevice *device = GetDeviceByType(CEC_DEVICE_TYPE_PLAYBACK_DEVICE);
+ if (device)
+ {
+ ((CCECPlaybackDevice *) device)->SetDeckStatus(info);
+ if (bSendUpdate)
+ ((CCECPlaybackDevice *) device)->TransmitDeckStatus(CECDEVICE_TV);
+ bReturn = true;
+ }
+
+ return bReturn;
+}
+
+bool CCECProcessor::SetHDMIPort(uint8_t iPort, bool bForce /* = false */)
+{
+ bool bReturn(false);
+
+ CStdString strLog;
+ strLog.Format("setting HDMI port to %d", iPort);
+ AddLog(CEC_LOG_DEBUG, strLog);
+
+ m_iHDMIPort = iPort;
+ if (!m_bStarted && !bForce)
+ return true;
+
+ uint16_t iPhysicalAddress(0);
+ int iPos = 3;
+ while(!bReturn && iPos >= 0)
+ {
+ iPhysicalAddress += ((uint16_t)iPort * (0x1 << iPos*4));
+ strLog.Format("checking physical address %4x", iPhysicalAddress);
+ AddLog(CEC_LOG_DEBUG, strLog);
+ if (CheckPhysicalAddress(iPhysicalAddress))
+ {
+ strLog.Format("physical address %4x is in use", iPhysicalAddress);
+ AddLog(CEC_LOG_DEBUG, strLog);
+ iPos--;
+ }
+ else
+ {
+ SetPhysicalAddress(iPhysicalAddress);
+ bReturn = true;
+ }
+ }
+
+ return bReturn;
+}