Commit ab279ee878a6f77e72fd6c7aa9f967d4d16bd3be

Authored by Peter M. Groen
1 parent ea10dfe9

Setting up new structure

include/modbus.h renamed to include/imodbus.h
src/CMakeLists.txt
... ... @@ -6,13 +6,14 @@ project_header(modbus-cpp)
6 6  
7 7 include(compiler)
8 8  
  9 +include_directories(
  10 + ${CMAKE_SOURCE_DIR}/include
  11 +)
  12 +
9 13 set(SRC_LIST
10   - ${CMAKE_CURRENT_SOURCE_DIR}/modbusbase.h
11   - ${CMAKE_CURRENT_SOURCE_DIR}/modbusbase.cpp
12   - ${CMAKE_CURRENT_SOURCE_DIR}/modbustcp.h
13   - ${CMAKE_CURRENT_SOURCE_DIR}/modbustcp.cpp
14   - #${CMAKE_CURRENT_SOURCE_DIR}/modbusrtu.h
15   - #${CMAKE_CURRENT_SOURCE_DIR}/modbusrtu.cpp
  14 + ${CMAKE_CURRENT_SOURCE_DIR}/imodbusport.h
  15 + ${CMAKE_CURRENT_SOURCE_DIR}/modbus.h
  16 + ${CMAKE_CURRENT_SOURCE_DIR}/modbus.cpp
16 17 ${CMAKE_CURRENT_SOURCE_DIR}/connectionconfig.h
17 18 ${CMAKE_CURRENT_SOURCE_DIR}/connectionconfig.cpp
18 19 )
... ...
src/imodbusport.h 0 → 100644
  1 +/*
  2 + * Copyright (c) 2022 Peter M. Groen
  3 + *
  4 + * This source code is licensed under the MIT license found in the
  5 + * LICENSE file in the root directory of this source tree.
  6 + */
  7 +#pragma once
  8 +
  9 +#include "connectionconfig.h"
  10 +#include <vector>
  11 +
  12 +namespace osdev {
  13 +namespace components {
  14 +namespace modbus {
  15 +
  16 +class IModbusPort
  17 +{
  18 +public:
  19 + IModbusPort(const ConnectionConfig &con_config);
  20 + virtual ~IModbusPort() {}
  21 +
  22 + // The standard device interface.
  23 + virtual bool Open() const = 0;
  24 + virtual bool Close() const = 0;
  25 + virtual int Read(uint8_t *buffer) const = 0;
  26 + virtual int Write(uint8_t *buffer, size_t length) const = 0;
  27 +};
  28 +
  29 +} /* End namespace modbus */
  30 +} /* End namespace components */
  31 +} /* End namespace osdev */
... ...
src/modbusbase.cpp renamed to src/modbus.cpp
... ... @@ -5,7 +5,7 @@
5 5 * LICENSE file in the root directory of this source tree.
6 6 */
7 7  
8   -#include "modbusbase.h"
  8 +#include "modbus.h"
