Blame view

src/ModbusConnections.h 2.79 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>
  
b85a3e4a   Peter M. Groen   Setting up workin...
16
17
  using AdapterList = std::vector<std::shared_ptr<IModbusAdapter>>;
  
46785270   Peter M. Groen   Setting up workin...
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  class ModbusConnections
  {
  public:
      /*!
       * \brief ModbusConnections
       */
      explicit ModbusConnections();
  
      /*!
       * \brief ~ModbusConnections
       */
      virtual ~ModbusConnections();
  
      /*!
       * \brief CreateConnection
       * \param config
       * \return
       */
      bool    CreateConnection( const ConnectionConfig &config );
  
      /*!
       * \brief DeleteConnection
       * \param portName
       * \param endpoint
       * \return
       */
      bool    DeleteConnection( const ConnectionPort portName, const std::string &endpoint = std::string() );
  
      /*!
       * \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...
70
71
72
73
74
75
      /*!
       * \brief getConnections
       * \return
       */
      AdapterList getConnections();
  
46785270   Peter M. Groen   Setting up workin...
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
  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...
101
102
      std::mutex m_mapSerialMutex;                                                        ///< Mutex protecting the serialmap
      std::mutex m_mapTcpMutex;                                                           ///< Mutex protecting the TCPmap
46785270   Peter M. Groen   Setting up workin...
103
104
105
      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
  };