X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=inline;f=src%2Flib%2FCECProcessor.cpp;h=11065ebfec6e5b6bb7198986825db3f93d8c9bd9;hb=ef79edcce663c6156731ad73d63acbe0c6be85b9;hp=dfdb737da3aeab2f126600bc6bebe11a29d6e514;hpb=2afdf4c2baa2972c9df69e985e699876a761b981;p=deb_libcec.git diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index dfdb737..11065eb 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -154,14 +154,18 @@ bool CCECProcessor::Start(const char *strPort, uint16_t iBaudRate /* = 38400 */, if (SetAckMask(m_logicalAddresses.AckMask()) && SetHDMIPort(m_iBaseDevice, m_iHDMIPort, true)) { + m_controller->AddLog(CEC_LOG_ERROR, "processor thread started"); m_busScan = new CCECBusScan(this); m_busScan->CreateThread(true); return true; } + else + { + m_controller->AddLog(CEC_LOG_ERROR, "failed to initialise the processor"); + } } - else - m_controller->AddLog(CEC_LOG_ERROR, "could not create a processor thread"); + m_controller->AddLog(CEC_LOG_ERROR, "could not create a processor thread"); return false; } @@ -401,7 +405,7 @@ bool CCECProcessor::SetHDMIPort(cec_logical_address iBaseDevice, uint8_t iPort, iPhysicalAddress += (uint16_t)(iPort * iPos); strLog.Format("checking physical address %4x", iPhysicalAddress); AddLog(CEC_LOG_DEBUG, strLog); - if (CheckPhysicalAddress(iPhysicalAddress)) + if (PhysicalAddressInUse(iPhysicalAddress)) { strLog.Format("physical address %4x is in use", iPhysicalAddress); AddLog(CEC_LOG_DEBUG, strLog); @@ -409,6 +413,8 @@ bool CCECProcessor::SetHDMIPort(cec_logical_address iBaseDevice, uint8_t iPort, } else { + strLog.Format("physical address %4x is free", iPhysicalAddress); + AddLog(CEC_LOG_DEBUG, strLog); SetPhysicalAddress(iPhysicalAddress); bReturn = true; } @@ -417,7 +423,7 @@ bool CCECProcessor::SetHDMIPort(cec_logical_address iBaseDevice, uint8_t iPort, return bReturn; } -bool CCECProcessor::CheckPhysicalAddress(uint16_t iPhysicalAddress) +bool CCECProcessor::PhysicalAddressInUse(uint16_t iPhysicalAddress) { for (unsigned int iPtr = 0; iPtr < 15; iPtr++) { @@ -1264,19 +1270,26 @@ const char *CCECProcessor::ToString(const cec_vendor_id vendor) void *CCECBusScan::Process(void) { CCECBusDevice *device(NULL); + int iCount(0); while (!IsStopped()) { - for (unsigned int iPtr = 0; iPtr < 15 && !IsStopped(); iPtr++) + if (iCount == 0) { - device = m_processor->m_busDevices[iPtr]; - if (device && device->GetStatus() == CEC_DEVICE_STATUS_PRESENT) + for (unsigned int iPtr = 0; iPtr < 15 && !IsStopped(); iPtr++) { - if (!IsStopped()) - device->GetVendorId(); - Sleep(5); + device = m_processor->m_busDevices[iPtr]; + if (device && device->GetStatus(true) == CEC_DEVICE_STATUS_PRESENT) + { + if (!IsStopped()) + device->GetVendorId(); + Sleep(5); + } } } - Sleep(5000); + + if (++iCount > 60) + iCount = 0; + Sleep(1000); } return NULL; }