Commit 5718c3258bd19b0e0c1d4c45519f8bf829be8f24
1 parent
fed64770
Implementing Modbus
Showing
6 changed files
with
90 additions
and
14 deletions
src/connectionconfig.h renamed to include/connectionconfig.h
include/imodbus.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 "request.h" | |
| 10 | +#include "connectionconfig.h" | |
| 11 | +#include <vector> | |
| 12 | + | |
| 13 | +namespace osdev { | |
| 14 | +namespace components { | |
| 15 | +namespace modbus { | |
| 16 | + | |
| 17 | +class IModBus | |
| 18 | +{ | |
| 19 | +public: | |
| 20 | + virtual ~IModBus() {} | |
| 21 | + | |
| 22 | + virtual bool Open(const ConnectionConfig &connection_config) = 0; | |
| 23 | + virtual bool Close() = 0; | |
| 24 | + virtual std::vector<uint8_t> Read(const Request &request) = 0; | |
| 25 | + virtual std::vector<uint8_t> Write(const Request &request) = 0; | |
| 26 | +}; | |
| 27 | + | |
| 28 | +} /* End namespace modbus */ | |
| 29 | +} /* End namespace components */ | |
| 30 | +} /* End namespace osdev */ | ... | ... |
include/request.h
| ... | ... | @@ -111,25 +111,25 @@ public: |
| 111 | 111 | /// @note never change the length of this vector. |
| 112 | 112 | std::vector<uint8_t> getDataBuffer() const {return m_dataBuffer;} |
| 113 | 113 | |
| 114 | - /// @return Callbacks registered to call when new data is available. | |
| 115 | - /// @note Functionn pointer returns False if the device state is OFFLINE. True, otherwise. | |
| 116 | - std::vector<std::function<bool(Response)>> callbacks; | |
| 117 | - | |
| 118 | 114 | private: |
| 119 | 115 | /// Function code of this request. |
| 120 | - FunctionCode m_functionCode; | |
| 116 | + FunctionCode m_functionCode = FunctionCode::FC_UNKNOWN; | |
| 121 | 117 | |
| 122 | 118 | /// SlaveID of this request. |
| 123 | - uint8_t m_slaveId; | |
| 119 | + uint8_t m_slaveId = 0; | |
| 124 | 120 | |
| 125 | 121 | /// Start address of the register for this request |
| 126 | - uint8_t m_startAddress; | |
| 122 | + uint8_t m_startAddress = 0x00; | |
| 127 | 123 | |
| 128 | 124 | /// Amount of registers to read/write in this request |
| 129 | - uint8_t m_numberOfRegisters; | |
| 125 | + uint8_t m_numberOfRegisters = 0x00; | |
| 130 | 126 | |
| 131 | 127 | /// Data to send to the device; must be the same size as \ref m_numberOfItems. |
| 132 | - std::vector<uint8_t> m_dataBuffer; | |
| 128 | + std::vector<uint8_t> m_dataBuffer = {}; | |
| 129 | + | |
| 130 | + /// @return Callbacks registered to call when new data is available. | |
| 131 | + /// @note Functionn pointer returns False if the device state is OFFLINE. True, otherwise. | |
| 132 | + std::vector<std::function<bool(Response)>> callbacks = {}; | |
| 133 | 133 | }; |
| 134 | 134 | |
| 135 | 135 | } /* End namespace modbus */ | ... | ... |
src/CMakeLists.txt
| ... | ... | @@ -19,7 +19,6 @@ set(SRC_LIST |
| 19 | 19 | ${CMAKE_CURRENT_SOURCE_DIR}/modbustcp.cpp |
| 20 | 20 | ${CMAKE_CURRENT_SOURCE_DIR}/modbusrtu.h |
| 21 | 21 | ${CMAKE_CURRENT_SOURCE_DIR}/modbusrtu.cpp |
| 22 | - ${CMAKE_CURRENT_SOURCE_DIR}/connectionconfig.h | |
| 23 | 22 | ${CMAKE_CURRENT_SOURCE_DIR}/connectionconfig.cpp |
| 24 | 23 | ) |
| 25 | 24 | ... | ... |
src/modbus.cpp
| 1 | 1 | #include "modbus.h" |
| 2 | 2 | |
| 3 | +using namespace osdev::components::modbus; | |
| 4 | + | |
| 3 | 5 | ModBus::ModBus() |
| 4 | 6 | { |
| 5 | 7 | |
| 6 | 8 | } |
| 9 | + | |
| 10 | +bool ModBus::Open(const ConnectionConfig &connection_config) | |
| 11 | +{ | |
| 12 | + (void)connection_config; | |
| 13 | + | |
| 14 | + return true; | |
| 15 | +} | |
| 16 | + | |
| 17 | +bool ModBus::Close() | |
| 18 | +{ | |
| 19 | + return true; | |
| 20 | +} | |
| 21 | + | |
| 22 | +std::vector<uint8_t> ModBus::Read(const Request &request) | |
| 23 | +{ | |
| 24 | + (void)request; | |
| 25 | + | |
| 26 | + return std::vector<uint8_t>(); | |
| 27 | +} | |
| 28 | + | |
| 29 | +std::vector<uint8_t> ModBus::Write(const Request &request) | |
| 30 | +{ | |
| 31 | + (void)request; | |
| 32 | + | |
| 33 | + return std::vector<uint8_t>(); | |
| 34 | +} | ... | ... |
src/modbus.h
| 1 | -#ifndef MODBUS_H | |
| 2 | -#define MODBUS_H | |
| 1 | +/* | |
| 2 | + * Copyright (c) 2023 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 | |
| 3 | 8 | |
| 9 | +#include "imodbus.h" | |
| 4 | 10 | |
| 5 | -class ModBus | |
| 11 | +namespace osdev { | |
| 12 | +namespace components { | |
| 13 | +namespace modbus { | |
| 14 | + | |
| 15 | +class ModBus : public IModBus | |
| 6 | 16 | { |
| 7 | 17 | public: |
| 8 | 18 | ModBus(); |
| 19 | + | |
| 20 | + virtual ~ModBus() {} | |
| 21 | + | |
| 22 | + virtual bool Open(const ConnectionConfig &connection_config) override; | |
| 23 | + virtual bool Close() override; | |
| 24 | + virtual std::vector<uint8_t> Read(const Request &request) override; | |
| 25 | + virtual std::vector<uint8_t> Write(const Request &request) override; | |
| 9 | 26 | }; |
| 10 | 27 | |
| 11 | -#endif // MODBUS_H | |
| 28 | +} /* End namespace modbus */ | |
| 29 | +} /* End namespace components */ | |
| 30 | +} /* End namespace osdev */ | ... | ... |