Blame view

src/ModbusConnections.h 2.84 KB
46785270   Peter M. Groen   Setting up workin...
1
2
3
4
5
6
7
8
9
10
11
  /****************************************************************************
   * Copyright (c) 2022 Priva B.V.
   ****************************************************************************/
  #pragma once
  
  // Flexblox
  #include "IModbusAdapter.h"
  #include "ModbusAdapter.h"
  
  // std
  #include <memory>
b85a3e4a   Peter M. Groen   Setting up workin...
12
  #include <mutex>
46785270   Peter M. Groen   Setting up workin...
13
14
15
  #include <string>
  #include <unordered_map>
  
91724967   Peter M. Groen   Fix whitespace
16
  ///
b85a3e4a   Peter M. Groen   Setting up workin...
17
18
  using AdapterList = std::vector<std::shared_ptr<IModbusAdapter>>;
  
91724967   Peter M. Groen   Fix whitespace
19
20
21
  /*!
   * \brief The ModbusConnections class
   */
46785270   Peter M. Groen   Setting up workin...
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
  class ModbusConnections
  {
  public:
      /*!
       * \brief ModbusConnections
       */
      explicit ModbusConnections();
  
      /*!
       * \brief ~ModbusConnections
       */
      virtual ~ModbusConnections();
  
      /*!
       * \brief CreateConnection
       * \param config
       * \return
       */
91724967   Peter M. Groen   Fix whitespace
40
      bool CreateConnection( const ConnectionConfig &config );
46785270   Peter M. Groen   Setting up workin...
41
42
43
44
45
46
47
  
      /*!
       * \brief DeleteConnection
       * \param portName
       * \param endpoint
       * \return
       */
91724967   Peter M. Groen   Fix whitespace
48
      bool DeleteConnection( const ConnectionPort portName, const std::string &endpoint = std::string() );
46785270   Peter M. Groen   Setting up workin...
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
  
      /*!
       * \brief ConnectionCount
       * \return
       */
      int ConnectionCount();
  
      /*!
       * \brief getConnection
       * \param portName
       * \param endpoint
       * \return
       */
      std::shared_ptr<IModbusAdapter> getConnection( const ConnectionPort portName, const std::string &endpoint = std::string() );
  
      // Convenient functions
      /*!
       * \brief getConnection
       * \param portName
       * \param ipAddress
       * \param tcpPortNumber
       * \return
       */
      std::shared_ptr<IModbusAdapter> getConnection( const ConnectionPort portName, const std::string &ipAddress, int tcpPortNumber );
  
b85a3e4a   Peter M. Groen   Setting up workin...
74
75
76
77
78
79
      /*!
       * \brief getConnections
       * \return
       */
      AdapterList getConnections();
  
46785270   Peter M. Groen   Setting up workin...
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
  private:
      /*!
       * \brief connectionExist
       * \param portName
       * \param endpoint
       * \return
       */
      std::shared_ptr<IModbusAdapter> connectionExist( const ConnectionPort portName, const std::string &endpoint = std::string() );
  
      /*!
       * \brief createEndPoint
       * \param ipAddress
       * \param portNumber
       * \return
       */
      std::string createEndPoint( const std::string &ipAddress, int portNumber );
  
      /*!
       * \brief createEndPoint
       * \param config
       * \return
       */
      std::string createEndPoint( const ConnectionConfig &config );
  
  private:
b85a3e4a   Peter M. Groen   Setting up workin...
105
106
      std::mutex m_mapSerialMutex;                                                        ///< Mutex protecting the serialmap
      std::mutex m_mapTcpMutex;                                                           ///< Mutex protecting the TCPmap
46785270   Peter M. Groen   Setting up workin...
107
108
109
      std::unordered_map<ConnectionPort, std::shared_ptr<IModbusAdapter>> m_mapSerial;    ///< Unordered map holding the Modbus connections By PortName
      std::unordered_map<std::string, std::shared_ptr<IModbusAdapter>>    m_mapTcp;       ///< Unordered map holding the Modbus connections By tcp://endpoint:port
  };