Prusa Slicer 2.6.0
Loading...
Searching...
No Matches
Slic3r::MKS Class Reference

#include <src/slic3r/Utils/MKS.hpp>

+ Inheritance diagram for Slic3r::MKS:
+ Collaboration diagram for Slic3r::MKS:

Public Types

typedef Http::ProgressFn ProgressFn
 
typedef std::function< void(wxString)> ErrorFn
 
typedef std::function< void(wxString, wxString)> InfoFn
 

Public Member Functions

 MKS (DynamicPrintConfig *config)
 
 ~MKS () override=default
 
const char * get_name () const override
 
bool test (wxString &curl_msg) const override
 
wxString get_test_ok_msg () const override
 
wxString get_test_failed_msg (wxString &msg) const override
 
bool upload (PrintHostUpload upload_data, ProgressFn prorgess_fn, ErrorFn error_fn, InfoFn info_fn) const override
 
bool has_auto_discovery () const override
 
bool can_test () const override
 
PrintHostPostUploadActions get_post_upload_actions () const override
 
std::string get_host () const override
 
virtual bool supports_multiple_printers () const
 
virtual bool get_groups (wxArrayString &) const
 
virtual bool get_printers (wxArrayString &) const
 
virtual bool get_storage (wxArrayString &, wxArrayString &) const
 

Static Public Member Functions

static PrintHostget_print_host (DynamicPrintConfig *config)
 

Protected Member Functions

virtual wxString format_error (const std::string &body, const std::string &error, unsigned status) const
 

Private Member Functions

std::string get_upload_url (const std::string &filename) const
 
bool start_print (wxString &msg, const std::string &filename) const
 
int get_err_code_from_body (const std::string &body) const
 

Private Attributes

std::string m_host
 
std::string m_console_port
 

Detailed Description

Member Typedef Documentation

◆ ErrorFn

typedef std::function<void(wxString )> Slic3r::PrintHost::ErrorFn
inherited

◆ InfoFn

typedef std::function<void(wxString , wxString )> Slic3r::PrintHost::InfoFn
inherited

◆ ProgressFn

Constructor & Destructor Documentation

◆ MKS()

Slic3r::MKS::MKS ( DynamicPrintConfig config)
explicit
35 :
36 m_host(config->opt_string("print_host")), m_console_port("8080")
37{}
std::string m_console_port
Definition MKS.hpp:33
std::string m_host
Definition MKS.hpp:32

◆ ~MKS()

Slic3r::MKS::~MKS ( )
overridedefault

Member Function Documentation

◆ can_test()

bool Slic3r::MKS::can_test ( ) const
inlineoverridevirtual

Implements Slic3r::PrintHost.

27{ return true; }

◆ format_error()

wxString Slic3r::PrintHost::format_error ( const std::string &  body,
const std::string &  error,
unsigned  status 
) const
protectedvirtualinherited
67{
68 if (status != 0) {
69 auto wxbody = wxString::FromUTF8(body.data());
70 return wxString::Format("HTTP %u: %s", status, wxbody);
71 } else {
72 return wxString::FromUTF8(error.data());
73 }
74}
static char error[256]
Definition tga.cpp:50

References error.

Referenced by Slic3r::Duet::connect(), Slic3r::PrusaLink::post_inner(), Slic3r::PrusaLink::put_inner(), Slic3r::Duet::start_print(), Slic3r::AstroBox::test(), Slic3r::FlashAir::test(), Slic3r::Moonraker::test(), Slic3r::OctoPrint::test(), Slic3r::PrusaLink::test(), Slic3r::Repetier::test(), Slic3r::PrusaLink::test_with_method_check(), Slic3r::AstroBox::upload(), Slic3r::Duet::upload(), Slic3r::FlashAir::upload(), upload(), Slic3r::Moonraker::upload(), Slic3r::Repetier::upload(), and Slic3r::OctoPrint::upload_inner_with_host().

+ Here is the caller graph for this function:

◆ get_err_code_from_body()

int Slic3r::MKS::get_err_code_from_body ( const std::string &  body) const
private
141{
142 pt::ptree root;
143 std::istringstream iss(body); // wrap returned json to istringstream
144 pt::read_json(iss, root);
145
146 return root.get<int>("err", 0);
147}

Referenced by upload().

+ Here is the caller graph for this function:

◆ get_groups()

virtual bool Slic3r::PrintHost::get_groups ( wxArrayString &  ) const
inlinevirtualinherited

Reimplemented in Slic3r::Repetier.

65{ return false; }

◆ get_host()

std::string Slic3r::MKS::get_host ( ) const
inlineoverridevirtual

Implements Slic3r::PrintHost.

29{ return m_host; }

References m_host.

◆ get_name()

const char * Slic3r::MKS::get_name ( ) const
overridevirtual

Implements Slic3r::PrintHost.

39{ return "MKS"; }

◆ get_post_upload_actions()

