X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FAdapterCommunication.cpp;h=4b0bcdd1b238ac26aa7882a8b4ebae1c62de90da;hb=7eb13cca43e722f2bfd20064daf580ea65411cf5;hp=3a403068811a0dfee97d077bbf62f70f057f735a;hpb=f7e6ba706d8e9ded6d65139da93309b22fd3d4ed;p=deb_libcec.git diff --git a/src/lib/AdapterCommunication.cpp b/src/lib/AdapterCommunication.cpp index 3a40306..4b0bcdd 100644 --- a/src/lib/AdapterCommunication.cpp +++ b/src/lib/AdapterCommunication.cpp @@ -52,11 +52,13 @@ CAdapterCommunication::CAdapterCommunication(CLibCEC *controller) : CAdapterCommunication::~CAdapterCommunication(void) { + StopThread(); m_port->Close(); + delete m_port; m_port = NULL; } -bool CAdapterCommunication::Open(const char *strPort, int iBaudRate /* = 38400 */, int iTimeoutMs /* = 10000 */) +bool CAdapterCommunication::Open(const char *strPort, uint16_t iBaudRate /* = 38400 */, uint64_t iTimeoutMs /* = 10000 */) { CLockObject lock(&m_commMutex); if (m_bStarted) @@ -114,20 +116,21 @@ void *CAdapterCommunication::Process(void) CCondition::Sleep(50); } - m_controller->AddLog(CEC_LOG_DEBUG, "reader thread terminated"); - CLockObject lock(&m_commMutex); m_bStarted = false; return NULL; } -bool CAdapterCommunication::ReadFromDevice(int iTimeout) +bool CAdapterCommunication::ReadFromDevice(uint64_t iTimeout) { uint8_t buff[1024]; CLockObject lock(&m_commMutex); - int iBytesRead = m_port->Read(buff, sizeof(buff), iTimeout); + if (!m_port) + return false; + + int32_t iBytesRead = m_port->Read(buff, sizeof(buff), iTimeout); lock.Leave(); - if (iBytesRead < 0) + if (iBytesRead < 0 || iBytesRead > 256) { CStdString strError; strError.Format("error reading from serial port: %s", m_port->GetError().c_str()); @@ -135,12 +138,12 @@ bool CAdapterCommunication::ReadFromDevice(int iTimeout) return false; } else if (iBytesRead > 0) - AddData(buff, iBytesRead); + AddData(buff, (uint8_t) iBytesRead); return true; } -void CAdapterCommunication::AddData(uint8_t *data, int iLen) +void CAdapterCommunication::AddData(uint8_t *data, uint8_t iLen) { CLockObject lock(&m_bufferMutex); if (iLen + m_iInbufUsed > m_iInbufSize) @@ -159,7 +162,7 @@ bool CAdapterCommunication::Write(const cec_frame &data) { CLockObject lock(&m_commMutex); - if (m_port->Write(data) != data.size()) + if (m_port->Write(data) != (int) data.size()) { CStdString strError; strError.Format("error writing to serial port: %s", m_port->GetError().c_str()); @@ -174,7 +177,7 @@ bool CAdapterCommunication::Write(const cec_frame &data) return true; } -bool CAdapterCommunication::Read(cec_frame &msg, int iTimeout) +bool CAdapterCommunication::Read(cec_frame &msg, uint64_t iTimeout) { CLockObject lock(&m_bufferMutex);