void CCECBusDevice::SetStreamPath(uint16_t iNewAddress, uint16_t iOldAddress /* = CEC_INVALID_PHYSICAL_ADDRESS */) { if (iNewAddress != CEC_INVALID_PHYSICAL_ADDRESS) SetPowerStatus(CEC_POWER_STATUS_ON); CLockObject lock(m_mutex); if (iNewAddress != m_iStreamPath) { LIB_CEC->AddLog(CEC_LOG_DEBUG, "%s (%X): stream path changed from %04x to %04x", GetLogicalAddressName(), m_iLogicalAddress, iOldAddress == 0 ? m_iStreamPath : iOldAddress, iNewAddress); m_iStreamPath = iNewAddress; } if (!LIB_CEC->IsValidPhysicalAddress(iNewAddress)) return; CCECBusDevice *device = m_processor->GetDeviceByPhysicalAddress(iNewAddress); if (device) { // if a device is found with the new physical address, mark it as active, which will automatically mark all other devices as inactive device->MarkAsActiveSource(); // respond with an active source message if this device is handled by libCEC if (device->IsHandledByLibCEC()) device->TransmitActiveSource(true); } else { // try to find the device with the old address, and mark it as inactive when found device = m_processor->GetDeviceByPhysicalAddress(iOldAddress); if (device) device->MarkAsInactiveSource(); } }
void CSLCommandHandler::HandleVendorCommand01(const cec_command &command) { m_processor->GetPrimaryDevice()->SetPowerStatus(CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON); TransmitVendorCommand0205(command.destination, command.initiator); CCECBusDevice* dev = m_processor->GetDevice(command.destination); if (dev && dev->IsHandledByLibCEC() && dev->IsActiveSource()) dev->TransmitActiveSource(false); }
bool CVLCommandHandler::HandleSetStreamPath(const cec_command &command) { if (command.parameters.size >= 2) { int streamaddr = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]); CStdString strLog; strLog.Format(">> %i requests stream path from physical address %04x", command.initiator, streamaddr); m_busDevice->AddLog(CEC_LOG_DEBUG, strLog.c_str()); if (streamaddr == m_busDevice->GetMyPhysicalAddress()) { CCECBusDevice *device = GetDeviceByPhysicalAddress(streamaddr); if (device) { return device->TransmitActiveSource() && device->TransmitActiveView() && device->TransmitMenuState(command.initiator); } return false; } } return true; }