#pragma once #include "modbus/modbus_message.hpp" #include using MessageBase = phosphor::modbus::rtu::Message; namespace phosphor::modbus::test { class MessageIntf : public MessageBase { friend class ServerTester; }; // Read Holding Registers Testing Constants static constexpr uint8_t testDeviceAddress = 0xa; constexpr uint16_t testSuccessReadHoldingRegisterOffset = 0x0102; constexpr uint16_t testSuccessReadHoldingRegisterCount = 0x2; constexpr uint16_t testSuccessReadHoldingRegisterSegmentedOffset = 0x0103; constexpr std::array testSuccessReadHoldingRegisterResponse = {0x1234, 0x5678}; constexpr uint16_t testFailureReadHoldingRegister = 0x0105; // Device Inventory Testing Constants constexpr uint16_t testReadHoldingRegisterModelOffset = 0x0112; constexpr uint16_t testReadHoldingRegisterModelCount = 0x8; constexpr std::array testReadHoldingRegisterModel = {0x5244, 0x4630, 0x3430, 0x4453, 0x5335, 0x3139, 0x0000, 0x3000}; constexpr std::string testReadHoldingRegisterModelStr = "RDF040DSS519"; class ServerTester { public: explicit ServerTester(sdbusplus::async::context& ctx, int fd); auto processRequests() -> sdbusplus::async::task; private: void processMessage(MessageIntf& request, size_t requestSize, MessageIntf& response, bool& segmentedResponse); void processReadHoldingRegisters(MessageIntf& request, size_t requestSize, MessageIntf& response, bool& segmentedResponse); int fd; sdbusplus::async::fdio fdioInstance; sdbusplus::async::mutex mutex; }; } // namespace phosphor::modbus::test