X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FCECProcessor.cpp;h=1daa7b60d2d8d421f879fa9b530ce07039725b1f;hb=0ecbcd4dd338a4e0e7dcf0400274cebf6744ff4e;hp=84b9bafcbc451ba5e4881cd80f2e66107d5234bd;hpb=5f3167157997a0d64fd8a44ad04babf43327eec8;p=deb_libcec.git diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index 84b9baf..1daa7b6 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -118,14 +118,6 @@ CCECProcessor::CCECProcessor(CLibCEC *controller, const char *strDeviceName, con CCECProcessor::~CCECProcessor(void) { m_bStarted = false; - StopThread(false); - - if (m_busScan) - { - m_busScan->StopThread(); - delete m_busScan; - } - m_startCondition.Broadcast(); StopThread(); @@ -268,7 +260,9 @@ void *CCECProcessor::Process(void) } else { - m_busDevices[m_logicalAddresses.primary]->TransmitPhysicalAddress(); + m_busDevices[CECDEVICE_TV]->GetVendorId(); + m_busDevices[m_logicalAddresses.primary]->TransmitVendorID(CECDEVICE_TV, false); + CLockObject lock(&m_mutex); m_bStarted = true; m_controller->AddLog(CEC_LOG_DEBUG, "processor thread started"); @@ -302,6 +296,13 @@ void *CCECProcessor::Process(void) m_controller->CheckKeypressTimeout(); } + if (m_busScan) + { + m_busScan->StopThread(); + delete m_busScan; + m_busScan = NULL; + } + if (m_communication) m_communication->Close(); @@ -329,8 +330,7 @@ bool CCECProcessor::SetActiveSource(cec_device_type type /* = CEC_DEVICE_TYPE_RE } } - bReturn = m_busDevices[CECDEVICE_TV]->PowerOn() && - m_busDevices[addr]->TransmitActiveSource() && + bReturn = m_busDevices[addr]->TransmitActiveSource() && SetStreamPath(m_busDevices[addr]->GetPhysicalAddress(false)); if (bReturn && (m_busDevices[addr]->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE || @@ -354,11 +354,6 @@ void CCECProcessor::SetRetryLineTimeout(uint8_t iTimeout) m_iRetryLineTimeout = iTimeout; } -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]); @@ -525,7 +520,10 @@ bool CCECProcessor::SetPhysicalAddress(uint16_t iPhysicalAddress) { for (uint8_t iPtr = 0; iPtr < 15; iPtr++) if (m_logicalAddresses[iPtr]) + { m_busDevices[iPtr]->SetPhysicalAddress(iPhysicalAddress); + m_busDevices[iPtr]->TransmitPhysicalAddress(); + } return SetActiveView(); } return false; @@ -541,7 +539,7 @@ bool CCECProcessor::SwitchMonitoring(bool bEnable) CLockObject lock(&m_mutex); m_bMonitor = bEnable; - if (bEnable) + if (!bEnable) { if (!m_busScan) { @@ -1298,9 +1296,15 @@ const char *CCECProcessor::ToString(const cec_vendor_id vendor) void *CCECBusScan::Process(void) { CCECBusDevice *device(NULL); + uint8_t iCounter(0); while (!IsStopped()) { + if (++iCounter < 30) + { + Sleep(1000); + continue; + } for (unsigned int iPtr = 0; iPtr <= 11 && !IsStopped(); iPtr++) { device = m_processor->m_busDevices[iPtr];