From fab36bc52f4d7ed8ec9463d57e41850f64f083c8 Mon Sep 17 00:00:00 2001 From: Anders Blomdell <anders.blomdell@control.lth.se> Date: Tue, 9 Mar 2021 20:45:16 +0100 Subject: [PATCH] serial2002: discard pending characters before polling config --- plugins/serial2002/serial2002_lib.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/plugins/serial2002/serial2002_lib.c b/plugins/serial2002/serial2002_lib.c index d8fad61..72db13f 100644 --- a/plugins/serial2002/serial2002_lib.c +++ b/plugins/serial2002/serial2002_lib.c @@ -204,6 +204,23 @@ static struct moberg_status update_channel(struct serial2002_channel *channel, return MOBERG_OK; } +static void discard_pending(int fd) +{ + struct pollfd pollfd; + + while (1) { + pollfd.fd = fd; + pollfd.events = POLLRDNORM | POLLRDBAND | POLLIN | POLLHUP | POLLERR; + int err = poll(&pollfd, 1, 0); + if (err <= 0) { + break; + } else { + char discard; + read(fd, &discard, 1); + } + } +} + static struct moberg_status do_read_config( int fd, long timeout, @@ -211,6 +228,7 @@ static struct moberg_status do_read_config( { struct serial2002_data data = { 0, 0 }; + discard_pending(fd); memset(config, 0, sizeof(*config)); serial2002_poll_channel(fd, 31); while (1) { -- GitLab