X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Fwindows%2Fserialport.cpp;h=ade4fb214cc4714786dbb0b16828b2777c346f8c;hb=24048d575419fe909fade9110fab48d17370ee6f;hp=ce299cf0d443177ed9ff1bf289761eede2e082e2;hpb=3424a2f327e569e92c7282c6e643536984a65c64;p=deb_libcec.git diff --git a/src/lib/platform/windows/serialport.cpp b/src/lib/platform/windows/serialport.cpp index ce299cf..ade4fb2 100644 --- a/src/lib/platform/windows/serialport.cpp +++ b/src/lib/platform/windows/serialport.cpp @@ -30,14 +30,14 @@ * http://www.pulse-eight.net/ */ -#include "../serialport.h" -#include "../baudrate.h" -#include "../timeutils.h" +#include "../sockets/serialport.h" +#include "../util/baudrate.h" +#include "../util/timeutils.h" using namespace std; -using namespace CEC; +using namespace PLATFORM; -void FormatWindowsError(int iErrorCode, string &strMessage) +void CSerialPort::FormatWindowsError(int iErrorCode, CStdString &strMessage) { if (iErrorCode != ERROR_SUCCESS) { @@ -58,43 +58,39 @@ CSerialPort::CSerialPort(void) : { } -CSerialPort::~CSerialPort(void) -{ - Close(); -} - bool CSerialPort::Open(string name, uint32_t baudrate, uint8_t databits, uint8_t stopbits, uint8_t parity) { - CLockObject lock(&m_mutex); - m_handle = CreateFile(name.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); + CStdString strComPath = "\\\\.\\" + name; + CLockObject lock(m_mutex); + m_handle = CreateFile(strComPath.c_str(), GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (m_handle == INVALID_HANDLE_VALUE) { - m_error = "Unable to open COM port"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "Unable to open COM port"; + FormatWindowsError(GetLastError(), m_strError); return false; } COMMCONFIG commConfig = {0}; DWORD dwSize = sizeof(commConfig); commConfig.dwSize = dwSize; - if (GetDefaultCommConfig(name.c_str(), &commConfig,&dwSize)) + if (GetDefaultCommConfig(strComPath.c_str(), &commConfig,&dwSize)) { if (!SetCommConfig(m_handle, &commConfig,dwSize)) { - m_error = "unable to set default config"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "unable to set default config"; + FormatWindowsError(GetLastError(), m_strError); } } else { - m_error = "unable to get default config"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "unable to get default config"; + FormatWindowsError(GetLastError(), m_strError); } if (!SetupComm(m_handle, 64, 64)) { - m_error = "unable to set up the com port"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "unable to set up the com port"; + FormatWindowsError(GetLastError(), m_strError); } m_iDatabits = databits; @@ -102,16 +98,16 @@ bool CSerialPort::Open(string name, uint32_t baudrate, uint8_t databits, uint8_t m_iParity = parity; if (!SetBaudRate(baudrate)) { - m_error = "unable to set baud rate"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "unable to set baud rate"; + FormatWindowsError(GetLastError(), m_strError); Close(); return false; } if (!SetTimeouts(false)) { - m_error = "unable to set timeouts"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "unable to set timeouts"; + FormatWindowsError(GetLastError(), m_strError); Close(); return false; } @@ -128,8 +124,8 @@ bool CSerialPort::SetTimeouts(bool bBlocking) COMMTIMEOUTS cto; if (!GetCommTimeouts(m_handle, &cto)) { - m_error = "GetCommTimeouts failed"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "GetCommTimeouts failed"; + FormatWindowsError(GetLastError(), m_strError); return false; } @@ -148,8 +144,8 @@ bool CSerialPort::SetTimeouts(bool bBlocking) if (!SetCommTimeouts(m_handle, &cto)) { - m_error = "SetCommTimeouts failed"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "SetCommTimeouts failed"; + FormatWindowsError(GetLastError(), m_strError); return false; } @@ -158,7 +154,7 @@ bool CSerialPort::SetTimeouts(bool bBlocking) void CSerialPort::Close(void) { - CLockObject lock(&m_mutex); + CLockObject lock(m_mutex); if (m_bIsOpen) { CloseHandle(m_handle); @@ -166,38 +162,38 @@ void CSerialPort::Close(void) } } -int32_t CSerialPort::Write(uint8_t* data, uint32_t len) +int64_t CSerialPort::Write(uint8_t* data, uint32_t len) { - CLockObject lock(&m_mutex); + CLockObject lock(m_mutex); DWORD iBytesWritten = 0; if (!m_bIsOpen) return -1; if (!WriteFile(m_handle, data, len, &iBytesWritten, NULL)) { - m_error = "Error while writing to COM port"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "Error while writing to COM port"; + FormatWindowsError(GetLastError(), m_strError); return -1; } - return iBytesWritten; + return (int64_t)iBytesWritten; } int32_t CSerialPort::Read(uint8_t* data, uint32_t len, uint64_t iTimeoutMs /* = 0 */) { - CLockObject lock(&m_mutex); + CLockObject lock(m_mutex); int32_t iReturn(-1); DWORD iBytesRead = 0; if (m_handle == 0) { - m_error = "Error while reading from COM port: invalid handle"; + m_strError = "Error while reading from COM port: invalid handle"; return iReturn; } if(!ReadFile(m_handle, data, len, &iBytesRead, NULL) != 0) { - m_error = "unable to read from device"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "unable to read from device"; + FormatWindowsError(GetLastError(), m_strError); iReturn = -1; } else @@ -245,16 +241,16 @@ bool CSerialPort::SetBaudRate(uint32_t baudrate) if(!SetCommState(m_handle,&dcb)) { - m_error = "SetCommState failed"; - FormatWindowsError(GetLastError(), m_error); + m_strError = "SetCommState failed"; + FormatWindowsError(GetLastError(), m_strError); return false; } return true; } -bool CSerialPort::IsOpen() +bool CSerialPort::IsOpen(void) { - CLockObject lock(&m_mutex); + CLockObject lock(m_mutex); return m_bIsOpen; }