#pragma once #include #include enum class ConnectionPort : unsigned int { CP_EXTERNAL = 0, CP_IOBUS, CP_TCP }; enum class Parity : unsigned int { PAR_ODD, PAR_EVEN, PAR_NONE }; enum class ConnectionType : unsigned int { CT_SERIAL, CT_TCP, CT_UNKNOWN }; class ConnectionConfig { public: ConnectionConfig( ConnectionPort port, int baud = 115200, Parity parity = Parity::PAR_NONE, int dataBits = 8, int stopBits = 1, int timeOut = -1 ) : m_port( port ) , m_baudRate( baud ) , m_parity( parity ) , m_dataBits( dataBits ) , m_stopBits( stopBits ) , m_ipaddress() , m_portnumber( -1 ) , m_timeOut( timeOut ) {} ConnectionConfig( ConnectionPort port, const std::string &ip, int portnum, int timeOut = -1 ) : m_port( port ) , m_baudRate( -1 ) , m_parity( Parity::PAR_NONE ) , m_dataBits( -1 ) , m_stopBits( -1 ) , m_ipaddress( ip ) , m_portnumber( portnum ) , m_timeOut( timeOut ) {} // Getters and Setters. Implemented to avoid outside meddling on the member variables. ConnectionType getType() const { return m_conType; } std::string getPort() const { return m_portMap.at(m_port); } int getBaudRate() const { return m_baudRate; } char getParity() const { return m_parityMap.at(m_parity); } int getDataBits() const { return m_dataBits; } int getStopBits() const { return m_stopBits; } std::string getIpAddress() const { return m_ipaddress; } int getTcpPort() const { return m_portnumber; } int getTimeOut() const { return m_timeOut; } private: ConnectionType m_conType; /// Serial connections ConnectionPort m_port; int m_baudRate; Parity m_parity; int m_dataBits; int m_stopBits; /// TCP connections std::string m_ipaddress; int m_portnumber; /// Generic int m_timeOut; std::unordered_map m_portMap = { { ConnectionPort::CP_EXTERNAL, "/dev/ttyUSB0" }, { ConnectionPort::CP_IOBUS, "/dev/ttyUSB1" } }; std::unordered_map m_parityMap = { { Parity::PAR_EVEN, 'E' }, { Parity::PAR_ODD, 'O' }, { Parity::PAR_NONE, 'N' } }; };