X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fadapter%2FUSBCECAdapterCommunication.cpp;h=c858d87132ec1a2601f92235733466a0651b4ac2;hb=b5117104dff139ffb5dbc6fe3ec995a4ed554f67;hp=2d8957b05e839004b6c7ce771d080448e9c478ef;hpb=32553784639691c77c172bb68527e458f987c770;p=deb_libcec.git diff --git a/src/lib/adapter/USBCECAdapterCommunication.cpp b/src/lib/adapter/USBCECAdapterCommunication.cpp index 2d8957b..c858d87 100644 --- a/src/lib/adapter/USBCECAdapterCommunication.cpp +++ b/src/lib/adapter/USBCECAdapterCommunication.cpp @@ -67,7 +67,8 @@ CUSBCECAdapterCommunication::CUSBCECAdapterCommunication(CCECProcessor *processo m_lastInitiator(CECDEVICE_UNKNOWN), m_bNextIsEscaped(false), m_bGotStart(false), - m_messageProcessor(NULL) + m_messageProcessor(NULL), + m_bInitialised(false) { m_port = new PLATFORM::CSerialPort(strPort, iBaudRate); } @@ -119,6 +120,11 @@ bool CUSBCECAdapterCommunication::CheckAdapter(uint32_t iTimeoutMs /* = 10000 */ else bReturn = true; + { + CLockObject lock(m_mutex); + m_bInitialised = bReturn; + } + return bReturn; } @@ -208,7 +214,7 @@ void *CUSBCECAdapterCommunication::Process(void) { CLockObject lock(m_mutex); ReadFromDevice(50); - bCommandReceived = m_callback && Read(command, 0); + bCommandReceived = m_callback && Read(command, 0) && m_bInitialised; } /* push the next command to the callback method if there is one */ @@ -320,7 +326,7 @@ bool CUSBCECAdapterCommunication::Read(CCECAdapterMessage &msg, uint32_t iTimeou if (iTimeout == 0 || !m_rcvCondition.Wait(m_mutex, m_bHasData, iTimeout)) return false; m_inBuffer.Pop(buf); - m_bHasData = m_inBuffer.Size() > 0; + m_bHasData = !m_inBuffer.IsEmpty(); } if (buf) @@ -391,6 +397,7 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg) if (msg.IsEmpty()) return bEom; + CLockObject adapterLock(m_mutex); switch(msg.Message()) { case MSGCODE_FRAME_START: @@ -424,7 +431,6 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg) m_currentframe.PushBack(msg[1]); m_currentframe.eom = msg.IsEOM(); } - bEom = msg.IsEOM(); } break; default: @@ -432,7 +438,7 @@ bool CUSBCECAdapterCommunication::ParseMessage(const CCECAdapterMessage &msg) } CLibCEC::AddLog(bIsError ? CEC_LOG_WARNING : CEC_LOG_DEBUG, msg.ToString()); - return bEom; + return bEom = msg.IsEOM();; } uint16_t CUSBCECAdapterCommunication::GetFirmwareVersion(void) @@ -663,7 +669,7 @@ void CUSBCECAdapterCommunication::AddData(uint8_t *data, size_t iLen) m_bGotStart = false; m_bNextIsEscaped = false; m_bHasData = true; - m_rcvCondition.Signal(); + m_rcvCondition.Broadcast(); } else if (m_bNextIsEscaped) {