Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/libslic3r/GCodeSender.hpp')
-rw-r--r--src/libslic3r/GCodeSender.hpp73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/libslic3r/GCodeSender.hpp b/src/libslic3r/GCodeSender.hpp
new file mode 100644
index 000000000..d7663ca55
--- /dev/null
+++ b/src/libslic3r/GCodeSender.hpp
@@ -0,0 +1,73 @@
+#ifndef slic3r_GCodeSender_hpp_
+#define slic3r_GCodeSender_hpp_
+
+#include "libslic3r.h"
+#include <queue>
+#include <string>
+#include <vector>
+#include <boost/asio.hpp>
+#include <boost/bind.hpp>
+#include <boost/thread.hpp>
+
+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<std::string> &lines, bool priority = false);
+ void send(const std::string &s, bool priority = false);
+ void disconnect();
+ bool error_status() const;
+ bool is_connected() const;
+ bool wait_connected(unsigned int timeout = 3) const;
+ size_t queue_size() const;
+ void pause_queue();
+ void resume_queue();
+ void purge_queue(bool priority = false);
+ std::vector<std::string> purge_log();
+ std::string getT() const;
+ std::string getB() const;
+ void set_DTR(bool on);
+ void reset();
+
+ private:
+ asio::io_service io;
+ asio::serial_port serial;
+ boost::thread background_thread;
+ boost::asio::streambuf read_buffer, write_buffer;
+ bool open; // whether the serial socket is connected
+ bool connected; // whether the printer is online
+ bool error;
+ mutable boost::mutex error_mutex;
+
+ // this mutex guards queue, priqueue, can_send, queue_paused, sent, last_sent
+ mutable boost::mutex queue_mutex;
+ std::queue<std::string> queue;
+ std::list<std::string> priqueue;
+ bool can_send;
+ bool queue_paused;
+ size_t sent;
+ std::deque<std::string> last_sent;
+
+ // this mutex guards log, T, B
+ mutable boost::mutex log_mutex;
+ std::queue<std::string> log;
+ std::string T, B;
+
+ void set_baud_rate(unsigned int baud_rate);
+ void set_error_status(bool e);
+ void do_send();
+ void on_write(const boost::system::error_code& error, size_t bytes_transferred);
+ void do_close();
+ void do_read();
+ void on_read(const boost::system::error_code& error, size_t bytes_transferred);
+ void send();
+};
+
+} // namespace Slic3r
+
+#endif /* slic3r_GCodeSender_hpp_ */