From 7ef581fec0298a228baa71372ea5667874fb4a56 Mon Sep 17 00:00:00 2001 From: Oliver Hartkopp Date: Sun, 9 Jan 2011 11:49:20 +0000 Subject: [PATCH] slcan_attach: added '-f' commandline option to read status flags. In the case of pending bus errors on some slcan adapters the read of the status flags resets the adapter and clears the error LED. This patch adds the commandline option to send the status read command to the adapter as suggested by Thorsten Godau. Signed-off-by: Oliver Hartkopp --- slcan_attach.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/slcan_attach.c b/slcan_attach.c index 147ec6b..89366be 100644 --- a/slcan_attach.c +++ b/slcan_attach.c @@ -61,13 +61,14 @@ void print_usage(char *prg) fprintf(stderr, "\nUsage: %s [options] tty\n\n", prg); fprintf(stderr, "Options: -o (send open command 'O\\r')\n"); fprintf(stderr, " -c (send close command 'C\\r')\n"); + fprintf(stderr, " -f (read status flags with 'F\\r' to reset error states)\n"); fprintf(stderr, " -s (set CAN speed 0..8)\n"); fprintf(stderr, " -b (set bit time register value)\n"); fprintf(stderr, " -d (only detach line discipline)\n"); fprintf(stderr, " -w (attach - wait for keypess - detach)\n"); fprintf(stderr, " -n (assign created netdevice name)\n"); fprintf(stderr, "\nExamples:\n"); - fprintf(stderr, "slcan_attach -w -o -s6 -c /dev/ttyS1\n"); + fprintf(stderr, "slcan_attach -w -o -f -s6 -c /dev/ttyS1\n"); fprintf(stderr, "slcan_attach /dev/ttyS1\n"); fprintf(stderr, "slcan_attach -d /dev/ttyS1\n"); fprintf(stderr, "slcan_attach -w -n can15 /dev/ttyS1\n"); @@ -83,6 +84,7 @@ int main(int argc, char **argv) int waitkey = 0; int send_open = 0; int send_close = 0; + int send_read_status_flags = 0; char *speed = NULL; char *btr = NULL; char buf[IFNAMSIZ+1]; @@ -90,7 +92,7 @@ int main(int argc, char **argv) char *name = NULL; int opt; - while ((opt = getopt(argc, argv, "l:dwocs:b:n:?")) != -1) { + while ((opt = getopt(argc, argv, "l:dwocfs:b:n:?")) != -1) { switch (opt) { case 'l': fprintf(stderr, "Ignored option '-l'\n"); @@ -112,6 +114,10 @@ int main(int argc, char **argv) send_close = 1; break; + case 'f': + send_read_status_flags = 1; + break; + case 's': speed = optarg; if (strlen(speed) > 1) @@ -159,6 +165,11 @@ int main(int argc, char **argv) write(fd, buf, strlen(buf)); } + if (send_read_status_flags) { + sprintf(buf, "F\r"); + write(fd, buf, strlen(buf)); + } + if (send_open) { sprintf(buf, "O\r"); write(fd, buf, strlen(buf)); -- 2.7.4