1 #pragma once 2 3 #include "modbus/modbus_message.hpp" 4 5 #include <sdbusplus/async.hpp> 6 7 using MessageBase = phosphor::modbus::rtu::Message; 8 9 namespace phosphor::modbus::test 10 { 11 12 class MessageIntf : public MessageBase 13 { 14 friend class ServerTester; 15 }; 16 17 static constexpr uint8_t testDeviceAddress = 0xa; 18 constexpr uint16_t testSuccessReadHoldingRegisterOffset = 0x0102; 19 constexpr uint16_t testSuccessReadHoldingRegisterCount = 0x2; 20 constexpr uint16_t testSuccessReadHoldingRegisterSegmentedOffset = 0x0103; 21 constexpr std::array<uint16_t, testSuccessReadHoldingRegisterCount> 22 testSuccessReadHoldingRegisterResponse = {0x1234, 0x5678}; 23 constexpr uint16_t testFailureReadHoldingRegister = 0x0105; 24 25 class ServerTester 26 { 27 public: 28 explicit ServerTester(sdbusplus::async::context& ctx, int fd); 29 30 auto processRequests() -> sdbusplus::async::task<void>; 31 32 private: 33 void processMessage(MessageIntf& request, size_t requestSize, 34 MessageIntf& response, bool& segmentedResponse); 35 36 void processReadHoldingRegisters(MessageIntf& request, size_t requestSize, 37 MessageIntf& response, 38 bool& segmentedResponse); 39 40 int fd; 41 sdbusplus::async::fdio fdioInstance; 42 }; 43 } // namespace phosphor::modbus::test 44