bool CPeripherals::OnAction(const CAction &action) { if (action.GetID() == ACTION_MUTE) { return ToggleMute(); } if (SupportsCEC() && action.GetAmount() && (action.GetID() == ACTION_VOLUME_UP || action.GetID() == ACTION_VOLUME_DOWN)) { std::vector<CPeripheral *> peripherals; if (GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (auto& peripheral : peripherals) { CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral); if (cecDevice && cecDevice->HasAudioControl()) { if (action.GetID() == ACTION_VOLUME_UP) cecDevice->VolumeUp(); else cecDevice->VolumeDown(); return true; } } } } return false; }
bool CPeripherals::OnAction(const CAction &action) { if (action.GetID() == ACTION_MUTE) { return ToggleMute(); } if (SupportsCEC() && action.GetAmount() && (action.GetID() == ACTION_VOLUME_UP || action.GetID() == ACTION_VOLUME_DOWN)) { vector<CPeripheral *> peripherals; if (GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++) { CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr); if (cecDevice && cecDevice->HasConnectedAudioSystem()) { if (action.GetID() == ACTION_VOLUME_UP) cecDevice->ScheduleVolumeUp(); else cecDevice->ScheduleVolumeDown(); return true; } } } } return false; }
int CPeripheralCecAdapter::CecConfiguration(void *cbParam, const libcec_configuration &config) { CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam; if (!adapter) return 0; CSingleLock lock(adapter->m_critSection); adapter->SetConfigurationFromLibCEC(config); return 1; }
bool CPeripherals::IsMuted(void) { vector<CPeripheral *> peripherals; if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++) { CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr); if (cecDevice && cecDevice->IsMuted()) return true; } } return false; }
bool CPeripherals::IsMuted() { std::vector<CPeripheral *> peripherals; if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (const auto& peripheral : peripherals) { CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral); if (cecDevice && cecDevice->IsMuted()) return true; } } return false; }
bool CPeripherals::ToggleMute(void) { vector<CPeripheral *> peripherals; if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++) { CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr); if (cecDevice && cecDevice->HasConnectedAudioSystem()) { cecDevice->ScheduleMute(); return true; } } } return false; }
bool CPeripherals::ToggleMute() { std::vector<CPeripheral *> peripherals; if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (auto& peripheral : peripherals) { CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral); if (cecDevice && cecDevice->HasAudioControl()) { cecDevice->ToggleMute(); return true; } } } return false; }
bool CPeripherals::ToggleDeviceState(CecStateChange mode /*= STATE_SWITCH_TOGGLE */, unsigned int iPeripheral /*= 0 */) { bool ret(false); vector<CPeripheral *> peripherals; if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (unsigned int iPeripheralPtr = iPeripheral; iPeripheralPtr < peripherals.size(); iPeripheralPtr++) { CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr); if (cecDevice) ret = cecDevice->ToggleDeviceState(mode); if (iPeripheral) break; } } return ret; }
bool CPeripherals::ToggleDeviceState(CecStateChange mode /*= STATE_SWITCH_TOGGLE */, unsigned int iPeripheral /*= 0 */) { bool ret(false); std::vector<CPeripheral *> peripherals; if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (auto& peripheral : peripherals) { CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral); if (cecDevice) ret = cecDevice->ToggleDeviceState(mode); if (iPeripheral) break; } } return ret; }
bool CPeripherals::GetNextKeypress(float frameTime, CKey &key) { vector<CPeripheral *> peripherals; if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (unsigned int iPeripheralPtr = 0; iPeripheralPtr < peripherals.size(); iPeripheralPtr++) { CPeripheralCecAdapter *cecDevice = (CPeripheralCecAdapter *) peripherals.at(iPeripheralPtr); if (cecDevice && cecDevice->GetButton()) { CKey newKey(cecDevice->GetButton(), cecDevice->GetHoldTime()); cecDevice->ResetButton(); key = newKey; return true; } } } return false; }
bool CPeripherals::GetNextKeypress(float frameTime, CKey &key) { std::vector<CPeripheral *> peripherals; if (SupportsCEC() && GetPeripheralsWithFeature(peripherals, FEATURE_CEC)) { for (auto& peripheral : peripherals) { CPeripheralCecAdapter *cecDevice = reinterpret_cast<CPeripheralCecAdapter*>(peripheral); if (cecDevice && cecDevice->GetButton()) { CKey newKey(cecDevice->GetButton(), cecDevice->GetHoldTime()); cecDevice->ResetButton(); key = newKey; return true; } } } return false; }
int CPeripheralCecAdapter::CecCommand(void *cbParam, const cec_command &command) { CPeripheralCecAdapter *adapter = (CPeripheralCecAdapter *)cbParam; if (!adapter) return 0; if (adapter->m_bIsReady) { CLog::Log(LOGDEBUG, "%s - processing command: initiator=%1x destination=%1x opcode=%02x", __FUNCTION__, command.initiator, command.destination, command.opcode); switch (command.opcode) { case CEC_OPCODE_STANDBY: /* a device was put in standby mode */ CLog::Log(LOGDEBUG, "%s - device %1x was put in standby mode", __FUNCTION__, command.initiator); if (command.initiator == CECDEVICE_TV && adapter->m_configuration.bPowerOffOnStandby == 1 && (!adapter->m_screensaverLastActivated.IsValid() || CDateTime::GetCurrentDateTime() - adapter->m_screensaverLastActivated > CDateTimeSpan(0, 0, 0, SCREENSAVER_TIMEOUT))) { adapter->m_bStarted = false; g_application.getApplicationMessenger().Suspend(); } break; case CEC_OPCODE_SET_MENU_LANGUAGE: if (adapter->m_configuration.bUseTVMenuLanguage == 1 && command.initiator == CECDEVICE_TV && command.parameters.size == 3) { char strNewLanguage[4]; for (int iPtr = 0; iPtr < 3; iPtr++) strNewLanguage[iPtr] = command.parameters[iPtr]; strNewLanguage[3] = 0; adapter->SetMenuLanguage(strNewLanguage); } break; case CEC_OPCODE_DECK_CONTROL: if (command.initiator == CECDEVICE_TV && command.parameters.size == 1 && command.parameters[0] == CEC_DECK_CONTROL_MODE_STOP) { CSingleLock lock(adapter->m_critSection); cec_keypress key; key.duration = 500; key.keycode = CEC_USER_CONTROL_CODE_STOP; adapter->m_buttonQueue.push(key); } break; case CEC_OPCODE_PLAY: if (command.initiator == CECDEVICE_TV && command.parameters.size == 1) { if (command.parameters[0] == CEC_PLAY_MODE_PLAY_FORWARD) { CSingleLock lock(adapter->m_critSection); cec_keypress key; key.duration = 500; key.keycode = CEC_USER_CONTROL_CODE_PLAY; adapter->m_buttonQueue.push(key); } else if (command.parameters[0] == CEC_PLAY_MODE_PLAY_STILL) { CSingleLock lock(adapter->m_critSection); cec_keypress key; key.duration = 500; key.keycode = CEC_USER_CONTROL_CODE_PAUSE; adapter->m_buttonQueue.push(key); } } break; case CEC_OPCODE_REPORT_POWER_STATUS: if (command.initiator == CECDEVICE_TV && command.parameters.size == 1 && command.parameters[0] == CEC_POWER_STATUS_ON && adapter->m_queryThread) { adapter->m_queryThread->Signal(); } break; default: break; } } return 1; }