Commit 21acd1402bb64ccb2dc37625f4e8cf61d76d89f6

Authored by Peter M. Groen
1 parent 5718c325

Minor fixes

src/modbus.h
@@ -7,6 +7,8 @@ @@ -7,6 +7,8 @@
7 #pragma once 7 #pragma once
8 8
9 #include "imodbus.h" 9 #include "imodbus.h"
  10 +#include "modbusbase.h"
  11 +#include <memory>
10 12
11 namespace osdev { 13 namespace osdev {
12 namespace components { 14 namespace components {
@@ -19,10 +21,14 @@ public: @@ -19,10 +21,14 @@ public:
19 21
20 virtual ~ModBus() {} 22 virtual ~ModBus() {}
21 23
  24 + // Implementation
22 virtual bool Open(const ConnectionConfig &connection_config) override; 25 virtual bool Open(const ConnectionConfig &connection_config) override;
23 virtual bool Close() override; 26 virtual bool Close() override;
24 virtual std::vector<uint8_t> Read(const Request &request) override; 27 virtual std::vector<uint8_t> Read(const Request &request) override;
25 virtual std::vector<uint8_t> Write(const Request &request) override; 28 virtual std::vector<uint8_t> Write(const Request &request) override;
  29 +
  30 +private:
  31 + std::unique_ptr<ModbusBase> m_modbus;
26 }; 32 };
27 33
28 } /* End namespace modbus */ 34 } /* End namespace modbus */
src/modbustcp.cpp
@@ -6,6 +6,8 @@ @@ -6,6 +6,8 @@
6 */ 6 */
7 #include "modbustcp.h" 7 #include "modbustcp.h"
8 8
  9 +#include <netinet/tcp.h>
  10 +
9 using namespace osdev::components::modbus; 11 using namespace osdev::components::modbus;
10 12
11 ModbusTcp::ModbusTcp(const ConnectionConfig &con_config) 13 ModbusTcp::ModbusTcp(const ConnectionConfig &con_config)
@@ -44,9 +46,13 @@ bool ModbusTcp::Connect() @@ -44,9 +46,13 @@ bool ModbusTcp::Connect()
44 timeout.tv_sec = 20; // after 20 seconds connect() will timeout 46 timeout.tv_sec = 20; // after 20 seconds connect() will timeout
45 timeout.tv_usec = 0; 47 timeout.tv_usec = 0;
46 48
  49 + // Set the socket options..
  50 + int l_flag = 1;
47 51
48 setsockopt(m_socket, SOL_SOCKET, SO_SNDTIMEO, reinterpret_cast<const char *>(&timeout), sizeof(timeout)); 52 setsockopt(m_socket, SOL_SOCKET, SO_SNDTIMEO, reinterpret_cast<const char *>(&timeout), sizeof(timeout));
49 setsockopt(m_socket, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast<const char *>(&timeout), sizeof(timeout)); 53 setsockopt(m_socket, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast<const char *>(&timeout), sizeof(timeout));
  54 + setsockopt(m_socket, IPPROTO_TCP, TCP_NODELAY, reinterpret_cast<const char *>(&l_flag), sizeof(int));
  55 +
50 m_server.sin_family = AF_INET; 56 m_server.sin_family = AF_INET;
51 m_server.sin_addr.s_addr = inet_addr(m_host.c_str()); 57 m_server.sin_addr.s_addr = inet_addr(m_host.c_str());
52 m_server.sin_port = htons(m_port); 58 m_server.sin_port = htons(m_port);