From 6ec5ffd22fb3a52084424b78be9a82360b76eaae Mon Sep 17 00:00:00 2001 From: JIe Date: Sat, 12 Oct 2024 14:46:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=95=B0=E6=8D=AE=E4=BD=8D,?= =?UTF-8?q?=20=E5=A5=87=E5=81=B6=E6=A0=A1=E9=AA=8C,=20=E5=81=9C=E6=AD=A2?= =?UTF-8?q?=E4=BD=8D=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo.exe | Bin 173490 -> 0 bytes include/serial.h | 47 ++++++++++++++++++++++++++++++++++++++++------- main.cc | 13 +------------ 3 files changed, 41 insertions(+), 19 deletions(-) delete mode 100644 demo.exe diff --git a/demo.exe b/demo.exe deleted file mode 100644 index dc7ab8229973b53caa031a17982c629c3b9cf5b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 173490 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 diff --git a/include/serial.h b/include/serial.h index f558802..5dd424a 100644 --- a/include/serial.h +++ b/include/serial.h @@ -70,18 +70,18 @@ template concept _SupportString = requires { _IsCastable::value; }; - -template <_SupportString T> std::string _to_string(T &&str) { +template <_SupportString T> [[maybe_unused]] std::string _to_string(T &&str) { if constexpr (std::is_same_v, std::string>) { return str; } else if constexpr (std::is_same_v, std::string_view>) { return std::move(std::string(str.data())); - } else if constexpr (std::is_same_v, const char*>) { + } else if constexpr (std::is_same_v, const char *>) { return std::string(str); } } static std::vector GetUsbPorts() { +#if defined(_WIN32) || defined(_WIN64) std::vector portArray; std::string comname; std::string showname; @@ -99,6 +99,9 @@ static std::vector GetUsbPorts() { showname.clear(); }); return portArray; +#elif defined(__linux__) + +#endif } enum class [[maybe_unused]] SerialErrorCode { @@ -109,6 +112,26 @@ enum class [[maybe_unused]] SerialErrorCode { READINGERROR, }; +enum SerialDataBits { + DATABIT_5 = 0, + DATABIT_6, + DATABIT_7, + DATABIT_8, + DATABIT_16, +}; +enum SerialStopBits { + STOPBIT_1 = 0, + STOPBIT_1_5, + STOPBIT_2, +}; +enum SerialParity { + SERIAL_PARITY_NONE = 0, + SERIAL_PARITY_EVEN, + SERIAL_PARITY_ODD, + SERIAL_PARITY_MARK, + SERIAL_PARITY_SPACE, +}; + class Serial { private: serialib ser; @@ -139,15 +162,25 @@ class Serial { bool IsOpen() { return ser.isDeviceOpen(); } template <_SupportString T> - bool OpenDevice(T portName, unsigned int bauds = 115200, - int delayTime = 0) { + bool OpenDevice(T portName, unsigned int bauds = 115200, int delayTime = 0, + SerialDataBits dataBits = SerialDataBits::DATABIT_8, + SerialStopBits stopBits = SerialStopBits::STOPBIT_1, + SerialParity parity = SerialParity::SERIAL_PARITY_NONE) { +#if defined(_WIN32) || defined(__WIN64) std::string reallyPortName; std::format_to(std::back_inserter(reallyPortName), "\\\\.\\{}", portName); +#elif defined(__linux__) + std::string reallyPortName = std::string(portName); +#endif std::this_thread::sleep_for(std::chrono::milliseconds(delayTime)); if (ser.isDeviceOpen()) - return true; - int code = ser.openDevice(reallyPortName.c_str(), bauds); + ser.closeDevice(); + + int code = ser.openDevice(reallyPortName.c_str(), bauds, + static_cast<::SerialDataBits>(dataBits), + static_cast<::SerialParity>(parity), + static_cast<::SerialStopBits>(stopBits)); if (code == 1) { return true; } else { diff --git a/main.cc b/main.cc index 1e3babb..4ed1e3f 100644 --- a/main.cc +++ b/main.cc @@ -25,16 +25,6 @@ std::vector split(T str, T d) { }); return std::vector(v.begin(), v.end()); } - -int main() { - Serial ser; - ser.OpenDevice("COM11", 115200); - ser.SetLogCallBack(PrintLog); - ser.GetAtUntilRepeat<5>("AT", "OK"); - return 0; -} - -/* int main(int argc, char **const argv) { Serial serial; auto ports = serial::GetUsbPorts(); @@ -77,5 +67,4 @@ int main(int argc, char **const argv) { } } return 0; -} -*/ \ No newline at end of file +} \ No newline at end of file