repositories
/
deb_libcec.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1a87cac
)
cec: use the given timeout when trying to open a connection to the CEC adapter
author
Lars Op den Kamp
<lars@opdenkamp.eu>
Wed, 11 Jan 2012 01:18:34 +0000
(
02:18
+0100)
committer
Lars Op den Kamp
<lars@opdenkamp.eu>
Wed, 11 Jan 2012 01:18:34 +0000
(
02:18
+0100)
src/lib/AdapterCommunication.cpp
patch
|
blob
|
blame
|
history
diff --git
a/src/lib/AdapterCommunication.cpp
b/src/lib/AdapterCommunication.cpp
index 93648742825ce3f089013615d119afae827bf114..d33ad2f84165b1fb52ddede687487430cf158ee9 100644
(file)
--- a/
src/lib/AdapterCommunication.cpp
+++ b/
src/lib/AdapterCommunication.cpp
@@
-265,7
+265,11
@@
CAdapterCommunication::~CAdapterCommunication(void)
bool CAdapterCommunication::Open(const char *strPort, uint16_t iBaudRate /* = 38400 */, uint32_t iTimeoutMs /* = 10000 */)
{
bool CAdapterCommunication::Open(const char *strPort, uint16_t iBaudRate /* = 38400 */, uint32_t iTimeoutMs /* = 10000 */)
{
+ uint64_t iNow = GetTimeMs();
+ uint64_t iTimeout = iNow + iTimeoutMs;
+
CLockObject lock(&m_mutex);
CLockObject lock(&m_mutex);
+
if (!m_port)
{
m_processor->AddLog(CEC_LOG_ERROR, "port is NULL");
if (!m_port)
{
m_processor->AddLog(CEC_LOG_ERROR, "port is NULL");
@@
-275,12
+279,23
@@
bool CAdapterCommunication::Open(const char *strPort, uint16_t iBaudRate /* = 38
if (IsOpen())
{
m_processor->AddLog(CEC_LOG_ERROR, "port is already open");
if (IsOpen())
{
m_processor->AddLog(CEC_LOG_ERROR, "port is already open");
+ return true;
}
}
- if (!m_port->Open(strPort, iBaudRate))
+ CStdString strError;
+ bool bConnected(false);
+ while (!bConnected && iNow < iTimeout)
+ {
+ if (!(bConnected = m_port->Open(strPort, iBaudRate)))
+ {
+ strError.Format("error opening serial port '%s': %s", strPort, m_port->GetError().c_str());
+ Sleep(250);
+ iNow = GetTimeMs();
+ }
+ }
+
+ if (!bConnected)
{
{
- CStdString strError;
- strError.Format("error opening serial port '%s': %s", strPort, m_port->GetError().c_str());
m_processor->AddLog(CEC_LOG_ERROR, strError);
return false;
}
m_processor->AddLog(CEC_LOG_ERROR, strError);
return false;
}
@@
-302,9
+317,6
@@
bool CAdapterCommunication::Open(const char *strPort, uint16_t iBaudRate /* = 38
m_processor->AddLog(CEC_LOG_DEBUG, "could not create a communication thread");
}
m_processor->AddLog(CEC_LOG_DEBUG, "could not create a communication thread");
}
- //TODO implement the timeout. use the variable for now to silence the compiler warning
- iTimeoutMs = 0;
-
return false;
}
return false;
}