Modbus cpp 0.1
Loading...
Searching...
No Matches
modbusCell.hpp
1// Modbus for c++ <https://github.com/Mazurel/Modbus>
2// Copyright (c) 2020 Mateusz Mazur aka Mazurel
3// Licensed under: MIT License <http://opensource.org/licenses/MIT>
4
5#pragma once
6
7#include <cstdint>
8#include <stdexcept>
9#include <variant>
10
14namespace MB {
20 private:
21 std::variant<uint16_t, bool> _value;
22
23 public:
27 constexpr ModbusCell() = default;
28
33 constexpr ModbusCell(uint16_t reg) : _value(reg) {};
34
39 constexpr ModbusCell(bool coil) : _value(coil) {};
40
41 ModbusCell(const ModbusCell &other) noexcept = default;
42 ModbusCell &operator=(const ModbusCell &other) noexcept = default;
43 ModbusCell &operator=(ModbusCell &&other) noexcept = default;
44
50 [[nodiscard]] static ModbusCell initReg(uint16_t reg) { return ModbusCell(reg); }
51
57 [[nodiscard]] static ModbusCell initCoil(bool coil) { return ModbusCell(coil); }
58
63 [[nodiscard]] bool isCoil() const { return std::holds_alternative<bool>(_value); };
64
69 [[nodiscard]] bool isReg() const { return std::holds_alternative<uint16_t>(_value); };
70
75 bool &coil() {
76 if (isReg())
77 _value = static_cast<bool>(std::get<uint16_t>(_value));
78 return std::get<bool>(_value);
79 };
80
85 uint16_t &reg() {
86 if (isCoil())
87 _value = static_cast<uint16_t>(std::get<bool>(_value));
88 return std::get<uint16_t>(_value);
89 };
90
96 [[nodiscard]] const bool &coil() const { return std::get<bool>(_value); };
97
103 [[nodiscard]] const uint16_t &reg() const { return std::get<uint16_t>(_value); };
104
109 [[nodiscard]] std::string toString() const noexcept {
110 return isCoil() ? ((coil()) ? "true" : "false") : std::to_string(reg());
111 }
112};
113} // namespace MB
Class that represents single modbus cell, it is either coil(bool) or reg(uint16_t).
Definition modbusCell.hpp:19
uint16_t & reg()
Returns register value, changes cell type if necessary.
Definition modbusCell.hpp:85
bool isCoil() const
Checks if cell is coil.
Definition modbusCell.hpp:63
constexpr ModbusCell(bool coil)
Constructs cell with coil value.
Definition modbusCell.hpp:39
const bool & coil() const
Returns coil value.
Definition modbusCell.hpp:96
bool isReg() const
Checks if cell is register.
Definition modbusCell.hpp:69
constexpr ModbusCell()=default
Constructs cell with register type equal to 0.
static ModbusCell initReg(uint16_t reg)
Static wrapper for cell construction.
Definition modbusCell.hpp:50
bool & coil()
Returns coil value, changes cell type if necessary.
Definition modbusCell.hpp:75
static ModbusCell initCoil(bool coil)
Static wrapper for cell construction.
Definition modbusCell.hpp:57
std::string toString() const noexcept
Definition modbusCell.hpp:109
const uint16_t & reg() const
Returns register value.
Definition modbusCell.hpp:103
constexpr ModbusCell(uint16_t reg)
Constructs cell with register value.
Definition modbusCell.hpp:33
Definition crc.hpp:5