#ifndef _MSGHANDLER_HPP_ #define _MSGHANDLER_HPP_ #include #include #include #include #include "WeighingDDSType.hpp" struct iomap_t { //name, (port, value) std::map> omap; std::map> imap; }; class MsgHandler { public: int fd; std::string device; uint8_t device_id; iomap_t iomap; MsgHandler(); ~MsgHandler() = default; virtual bool OpenPort(const std::string& port, const std::string& baudrate); virtual int SendDeviceMsg(std::vector& data); virtual int RecvDeviceMsg(std::vector& data, int timeoutMs); int SendMsg(const void *buf, size_t len); int RecvMsg(void *buf, size_t len, int timeoutMs); bool isOpen() const { return fd != -1; } void ClosePort(); void HandleBarCommand(const WeighingSystem::BarCommandUpdate& cmd); // 前拦车器两个 GPIO 显式 init(export + direction + 写 0) // 失败也不抛异常,保证调用点可以无脑连续调 void InitFrontBarGpioPair(); private: }; #endif