9 9  
10 10 using namespace osdev::components::modbus;
11 11  
... ...
src/modbusbase.h renamed to src/modbus.h
... ... @@ -50,11 +50,11 @@ namespace components {
50 50 namespace modbus {
51 51  
52 52 // Modbus base class. Providing all Modbus PDUs without transport implementation
53   -class ModbusBase
  53 +class Modbus
54 54 {
55 55 public:
56   - ModbusBase();
57   - virtual ~ModbusBase();
  56 + Modbus();
  57 + virtual ~Modbus();
58 58  
59 59 // Pure virtuals. Override when inherited.
60 60 virtual bool Connect() = 0;
... ...
src/modbusrtu.cpp
1   -/*
2   - * Copyright (c) 2022 Peter M. Groen
3   - *
4   - * This source code is licensed under the MIT license found in the
5   - * LICENSE file in the root directory of this source tree.
6   - */
7   -#include "modbusrtu.h"
8   -
9   -using namespace osdev::components::modbus;
10   -
11   -ModbusRTU::ModbusRTU()
12   -{
13   -
14   -}
15   -
16   -bool ModbusRTU::Connect()
17   -{
18   -
19   -}
20   -
21   -void ModbusRTU::Close()
22   -{
23   -
24   -}
25   -
26   -ssize_t ModbusRTU::modbusSend(uint8_t *to_send, size_t length)
27   -{
28   -
29   -}
30   -
31   -ssize_t ModbusRTU::modbusReceive(uint8_t *buffer) const
32   -{
33   -
34   -}
src/modbusrtu.h
1   -/*
2   - * Copyright (c) 2022 Peter M. Groen
3   - *
4   - * This source code is licensed under the MIT license found in the
5   - * LICENSE file in the root directory of this source tree.
6   - */
7   -#pragma once
8   -
9   -#include "modbusbase.h"
10   -
11   -namespace osdev {
12   -namespace components {
13   -namespace modbus {
14   -
15   -class ModbusRTU : public ModbusBase
16   -{
17   -public:
18   - ModbusRTU();
19   -
20   - // Pure virtuals. Override when inherited.
21   - /*!
22   - * \brief Connect
23   - * \return
24   - */
25   - virtual bool Connect() override;
26   -
27   - /*!
28   - * \brief Close
29   - */
30   - virtual void Close() override;
31   -
32   -private:
33   - /*!
34   - * \brief modbusSend
35   - * \param to_send
36   - * \param length
37   - * \return
38   - */
39   - virtual ssize_t modbusSend(uint8_t *to_send, size_t length) override;
40   -
41   - /*!
42   - * \brief modbusReceive
43   - * \param buffer
44   - * \return
45   - */
46   - virtual ssize_t modbusReceive(uint8_t *buffer) const override;
47   -};
48   -
49   -} // End namespace modbus
50   -} // End namespace components
51   -} // End namespace osdev
src/modbustcp.cpp
1   -/*
2   - * Copyright (c) 2022 Peter M. Groen
3   - *
4   - * This source code is licensed under the MIT license found in the
5   - * LICENSE file in the root directory of this source tree.
6   - */
7   -#include "modbustcp.h"
8   -
9   -using namespace osdev::components::modbus;
10   -
11   -ModbusTCP::ModbusTCP(const ConnectionConfig &port_configuration)
12   -{
13   - setMaxMessageLength(260); // Maximum Messagelength over TCP
14   -}
15   -
16   -bool ModbusTCP::Connect()
17   -{
18   - if(m_host.empty() || m_port == 0)
19   - {
20   - LOG("Missing host and port");
21   - return false;
22   - }
23   -
24   - m_socket = socket(AF_INET, SOCK_STREAM, 0);
25   - if(!X_ISVALIDSOCKET(m_socket))
26   - {
27   - LOG("Errror Opening Socket");
28   - return false;
29   - }
30   -
31   - struct timeval timeout {};
32   - timeout.tv_sec = 20; // After 20 seconds connect() will timeout
33   - timeout.tv_usec = 0;
34   -
35   - setsockopt(m_socket, SOL_SOCKET, SO_SNDTIMEO, reinterpret_cast<const char *>(&timeout), sizeof(timeout));
36   - setsockopt(m_socket, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast<const char *>(&timeout), sizeof(timeout));
37   - m_server.sin_family = AF_INET;
38   - m_server.sin_addr.s_addr = inet_addr(m_host.c_str());
39   - m_server.sin_port = htons(m_port);
40   -
41   - if(!X_ISCONNECTSUCCEED(connect(m_socket, reinterpret_cast<SOCKADDR *>(&m_server), sizeof(m_server))))
42   - {
43   - LOG("Connection Error");
44   - return false;
45   - }
46   -
47   - ModbusBase::setConnected(true);
48   - return true;
49   -}
50   -
51   -void ModbusTCP::Close()
52   -{
53   - X_CLOSE_SOCKET(m_socket);
54   -}
55   -
56   -ssize_t ModbusTCP::modbusSend(uint8_t *to_send, size_t length)
57   -{
58   - uint32_t message_id = getMessageId();
59   - setMessageId(message_id++);
60   -
61   - return send(m_socket, reinterpret_cast<const char *>(to_send), static_cast<size_t>(length), 0);
62   -}
63   -
64   -ssize_t ModbusTCP::modbusReceive(uint8_t *buffer) const
65   -{
66   - return recv(m_socket, reinterpret_cast<char *>(buffer), getMaxMessageLength(), 0);
67   -}
src/modbustcp.h
1   -/*
2   - * Copyright (c) 2022 Peter M. Groen
3   - *
4   - * This source code is licensed under the MIT license found in the
5   - * LICENSE file in the root directory of this source tree.
6   - */
7   -#pragma once
8   -
9   -#include "modbusbase.h"
10   -#include "connectionconfig.h"
11   -
12   -#include <unistd.h>
13   -#include <sys/socket.h>
14   -#include <netinet/in.h>
15   -#include <arpa/inet.h>
16   -
17   -namespace osdev {
18   -namespace components {
19   -namespace modbus {
20   -
21   -using X_SOCKET = int;
22   -using SOCKADDR = struct sockaddr;
23   -using SOCKADDR_IN = struct sockaddr_in;
24   -
25   -#define X_ISVALIDSOCKET(s) ((s) >= 0)
26   -#define X_CLOSE_SOCKET(s) close(s)
27   -#define X_ISCONNECTSUCCEED(s) ((s) >= 0)
28   -
29   -/*!
30   - * \brief The ModbusTCP class
31   - */
32   -class ModbusTCP : public ModbusBase
33   -{
34   -public:
35   - /*!
36   - * \brief ModbusTCP
37   - * \param port_configuration
38   - */
39   - ModbusTCP(const ConnectionConfig &port_configuration);
40   -
41   - // Pure virtuals. Override when inherited.
42   - /*!
43   - * \brief Connect
44   - * \return
45   - */
46   - virtual bool Connect() override;
47   -
48   - /*!
49   - * \brief Close
50   - */
51   - virtual void Close() override;
52   -
53   -private: // Methods
54   - /*!
55   - * \brief modbusSend
56   - * \param to_send
57   - * \param length
58   - * \return
59   - */
60   - virtual ssize_t modbusSend(uint8_t *to_send, size_t length) override;
61   -
62   - /*!
63   - * \brief modbusReceive
64   - * \param buffer
65   - * \return
66   - */
67   - virtual ssize_t modbusReceive(uint8_t *buffer) const override;
68   -
69   -private: // Members
70   - uint16_t m_port {};
71   - std::string m_host{};
72   - X_SOCKET m_socket{};
73   - SOCKADDR_IN m_server{};
74   -};
75   -
76   -} // End namespace modbus
77   -} // End namespace components
78   -} // End namespace osdev