int CSLCommandHandler::HandleGiveDeckStatus(const cec_command &command) { if (!m_processor->CECInitialised() || !m_processor->IsHandledByLibCEC(command.destination)) return CEC_ABORT_REASON_NOT_IN_CORRECT_MODE_TO_RESPOND; CCECPlaybackDevice *device = CCECBusDevice::AsPlaybackDevice(GetDevice(command.destination)); if (!device || command.parameters.size == 0) return CEC_ABORT_REASON_INVALID_OPERAND; device->SetDeckStatus(CEC_DECK_INFO_OTHER_STATUS_LG); if (command.parameters[0] == CEC_STATUS_REQUEST_ON) { device->TransmitDeckStatus(command.initiator, true); if (!ActiveSourceSent()) ActivateSource(); return COMMAND_HANDLED; } else if (command.parameters[0] == CEC_STATUS_REQUEST_ONCE) { device->TransmitDeckStatus(command.initiator, true); return COMMAND_HANDLED; } return CCECCommandHandler::HandleGiveDeckStatus(command); }
bool CCECClient::SendSetDeckInfo(const cec_deck_info info, bool bSendUpdate /* = true */) { // find a playback device that we control CCECPlaybackDevice *device = GetPlaybackDevice(); if (device) { // and set the deck status if there is a match device->SetDeckStatus(info); if (bSendUpdate) return device->AsPlaybackDevice()->TransmitDeckStatus(CECDEVICE_TV, false); return true; } // no match return false; }
void CSLCommandHandler::VendorPreActivateSourceHook(void) { CCECPlaybackDevice *device = m_busDevice->AsPlaybackDevice(); if (device) device->SetDeckStatus(!device->IsActiveSource() ? CEC_DECK_INFO_OTHER_STATUS : CEC_DECK_INFO_OTHER_STATUS_LG); }