From 0279aafb970537a4120c54b3e7a84195250c302f Mon Sep 17 00:00:00 2001 From: Armin Wolf Date: Fri, 1 Sep 2023 21:18:25 +0200 Subject: [PATCH] Allow for setting DTR on a serial port --- serial_port/serial_port.cpp | 47 +++++++++++++++++++++++++++++++++++++ serial_port/serial_port.h | 1 + 2 files changed, 48 insertions(+) diff --git a/serial_port/serial_port.cpp b/serial_port/serial_port.cpp index b8d60310..8113f5c9 100644 --- a/serial_port/serial_port.cpp +++ b/serial_port/serial_port.cpp @@ -660,6 +660,53 @@ void serial_port::serial_break() #endif } +void serial_port::serial_set_dtr(bool dtr) +{ + /*-----------------------------------------------------*\ + | Windows-specific code path for serial set DTR | + \*-----------------------------------------------------*/ +#ifdef _WIN32 + if(dtr) + { + EscapeCommFunction(file_descriptor, SETDTR); + } + else + { + EscapeCommFunction(file_descriptor, CLRDTR); + } +#endif + + /*-----------------------------------------------------*\ + | Linux-specific code path for serial set DTR | + \*-----------------------------------------------------*/ +#ifdef __linux__ + const int DTRFLAG = TIOCM_DTR; + if(dtr) + { + ioctl(file_descriptor, TIOCMBIS, &DTRFLAG); + } + else + { + ioctl(file_descriptor, TIOCMBIC, &DTRFLAG); + } +#endif + + /*-----------------------------------------------------*\ + | MacOS-specific code path for serial set DTR | + \*-----------------------------------------------------*/ +#ifdef __APPLE__ + const int DTRFLAG = TIOCM_DTR; + if(dtr) + { + ioctl(file_descriptor, TIOCMBIS, &DTRFLAG); + } + else + { + ioctl(file_descriptor, TIOCMBIC, &DTRFLAG); + } +#endif +} + void serial_port::serial_set_rts(bool rts) { /*-----------------------------------------------------*\ diff --git a/serial_port/serial_port.h b/serial_port/serial_port.h index 0d60b162..191120cf 100644 --- a/serial_port/serial_port.h +++ b/serial_port/serial_port.h @@ -126,6 +126,7 @@ public: void serial_flush_tx(); void serial_break(); + void serial_set_dtr(bool dtr); void serial_set_rts(bool rts); int serial_available();