#ifndef _MSGHANDLER_HPP_ #define _MSGHANDLER_HPP_ #include #include #include #include class MsgHandler { public: int fd; std::string device; std::vector m_PrintData; MsgHandler(); ~MsgHandler() = default; void HandleDdsMsg(const std::map& msg); void EncodeMsg(const std::map& msg); bool SetDevice(const std::string& device); virtual bool OpenPort(const std::string& port, const std::string& baudrate); virtual int SendDeviceMsg(const std::vector& data); virtual int RecvDeviceMsg(std::vector& data, int timeoutMs); int SendMsg(const std::vector& data); int RecvMsg(std::vector& data, int timeoutMs); bool isOpen() const { return fd != -1; } void ClosePort(); void SendDeviceMsgChunked(const std::vector& data, size_t chunkSize = 256, unsigned int interChunkUs = 3000); private: std::vector BuildLine(int m_max, const std::map& PointList, int no_line_min = 0, int no_line_max = 0); //行线条生成器 std::vector BuildStringLine(std::map& PointList); //行线条生成器 std::vector BuildStringLine_HSK33(std::map& PointList); //行线条生成器 std::vector BuildStringLine_RawBytes(const std::map& PointList); void Page_ClearAndSet(std::vector& Data, char * h1h2h3h4); void Page_ESCL (std::vector& Data, const char *n1n2, const char *x1x2x3x4, const char *y1y2y3y4, const char *x5x6x7x8, const char *y5y6y7y8, char d, char w); void Page_ESCPC(std::vector& Data, const char *n1n2, const char *x1x2x3x4, const char *y1y2y3y4, char w, char h, char c, const char * r1r2, const char * s1s2); void Page_ESCRC(std::vector& Data, const char *n1n2, const char *str); void Page_ESCH(std::vector& Data, char n, char *x1x2x3x4, char *y1y2y3y4, char *bmp, int bmpsize); void Page_Cut(std::vector& Data); void Page_End(std::vector& Data); void GtstrLength(int iVal, char *p); bool is_chinese_char(const std::string& str, size_t start_byte); int get_utf8_char_width(const std::string& str, size_t start_byte); size_t get_utf8_display_width(const std::string& str); std::vector split_utf8_by_width(const std::string& str, size_t max_width); bool check_odd(const std::string date); void Print1_1(const std::map& msg); // ----- 新增:章图读取与放大(与 PrintTest/main.c 一致) ----- bool LoadStampHexImage(const std::string& path, std::vector& out); bool EnlargeStampNearest(const std::vector& src, int src_w, int src_h, int scale, std::vector& dst); }; #endif