PrintHostPostUploadActions Slic3r::MKS::get_post_upload_actions ( ) const
inlineoverridevirtual

◆ get_print_host()

PrintHost * Slic3r::PrintHost::get_print_host ( DynamicPrintConfig config)
staticinherited
35{
37
38 {
39 const auto opt = config->option<ConfigOptionEnum<PrinterTechnology>>("printer_technology");
40 if (opt != nullptr) {
41 tech = opt->value;
42 }
43 }
44
45 if (tech == ptFFF) {
46 const auto opt = config->option<ConfigOptionEnum<PrintHostType>>("host_type");
47 const auto host_type = opt != nullptr ? opt->value : htOctoPrint;
48
49 switch (host_type) {
50 case htOctoPrint: return new OctoPrint(config);
51 case htDuet: return new Duet(config);
52 case htFlashAir: return new FlashAir(config);
53 case htAstroBox: return new AstroBox(config);
54 case htRepetier: return new Repetier(config);
55 case htPrusaLink: return new PrusaLink(config);
56 case htPrusaConnect: return new PrusaConnect(config);
57 case htMKS: return new MKS(config);
58 case htMoonraker: return new Moonraker(config);
59 default: return nullptr;
60 }
61 } else {
62 return new SL1Host(config);
63 }
64}
PrinterTechnology
Definition Config.hpp:205
@ ptFFF
Definition Config.hpp:207
@ htMoonraker
Definition PrintConfig.hpp:47
@ htPrusaLink
Definition PrintConfig.hpp:47
@ htRepetier
Definition PrintConfig.hpp:47
@ htMKS
Definition PrintConfig.hpp:47
@ htPrusaConnect
Definition PrintConfig.hpp:47
@ htDuet
Definition PrintConfig.hpp:47
@ htOctoPrint
Definition PrintConfig.hpp:47
@ htFlashAir
Definition PrintConfig.hpp:47
@ htAstroBox
Definition PrintConfig.hpp:47
ConfigOptionEnum< PrinterTechnology >
Definition PrintConfig.hpp:1079

References Slic3r::htAstroBox, Slic3r::htDuet, Slic3r::htFlashAir, Slic3r::htMKS, Slic3r::htMoonraker, Slic3r::htOctoPrint, Slic3r::htPrusaConnect, Slic3r::htPrusaLink, Slic3r::htRepetier, Slic3r::ConfigBase::option(), Slic3r::ptFFF, and Slic3r::ConfigOptionSingle< T >::value.

Referenced by Slic3r::GUI::PhysicalPrinterDialog::build_printhost_settings(), Slic3r::GUI::PhysicalPrinterDialog::update_printers(), and Slic3r::GUI::PhysicalPrinterDialog::update_printhost_buttons().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ get_printers()

virtual bool Slic3r::PrintHost::get_printers ( wxArrayString &  ) const
inlinevirtualinherited

Reimplemented in Slic3r::Repetier.

66{ return false; }

◆ get_storage()

virtual bool Slic3r::PrintHost::get_storage ( wxArrayString &  ,
wxArrayString &   
) const
inlinevirtualinherited

Reimplemented in Slic3r::PrusaLink, and Slic3r::PrusaConnect.

69{ return false; }

◆ get_test_failed_msg()

wxString Slic3r::MKS::get_test_failed_msg ( wxString &  msg) const
overridevirtual

Implements Slic3r::PrintHost.

60{
61 return GUI::format_wxstr("%s: %s", _L("Could not connect to MKS"), msg);
62}
wxString format_wxstr(const char *fmt, TArgs &&... args)
Definition format.hpp:42
#define _L(s)
Definition I18N.hpp:3

References _L, and Slic3r::GUI::format_wxstr().

+ Here is the call graph for this function:

◆ get_test_ok_msg()

wxString Slic3r::MKS::get_test_ok_msg ( ) const
overridevirtual

Implements Slic3r::PrintHost.

55{
56 return _(L("Connection to MKS works correctly."));
57}
#define _(msgid)
Definition getopt.c:87
#define L(s)
Definition I18N.hpp:18

References _, and L.

◆ get_upload_url()

std::string Slic3r::MKS::get_upload_url ( const std::string &  filename) const
private
114{
115 return (boost::format("http://%1%/upload?X-Filename=%2%")
116 % m_host
117 % Http::url_encode(filename)).str();
118}
static std::string url_encode(const std::string &str)
Definition Http.cpp:653

References m_host, and Slic3r::Http::url_encode().

Referenced by upload().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ has_auto_discovery()

bool Slic3r::MKS::has_auto_discovery ( ) const
inlineoverridevirtual

Implements Slic3r::PrintHost.

26{ return false; }

◆ start_print()

