#pragma once #include #include class TtyProtocolWriter { public: explicit TtyProtocolWriter(std::string path); ~TtyProtocolWriter(); TtyProtocolWriter(const TtyProtocolWriter&) = delete; TtyProtocolWriter& operator=(const TtyProtocolWriter&) = delete; TtyProtocolWriter(TtyProtocolWriter&& other) noexcept; TtyProtocolWriter& operator=(TtyProtocolWriter&& other) noexcept; void emit_packet_start() const; void emit_step(uint16_t index, int16_t ch1_avg, int16_t ch2_avg) const; const std::string& path() const; private: void write_frame(uint16_t word0, uint16_t word1, uint16_t word2, uint16_t word3) const; void close_fd() noexcept; void close_slave_fd() noexcept; void remove_owned_link() noexcept; std::string path_; #ifndef _WIN32 int fd_ = -1; int slave_fd_ = -1; std::string slave_path_; bool owns_link_ = false; #endif };