#ifndef slic3r_GCodeSender_hpp_ #define slic3r_GCodeSender_hpp_ #ifdef BOOST_LIBS #include #include #include #include #include #include #include namespace Slic3r { namespace asio = boost::asio; class GCodeSender : private boost::noncopyable { public: GCodeSender(); ~GCodeSender(); bool connect(std::string devname, unsigned int baud_rate); void send(const std::vector &lines); void send(const std::string &s); void disconnect(); bool error_status() const; bool is_connected() const; size_t queue_size() const; void pause_queue(); void resume_queue(); private: asio::io_service io; asio::serial_port serial; boost::thread background_thread; boost::asio::streambuf read_buffer; bool open; // whether the serial socket is connected bool connected; // whether the printer is online bool error; mutable boost::mutex error_mutex; mutable boost::mutex queue_mutex; std::queue queue; bool can_send; bool queue_paused; size_t sent; void set_baud_rate(unsigned int baud_rate); void set_error_status(bool e); void do_close(); void do_read(); void on_read(const boost::system::error_code& error, size_t bytes_transferred); void send(); }; } #endif #endif