mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-07 07:41:06 +00:00
* Ignore Clipper, libpng, mcut and Boost.Polygon Internals in clang-tidy Each only works through a wrapper or umbrella header: libslic3r/clipper.hpp or clipper_z.hpp configure Clipper before including it, png.h pulls in libpng's config headers, and Boost.Polygon's headers only compile through polygon.hpp or voronoi.hpp. * Ignore minilzo's Config Headers in clang-tidy lzoconf.h and lzodefs.h are internal to minilzo.h, which is what the code includes. * Add Missing Includes Across the Remaining Sources and Tests Covers src/slic3r/Utils, src/slic3r/plugin, src/slic3r/Config, src/libvgcode, src/dev-utils, src/OrcaSlicer.cpp and tests/, the directories left after src/slic3r/GUI and src/libslic3r. Generated with clang-tidy misc-include-cleaner. libvgcode's own headers are included by relative path as in the rest of that library, and Catch2 and pybind11 with angle brackets as elsewhere in the repo. * Make the GUI and Test Headers Compile on Their Own Each now includes, or forward-declares, what it uses instead of relying on what its includers happened to include first. Headers that only compile on one platform, or that nothing built includes, are left alone. * Keep Windows and nanosvg Setup Ahead of the Added Includes OrcaSlicer.cpp and several tests set _WIN32_WINNT, WIN32_LEAN_AND_MEAN or NOMINMAX before including Windows.h, and the profile validator defines NANOSVG_IMPLEMENTATION before any libslic3r header. The added includes had landed above those blocks, which broke the Windows build. * Add the GUI Includes the First Pass Missed Covers headers that only became editable once they compiled on their own, and wx symbols whose suggested header changed as the clang-tidy ignore list grew after the src/slic3r/GUI pass. * Keep the Added Test Includes Below the NOMINMAX Guard test_marchingsquares.cpp and test_texture_displacement.cpp had includes inside #ifndef NOMINMAX, which the tests inherit as defined on Windows from libslic3r, so those were skipped there. .clang-tidy also ignores the MSVC STL and UCRT internals, Boost.Multiprecision's fwd.hpp and CPython's Windows include directory, as in #16068.
101 lines
3.0 KiB
C++
101 lines
3.0 KiB
C++
#ifndef slic3r_GUI_Utils_Serial_hpp_
|
|
#define slic3r_GUI_Utils_Serial_hpp_
|
|
|
|
#include <utility>
|
|
#include <boost/asio/serial_port.hpp>
|
|
#include <boost/asio/io_service.hpp>
|
|
#include <vector>
|
|
#include <string>
|
|
#include <boost/system/error_code.hpp>
|
|
#include <boost/asio.hpp>
|
|
|
|
|
|
namespace Slic3r {
|
|
namespace Utils {
|
|
|
|
struct SerialPortInfo {
|
|
std::string port;
|
|
unsigned id_vendor = -1;
|
|
unsigned id_product = -1;
|
|
std::string friendly_name;
|
|
bool is_printer = false;
|
|
|
|
SerialPortInfo() {}
|
|
SerialPortInfo(std::string port) : port(port), friendly_name(std::move(port)) {}
|
|
|
|
bool id_match(unsigned id_vendor, unsigned id_product) const { return id_vendor == this->id_vendor && id_product == this->id_product; }
|
|
};
|
|
|
|
inline bool operator==(const SerialPortInfo &sp1, const SerialPortInfo &sp2)
|
|
{
|
|
return
|
|
sp1.port == sp2.port &&
|
|
sp1.id_vendor == sp2.id_vendor &&
|
|
sp1.id_product == sp2.id_product &&
|
|
sp1.is_printer == sp2.is_printer;
|
|
}
|
|
|
|
extern std::vector<std::string> scan_serial_ports();
|
|
extern std::vector<SerialPortInfo> scan_serial_ports_extended();
|
|
|
|
|
|
class Serial : public boost::asio::serial_port
|
|
{
|
|
public:
|
|
Serial(boost::asio::io_service &io_service);
|
|
Serial(boost::asio::io_service &io_service, const std::string &name, unsigned baud_rate);
|
|
Serial(const Serial &) = delete;
|
|
Serial &operator=(const Serial &) = delete;
|
|
~Serial();
|
|
|
|
void set_baud_rate(unsigned baud_rate);
|
|
|
|
// The Serial implementation is currently in disarray and therefore commented out.
|
|
// The boost implementation seems to have several problems, such as lack of support
|
|
// for custom baud rates, few weird implementation bugs and a history of API breakages.
|
|
// It's questionable whether it solves more problems than causes. Probably not.
|
|
// TODO: Custom implementation not based on asio.
|
|
//
|
|
// As of now, this class is only kept for the purpose of rebooting AVR109,
|
|
// see FirmwareDialog::priv::avr109_reboot()
|
|
|
|
/*
|
|
void set_DTR(bool on);
|
|
|
|
// Resets the line number both internally as well as with the firmware using M110
|
|
void reset_line_num();
|
|
|
|
// Reads a line or times out, the timeout is in milliseconds
|
|
bool read_line(unsigned timeout, std::string &line, boost::system::error_code &ec);
|
|
|
|
// Perform an initial setup for communicating with a printer
|
|
void printer_setup();
|
|
|
|
// Write data from a string
|
|
size_t write_string(const std::string &str);
|
|
|
|
// Attempts to reset the line numer and waits until the printer says "ok"
|
|
bool printer_ready_wait(unsigned retries, unsigned timeout);
|
|
|
|
// Write Marlin-formatted line, with a line number and a checksum
|
|
size_t printer_write_line(const std::string &line, unsigned line_num);
|
|
|
|
// Same as above, but with internally-managed line number
|
|
size_t printer_write_line(const std::string &line);
|
|
|
|
// Toggles DTR to reset the printer
|
|
void printer_reset();
|
|
|
|
// Formats a line Marlin-style, ie. with a sequential number and a checksum
|
|
static std::string printer_format_line(const std::string &line, unsigned line_num);
|
|
private:
|
|
unsigned m_line_num = 0;
|
|
*/
|
|
};
|
|
|
|
|
|
} // Utils
|
|
} // Slic3r
|
|
|
|
#endif /* slic3r_GUI_Utils_Serial_hpp_ */
|