ConnectionConfig.h 2.35 KB
#pragma once

#include <string>
#include <unordered_map>

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<ConnectionPort, std::string> m_portMap =
    {
        { ConnectionPort::CP_EXTERNAL, "/dev/ttyUSB0" },
        { ConnectionPort::CP_IOBUS, "/dev/ttyUSB1" }
    };

    std::unordered_map<Parity, char> m_parityMap =
    {
        { Parity::PAR_EVEN, 'E' },
        { Parity::PAR_ODD, 'O' },
        { Parity::PAR_NONE, 'N' }
    };
};