#pragma once #include "common/string.hpp" #include #define LEONARDO_XINPUT_VID 0x045E // NOLINT(cppcoreguidelines-macro-usage) #define LEONARDO_XINPUT_PID 0x028E // NOLINT(cppcoreguidelines-macro-usage) class SerialStream { public: SerialStream(Serial_ serial, const unsigned long &baud_rate) noexcept; void waitReady(); void write(const char *str); void flush(); constexpr static bool is_enabled() noexcept { #if USB_VID != LEONARDO_XINPUT_VID && USB_PID != LEONARDO_XINPUT_PID return true; #else return false; #endif } SerialStream &operator<<(const char *str); SerialStream &operator<<(const common::String &str); SerialStream &operator<<(const double &num); SerialStream &operator<<(const int &num); SerialStream &operator<<(const unsigned int &num); SerialStream &operator<<(const unsigned long &num); SerialStream &operator<<(void (*manipulator)(SerialStream *)); private: Serial_ _serial; }; void endl(SerialStream *serial_stream);