X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FCECProcessor.cpp;h=4d4abba2ac93cca0fc6c2ee9bebb1cd531fc93ca;hb=38f1fbcc12f5774288b55e3a75df10338f1ed70f;hp=848800ec4cbd9985d6dfab27330f9cccc740bfd9;hpb=91ef4e2d039e2b4171cfb77f7895bde87c5309a6;p=deb_libcec.git diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index 848800e..4d4abba 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -51,7 +51,7 @@ using namespace std; using namespace PLATFORM; #define CEC_PROCESSOR_SIGNAL_WAIT_TIME 1000 -#define ACTIVE_SOURCE_CHECK_TIMEOUT 15000 +#define ACTIVE_SOURCE_CHECK_INTERVAL 500 #define ToString(x) CCECTypeUtils::ToString(x) @@ -198,20 +198,6 @@ void CCECProcessor::ReplaceHandlers(void) it->second->ReplaceHandler(true); } -void CCECProcessor::CheckPendingActiveSource(void) -{ - if (!CECInitialised()) - return; - - // check each device - for (CECDEVICEMAP::iterator it = m_busDevices->Begin(); it != m_busDevices->End(); it++) - { - if (it->second->GetHandler()->ActiveSourcePending()) - it->second->ActivateSource(); - it->second->MarkHandlerReady(); - } -} - bool CCECProcessor::OnCommandReceived(const cec_command &command) { return m_inBuffer.Push(command); @@ -221,8 +207,8 @@ void *CCECProcessor::Process(void) { m_libcec->AddLog(CEC_LOG_DEBUG, "processor thread started"); - cec_command command; - CTimeout activeSourceCheck(ACTIVE_SOURCE_CHECK_TIMEOUT); + cec_command command; command.Clear(); + CTimeout activeSourceCheck(ACTIVE_SOURCE_CHECK_INTERVAL); // as long as we're not being stopped and the connection is open while (!IsStopped() && m_communication->IsOpen()) @@ -242,8 +228,9 @@ void *CCECProcessor::Process(void) // check whether we need to activate a source, if it failed before if (activeSourceCheck.TimeLeft() == 0) { - CheckPendingActiveSource(); - activeSourceCheck.Init(ACTIVE_SOURCE_CHECK_TIMEOUT); + if (CECInitialised()) + TransmitPendingActiveSourceCommands(); + activeSourceCheck.Init(ACTIVE_SOURCE_CHECK_INTERVAL); } } } @@ -679,6 +666,10 @@ bool CCECProcessor::RegisterClient(CCECClient *client) m_busDevices->GetByLogicalAddresses(devices, configuration.logicalAddresses); for (CECDEVICEVEC::const_iterator it = devices.begin(); it != devices.end(); it++) { + // set the physical address of the device at this LA + if (CLibCEC::IsValidPhysicalAddress(configuration.iPhysicalAddress)) + (*it)->SetPhysicalAddress(configuration.iPhysicalAddress); + // replace a previous client CLockObject lock(m_mutex); m_clients.erase((*it)->GetLogicalAddress()); @@ -688,7 +679,7 @@ bool CCECProcessor::RegisterClient(CCECClient *client) // get the settings from the rom if (configuration.bGetSettingsFromROM == 1) { - libcec_configuration config; + libcec_configuration config; config.Clear(); m_communication->GetConfiguration(config); CLockObject lock(m_mutex);