From dea1ae15182d75c2b521817378480707babadbdb Mon Sep 17 00:00:00 2001 From: Jef Driesen Date: Sun, 24 Feb 2008 19:52:12 +0000 Subject: [PATCH] Added a function to assert or clear a break condition. --- serial.h | 1 + serial_posix.c | 19 ++++++++++++++++++- serial_win32.c | 21 +++++++++++++++++++++ 3 files changed, 40 insertions(+), 1 deletion(-) diff --git a/serial.h b/serial.h index 6527aaf..acd4d8c 100644 --- a/serial.h +++ b/serial.h @@ -68,6 +68,7 @@ int serial_drain (serial *device); int serial_send_break (serial *device); +int serial_set_break (serial *device, int level); int serial_set_dtr (serial *device, int level); int serial_set_rts (serial *device, int level); diff --git a/serial_posix.c b/serial_posix.c index eb21c29..34ac6fc 100644 --- a/serial_posix.c +++ b/serial_posix.c @@ -457,7 +457,7 @@ serial_read (serial* device, void* data, unsigned int size) TRACE ("gettimeofday"); return -1; } - timersub (&now, ×tamp ,&delta); + timersub (&now, ×tamp, &delta); long elapsed = delta.tv_sec * 1000 + delta.tv_usec / 1000; if (elapsed >= device->timeout) timeout = 0; @@ -566,6 +566,23 @@ serial_send_break (serial *device) } +int +serial_set_break (serial *device, int level) +{ + if (device == NULL) + return -1; // EINVAL (Invalid argument) + + int action = (level ? TIOCSBRK : TIOCCBRK); + + if (ioctl (device->fd, action, NULL) != 0) { + TRACE ("ioctl"); + return -1; + } + + return 0; +} + + static int serial_set_status (int fd, int value, int level) { diff --git a/serial_win32.c b/serial_win32.c index c54f2b2..29ba230 100644 --- a/serial_win32.c +++ b/serial_win32.c @@ -419,6 +419,27 @@ serial_send_break (serial* device) } +int +serial_set_break (serial *device, int level) +{ + if (device == NULL) + return -1; // ERROR_INVALID_PARAMETER (The parameter is incorrect) + + if (level) { + if (!SetCommBreak (device->hFile)) { + TRACE ("SetCommBreak"); + return -1; + } + } else { + if (!ClearCommBreak (device->hFile)) { + TRACE ("ClearCommBreak"); + return -1; + } + } + + return 0; +} + int serial_set_dtr (serial* device, int level) {