bool Slic3r::MKS::start_print ( wxString &  msg,
const std::string &  filename 
) const
private
121{
122 // For some reason printer firmware does not want to respond on gcode commands immediately after file upload.
123 // So we just introduce artificial delay to workaround it.
124 // TODO: Inspect reasons
125 std::this_thread::sleep_for(std::chrono::milliseconds(1500));
126
127 Utils::TCPConsole console(m_host, m_console_port);
128
129 console.enqueue_cmd(std::string("M23 ") + filename);
130 console.enqueue_cmd("M24");
131
132 bool ret = console.run_queue();
133
134 if (!ret)
135 msg = wxString::FromUTF8(console.error_message().c_str());
136
137 return ret;
138}

References Slic3r::Utils::TCPConsole::enqueue_cmd(), Slic3r::Utils::TCPConsole::error_message(), m_console_port, m_host, and Slic3r::Utils::TCPConsole::run_queue().

Referenced by upload().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ supports_multiple_printers()

virtual bool Slic3r::PrintHost::supports_multiple_printers ( ) const
inlinevirtualinherited

Reimplemented in Slic3r::Repetier.

60{ return false; }

◆ test()

bool Slic3r::MKS::test ( wxString &  curl_msg) const
overridevirtual

Implements Slic3r::PrintHost.

42{
43 Utils::TCPConsole console(m_host, m_console_port);
44
45 console.enqueue_cmd("M105");
46 bool ret = console.run_queue();
47
48 if (!ret)
49 msg = wxString::FromUTF8(console.error_message().c_str());
50
51 return ret;
52}

References Slic3r::Utils::TCPConsole::enqueue_cmd(), Slic3r::Utils::TCPConsole::error_message(), m_console_port, m_host, and Slic3r::Utils::TCPConsole::run_queue().

+ Here is the call graph for this function:

◆ upload()

bool Slic3r::MKS::upload ( PrintHostUpload  upload_data,
ProgressFn  prorgess_fn,
ErrorFn  error_fn,
InfoFn  info_fn 
) const
overridevirtual

Implements Slic3r::PrintHost.

65{
66 bool res = true;
67
68 auto upload_cmd = get_upload_url(upload_data.upload_path.string());
69 BOOST_LOG_TRIVIAL(info) << boost::format("MKS: Uploading file %1%, filepath: %2%, print: %3%, command: %4%")
70 % upload_data.source_path
71 % upload_data.upload_path
72 % (upload_data.post_action == PrintHostPostUploadAction::StartPrint)
73 % upload_cmd;
74
75 auto http = Http::post(std::move(upload_cmd));
76 http.set_post_body(upload_data.source_path);
77
78 http.on_complete([&](std::string body, unsigned status) {
79 BOOST_LOG_TRIVIAL(debug) << boost::format("MKS: File uploaded: HTTP %1%: %2%") % status % body;
80
81 int err_code = get_err_code_from_body(body);
82 if (err_code != 0) {
83 BOOST_LOG_TRIVIAL(error) << boost::format("MKS: Request completed but error code was received: %1%") % err_code;
84 error_fn(format_error(body, L("Unknown error occured"), 0));
85 res = false;
86 }
87 else if (upload_data.post_action == PrintHostPostUploadAction::StartPrint) {
88 wxString errormsg;
89 res = start_print(errormsg, upload_data.upload_path.string());
90 if (!res) {
91 error_fn(std::move(errormsg));
92 }
93 }
94 })
95 .on_error([&](std::string body, std::string error, unsigned status) {
96 BOOST_LOG_TRIVIAL(error) << boost::format("MKS: Error uploading file: %1%, HTTP %2%, body: `%3%`") % error % status % body;
97 error_fn(format_error(body, error, status));
98 res = false;
99 })
100 .on_progress([&](Http::Progress progress, bool& cancel) {
101 prorgess_fn(std::move(progress), cancel);
102 if (cancel) {
103 // Upload was canceled
104 BOOST_LOG_TRIVIAL(info) << "MKS: Upload canceled";
105 res = false;
106 }
107 }).perform_sync();
108
109
110 return res;
111}
static Http post(std::string url)
Definition Http.cpp:612
bool start_print(wxString &msg, const std::string &filename) const
Definition MKS.cpp:120
int get_err_code_from_body(const std::string &body) const
Definition MKS.cpp:140
std::string get_upload_url(const std::string &filename) const
Definition MKS.cpp:113
virtual wxString format_error(const std::string &body, const std::string &error, unsigned status) const
Definition PrintHost.cpp:66

References error, Slic3r::PrintHost::format_error(), get_err_code_from_body(), get_upload_url(), L, Slic3r::Http::post(), Slic3r::PrintHostUpload::post_action, Slic3r::PrintHostUpload::source_path, start_print(), Slic3r::StartPrint, and Slic3r::PrintHostUpload::upload_path.

+ Here is the call graph for this function:

Member Data Documentation

◆ m_console_port

std::string Slic3r::MKS::m_console_port
private

Referenced by start_print(), and test().

◆ m_host

std::string Slic3r::MKS::m_host
private

The documentation for this class was generated from the following files: