repositories
/
deb_libcec.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
fbdea54
)
win32: serial socket timeouts. bugzid: 654
author
Lars Op den Kamp
<lars@opdenkamp.eu>
Wed, 11 Apr 2012 08:59:04 +0000
(10:59 +0200)
committer
Lars Op den Kamp
<lars@opdenkamp.eu>
Wed, 11 Apr 2012 09:05:47 +0000
(11:05 +0200)
src/lib/adapter/USBCECAdapterCommunication.cpp
patch
|
blob
|
blame
|
history
src/lib/platform/sockets/serialport.h
patch
|
blob
|
blame
|
history
src/lib/platform/windows/serialport.cpp
patch
|
blob
|
blame
|
history
diff --git
a/src/lib/adapter/USBCECAdapterCommunication.cpp
b/src/lib/adapter/USBCECAdapterCommunication.cpp
index 527292acc9d12c8ade59cf3caad4d1e85ea8d7d9..8269d139885028dfe3d92955162667a0c754d2b4 100644
(file)
--- a/
src/lib/adapter/USBCECAdapterCommunication.cpp
+++ b/
src/lib/adapter/USBCECAdapterCommunication.cpp
@@
-240,10
+240,7
@@
void *CUSBCECAdapterCommunication::Process(void)
}
if (!IsStopped())
}
if (!IsStopped())
- {
- Sleep(5);
WriteNextCommand();
WriteNextCommand();
- }
}
/* notify all threads that are waiting on messages to be sent */
}
/* notify all threads that are waiting on messages to be sent */
diff --git
a/src/lib/platform/sockets/serialport.h
b/src/lib/platform/sockets/serialport.h
index bdd05b96f3edc0ebf1ab9946a4f69f200c9cd3e7..eed05a001761f6add5dc1a0de1475ba5bb9dc240 100644
(file)
--- a/
src/lib/platform/sockets/serialport.h
+++ b/
src/lib/platform/sockets/serialport.h
@@
-71,6
+71,9
@@
namespace PLATFORM
public:
CSerialSocket(const CStdString &strName, uint32_t iBaudrate, SerialDataBits iDatabits = SERIAL_DATA_BITS_EIGHT, SerialStopBits iStopbits = SERIAL_STOP_BITS_ONE, SerialParity iParity = SERIAL_PARITY_NONE) :
CCommonSocket<serial_socket_t>(INVALID_SERIAL_SOCKET_VALUE, strName),
public:
CSerialSocket(const CStdString &strName, uint32_t iBaudrate, SerialDataBits iDatabits = SERIAL_DATA_BITS_EIGHT, SerialStopBits iStopbits = SERIAL_STOP_BITS_ONE, SerialParity iParity = SERIAL_PARITY_NONE) :
CCommonSocket<serial_socket_t>(INVALID_SERIAL_SOCKET_VALUE, strName),
+ #ifdef __WINDOWS__
+ m_iCurrentReadTimeout(MAXDWORD),
+ #endif
m_bIsOpen(false),
m_iBaudrate(iBaudrate),
m_iDatabits(iDatabits),
m_bIsOpen(false),
m_iBaudrate(iBaudrate),
m_iDatabits(iDatabits),
@@
-96,6
+99,9
@@
namespace PLATFORM
protected:
#ifndef __WINDOWS__
struct termios m_options;
protected:
#ifndef __WINDOWS__
struct termios m_options;
+ #else
+ bool SetTimeouts(serial_socket_t socket, int* iError, DWORD iTimeoutMs);
+ DWORD m_iCurrentReadTimeout;
#endif
bool m_bIsOpen;
#endif
bool m_bIsOpen;
diff --git
a/src/lib/platform/windows/serialport.cpp
b/src/lib/platform/windows/serialport.cpp
index c0cdd936af9e586991ac2e6b463ca2df1674abc8..96e743f80e0759fba864a6fa9ad171128a0bd850 100644
(file)
--- a/
src/lib/platform/windows/serialport.cpp
+++ b/
src/lib/platform/windows/serialport.cpp
@@
-48,28
+48,25
@@
void FormatWindowsError(int iErrorCode, CStdString &strMessage)
}
}
}
}
-bool
SetTimeouts(serial_socket_t socket, int* iError, bool bBlocking
)
+bool
CSerialSocket::SetTimeouts(serial_socket_t socket, int* iError, DWORD iTimeoutMs
)
{
if (socket == INVALID_HANDLE_VALUE)
return false;
{
if (socket == INVALID_HANDLE_VALUE)
return false;
- COMMTIMEOUTS cto;
- if (!GetCommTimeouts(socket, &cto))
- {
- *iError = GetLastError();
- return false;
- }
+ if (iTimeoutMs == m_iCurrentReadTimeout)
+ return true;
- if (bBlocking)
+ COMMTIMEOUTS cto;
+ if (iTimeoutMs == 0)
{
{
- cto.ReadIntervalTimeout =
0
;
+ cto.ReadIntervalTimeout =
MAXDWORD
;
cto.ReadTotalTimeoutConstant = 0;
cto.ReadTotalTimeoutMultiplier = 0;
}
else
{
cto.ReadTotalTimeoutConstant = 0;
cto.ReadTotalTimeoutMultiplier = 0;
}
else
{
- cto.ReadIntervalTimeout =
MAXDWORD
;
- cto.ReadTotalTimeoutConstant =
0
;
+ cto.ReadIntervalTimeout =
0
;
+ cto.ReadTotalTimeoutConstant =
iTimeoutMs
;
cto.ReadTotalTimeoutMultiplier = 0;
}
cto.ReadTotalTimeoutMultiplier = 0;
}
@@
-78,6
+75,10
@@
bool SetTimeouts(serial_socket_t socket, int* iError, bool bBlocking)
*iError = GetLastError();
return false;
}
*iError = GetLastError();
return false;
}
+ else
+ {
+ m_iCurrentReadTimeout = iTimeoutMs;
+ }
return true;
}
return true;
}
@@
-103,7
+104,13
@@
ssize_t CSerialSocket::Write(void* data, size_t len)
ssize_t CSerialSocket::Read(void* data, size_t len, uint64_t iTimeoutMs /* = 0 */)
{
ssize_t CSerialSocket::Read(void* data, size_t len, uint64_t iTimeoutMs /* = 0 */)
{
- return IsOpen() ? SerialSocketRead(m_socket, &m_iError, data, len, iTimeoutMs) : -1;
+ DWORD dwTimeoutMs((DWORD)iTimeoutMs);
+ if (iTimeoutMs != (uint64_t)iTimeoutMs)
+ dwTimeoutMs = MAXDWORD;
+
+ return IsOpen() && SetTimeouts(m_socket, &m_iError, dwTimeoutMs) ?
+ SerialSocketRead(m_socket, &m_iError, data, len, iTimeoutMs) :
+ -1;
}
bool CSerialSocket::Open(uint64_t iTimeoutMs /* = 0 */)
}
bool CSerialSocket::Open(uint64_t iTimeoutMs /* = 0 */)
@@
-153,7
+160,7
@@
bool CSerialSocket::Open(uint64_t iTimeoutMs /* = 0 */)
return false;
}
return false;
}
- if (!SetTimeouts(m_socket, &m_iError,
false
))
+ if (!SetTimeouts(m_socket, &m_iError,
0
))
{
m_strError = "unable to set timeouts";
FormatWindowsError(GetLastError(), m_strError);
{
m_strError = "unable to set timeouts";
FormatWindowsError(GetLastError(), m_strError);