Commit 21acd1402bb64ccb2dc37625f4e8cf61d76d89f6
1 parent
5718c325
Minor fixes
Showing
2 changed files
with
12 additions
and
0 deletions
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); |