X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fplatform%2Fsockets%2Fserialport.h;h=c74cc05d38ec967dfef8923af15ff466158beb09;hb=996665192725398172263999b88c63663d11db04;hp=7b0a3a0be8af8b9764c74e2ca4f68d5f94871f26;hpb=4478bc797f871f631399ab8008d3b2787ded07c2;p=deb_libcec.git diff --git a/src/lib/platform/sockets/serialport.h b/src/lib/platform/sockets/serialport.h index 7b0a3a0..c74cc05 100644 --- a/src/lib/platform/sockets/serialport.h +++ b/src/lib/platform/sockets/serialport.h @@ -45,53 +45,71 @@ namespace PLATFORM { - #define PAR_NONE 0 - #define PAR_EVEN 1 - #define PAR_ODD 2 + enum SerialParity + { + SERIAL_PARITY_NONE = 0, + SERIAL_PARITY_EVEN, + SERIAL_PARITY_ODD + }; + + enum SerialStopBits + { + SERIAL_STOP_BITS_ONE = 1, + SERIAL_STOP_BITS_TWO = 2 + }; + + enum SerialDataBits + { + SERIAL_DATA_BITS_FIVE = 5, + SERIAL_DATA_BITS_SIX = 6, + SERIAL_DATA_BITS_SEVEN = 7, + SERIAL_DATA_BITS_EIGHT = 8 + }; - class CSerialPort : public CSocket + class CSerialSocket : public CCommonSocket { public: - CSerialPort(void); - virtual ~CSerialPort(void) {} + 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(INVALID_SERIAL_SOCKET_VALUE, strName), + m_bIsOpen(false), + m_iBaudrate(iBaudrate), + m_iDatabits(iDatabits), + m_iStopbits(iStopbits), + m_iParity(iParity) {} - bool Open(std::string name, uint32_t baudrate, uint8_t databits = 8, uint8_t stopbits = 1, uint8_t parity = PAR_NONE); + virtual ~CSerialSocket(void) {} - CStdString GetName(void) const + virtual bool Open(uint64_t iTimeoutMs = 0); + virtual void Close(void); + virtual void Shutdown(void); + virtual ssize_t Write(void* data, size_t len); + virtual ssize_t Read(void* data, size_t len, uint64_t iTimeoutMs = 0); + + virtual bool IsOpen(void) { - CStdString strName; - strName = m_strName; - return strName; + return m_socket != INVALID_SERIAL_SOCKET_VALUE && + m_bIsOpen; } - #ifdef __WINDOWS__ - virtual bool IsOpen(void); - virtual void Close(void); - virtual int64_t Write(uint8_t* data, uint32_t len); - virtual int32_t Read(uint8_t* data, uint32_t len, uint64_t iTimeoutMs = 0); - #endif + virtual bool SetBaudRate(uint32_t baudrate); - private: - bool SetBaudRate(uint32_t baudrate); + protected: + #ifndef __WINDOWS__ + struct termios m_options; + #endif - private: - #ifdef __WINDOWS__ - void FormatWindowsError(int iErrorCode, CStdString &strMessage); - bool SetTimeouts(bool bBlocking); + bool m_bIsOpen; + uint32_t m_iBaudrate; + SerialDataBits m_iDatabits; + SerialStopBits m_iStopbits; + SerialParity m_iParity; + }; - HANDLE m_handle; - bool m_bIsOpen; - uint32_t m_iBaudrate; - uint8_t m_iDatabits; - uint8_t m_iStopbits; - uint8_t m_iParity; - int64_t m_iTimeout; - SyncedBuffer m_buffer; - HANDLE m_ovHandle; - #else - struct termios m_options; - #endif - std::string m_strName; - bool m_bToStdOut; + class CSerialPort : public CProtectedSocket + { + public: + CSerialPort(const CStdString &strName, uint32_t iBaudrate, SerialDataBits iDatabits = SERIAL_DATA_BITS_EIGHT, SerialStopBits iStopbits = SERIAL_STOP_BITS_ONE, SerialParity iParity = SERIAL_PARITY_NONE) : + CProtectedSocket (new CSerialSocket(strName, iBaudrate, iDatabits, iStopbits, iParity)) {} + virtual ~CSerialPort(void) {} }; };