diff --git a/src/libebus/port.h b/src/libebus/port.h index f69ba276..2b0dc12f 100644 --- a/src/libebus/port.h +++ b/src/libebus/port.h @@ -28,90 +28,232 @@ namespace libebus { +/** available device types. */ enum DeviceType { SERIAL, NETWORK }; +/** max size of receive buffer. */ #define MAX_READ_SIZE 100 + +/** + * @brief Base class for input devices. + */ class Device { public: + /** + * @brief Constructs a new instance. + */ Device() : m_fd(-1), m_open(false), m_noDeviceCheck(false) {} + + /** + * @brief Destructor. + */ virtual ~Device() {} + /** + * @brief virtual open function for opening file descriptor + * @param deviceName to determine device type. + * @param noDeviceCheck en-/disable device check. + */ virtual void openDevice(const std::string deviceName, const bool noDeviceCheck) = 0; + + /** + * @brief virtual close function for closing opened file descriptor + */ virtual void closeDevice() = 0; + + /** + * @brief connection state of device. + * @return true if device is open + */ bool isOpen(); + /** + * @brief sendBytes write bytes into opened file descriptor. + * @param buffer data to send. + * @param nbytes number of bytes to send. + * @return number of written bytes or -1 if an error has occured. + */ ssize_t sendBytes(const unsigned char* buffer, size_t nbytes); + + /** + * @brief recvBytes read bytes from opened file descriptor. + * @param timeout max time out for new input data. + * @param maxCount max size of receive buffer. + * @return number of read bytes or -1 if an error has occured. + */ ssize_t recvBytes(const long timeout, size_t maxCount); + /** + * @brief fetch first byte from receive buffer. + * @return first byte (raw) + */ unsigned char getByte(); + + /** + * @brief get current size (bytes) of the receive buffer. + * @return number of bytes in queued. + */ ssize_t sizeRecvBuffer() const { return m_recvBuffer.size(); } protected: + /** if of file descriptor */ int m_fd; + /** state of device*/ bool m_open; + /** state of device check */ bool m_noDeviceCheck; + /** queue for received bytes */ std::queue m_recvBuffer; + /** receive buffer */ unsigned char m_buffer[MAX_READ_SIZE]; private: + /** + * @brief system check if opened file descriptor is valid + * @return true if file descriptor is valid + */ bool isValid(); }; +/** + * @brief Class for serial input device. + */ class DeviceSerial : public Device { public: + /** + * @brief Destructor. + */ ~DeviceSerial() { closeDevice(); } + /** + * @brief open function for opening file descriptor + * @param deviceName to determine device type. + * @param noDeviceCheck en-/disable device check. + */ void openDevice(const std::string deviceName, const bool noDeviceCheck); + + /** + * @brief close function for closing opened file descriptor + */ void closeDevice(); private: + /** save settings from serial device */ termios m_oldSettings; }; +/** + * @brief Class for network input device. + */ class DeviceNetwork : public Device { public: + /** + * @brief Destructor. + */ ~DeviceNetwork() { closeDevice(); } + /** + * @brief open function for opening file descriptor + * @param deviceName to determine device type. + * @param noDeviceCheck en-/disable device check. + */ void openDevice(const std::string deviceName, const bool noDeviceCheck); + + /** + * @brief close opened file descriptor + */ void closeDevice(); private: }; - +/** + * @brief Wrapper class for class Device. + */ class Port { public: + /** + * @brief Constructs a new instance and determine device type. + * @param deviceName to determine device type. + * @param noDeviceCheck en-/disable device check. + */ Port(const std::string deviceName, const bool noDeviceCheck); + + /** + * @brief Destructor. + */ ~Port() { delete m_device; } + /** + * @brief open device + */ void open() { m_device->openDevice(m_deviceName, m_noDeviceCheck); } + + /** + * @brief close device + */ void close() { m_device->closeDevice(); } + + /** + * @brief connection state of device. + * @return true if device is open + */ bool isOpen() { return m_device->isOpen(); } + /** + * @brief send write bytes into opened file descriptor. + * @param buffer data to send. + * @param nbytes number of bytes to send. + * @return number of written bytes or -1 if an error has occured. + */ ssize_t send(const unsigned char* buffer, size_t nbytes) { return m_device->sendBytes(buffer, nbytes); } - ssize_t recv(const long timeout, size_t maxCount=MAX_READ_SIZE) { return m_device->recvBytes(timeout, maxCount); } + /** + * @brief recv read bytes from opened file descriptor. + * @param timeout max time out for new input data. + * @param maxCount max size of receive buffer. + * @return number of read bytes or -1 if an error has occured. + */ + ssize_t recv(const long timeout, size_t maxCount = MAX_READ_SIZE) + { return m_device->recvBytes(timeout, maxCount); } + + /** + * @brief fetch first byte from receive buffer. + * @return first byte (raw) + */ unsigned char byte() { return m_device->getByte(); } + + /** + * @brief get current size (bytes) of the receive buffer. + * @return number of bytes in queued. + */ ssize_t size() const { return m_device->sizeRecvBuffer(); } private: + /** the device name */ std::string m_deviceName; + /** pointer to device instance */ Device* m_device; + /** true if device check is disabled */ bool m_noDeviceCheck; + /** + * @brief internal setter for device type. + * @param type of device + */ void setType(const DeviceType type); }; diff --git a/src/libebus/result.cpp b/src/libebus/result.cpp index 4374d3d9..ba2f6008 100644 --- a/src/libebus/result.cpp +++ b/src/libebus/result.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) John Baier 2012-2014 + * Copyright (C) John Baier 2014 * * This file is part of ebusd. * diff --git a/src/libebus/result.h b/src/libebus/result.h index bd0a9c13..dd669e8f 100644 --- a/src/libebus/result.h +++ b/src/libebus/result.h @@ -1,5 +1,5 @@ /* - * Copyright (C) John Baier 2012-2014 + * Copyright (C) John Baier 2014 * * This file is part of ebusd. * diff --git a/src/libebus/symbol.cpp b/src/libebus/symbol.cpp index 102c4760..2d35aa19 100644 --- a/src/libebus/symbol.cpp +++ b/src/libebus/symbol.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) John Baier 2012-2014 + * Copyright (C) John Baier 2014 * * This file is part of ebusd. * diff --git a/src/libebus/symbol.h b/src/libebus/symbol.h index 7ed10ce4..9fd31508 100644 --- a/src/libebus/symbol.h +++ b/src/libebus/symbol.h @@ -1,5 +1,5 @@ /* - * Copyright (C) John Baier 2012-2014 + * Copyright (C) John Baier 2014 * * This file is part of ebusd. * @@ -41,6 +41,7 @@ static const unsigned char BROADCAST = 0xFE; // the broadcast destination addres */ class SymbolString { + public: /** * @brief Creates a new empty SymbolString. diff --git a/src/test/test_symbol.cpp b/src/test/test_symbol.cpp index 2e495d0b..625e93cc 100644 --- a/src/test/test_symbol.cpp +++ b/src/test/test_symbol.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) John Baier 2012-2014 + * Copyright (C) John Baier 2014 * * This file is part of ebusd. *