]> rtime.felk.cvut.cz Git - can-utils.git/blobdiff - slcand.c
candump: Enable HW timestamping before using it
[can-utils.git] / slcand.c
index e5e4752cab55f29e599bb7d33e6e0b176f9dc76d..a8b62f2f5daa7c90b4c223312ef96ab48481f572 100644 (file)
--- a/slcand.c
+++ b/slcand.c
@@ -38,6 +38,7 @@
 #include <net/if.h>
 #include <termios.h>
 #include <linux/tty.h>
+#include <linux/sockios.h>
 
 /* Change this to whatever your daemon is called */
 #define DAEMON_NAME "slcand"
@@ -59,6 +60,7 @@ void print_usage(char *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, "         -l         (send listen only command 'L\\r', overrides -o)\n");
        fprintf(stderr, "         -s <speed> (set CAN speed 0..8)\n");
        fprintf(stderr, "         -S <speed> (set UART speed in baud)\n");
        fprintf(stderr, "         -t <type>  (set UART flow control type 'hw' or 'sw')\n");
@@ -170,6 +172,7 @@ int main(int argc, char *argv[])
        int opt;
        int send_open = 0;
        int send_close = 0;
+       int send_listen = 0;
        int send_read_status_flags = 0;
        char *speed = NULL;
        char *uart_speed_str = NULL;
@@ -183,7 +186,7 @@ int main(int argc, char *argv[])
 
        ttypath[0] = '\0';
 
-       while ((opt = getopt(argc, argv, "ocfs:S:t:b:?hF")) != -1) {
+       while ((opt = getopt(argc, argv, "ocfls:S:t:b:?hF")) != -1) {
                switch (opt) {
                case 'o':
                        send_open = 1;
@@ -194,6 +197,9 @@ int main(int argc, char *argv[])
                case 'f':
                        send_read_status_flags = 1;
                        break;
+               case 'l':
+                       send_listen = 1;
+                       break;
                case 's':
                        speed = optarg;
                        if (strlen(speed) > 1)
@@ -324,7 +330,10 @@ int main(int argc, char *argv[])
                write(fd, buf, strlen(buf));
        }
 
-       if (send_open) {
+       if (send_listen) {
+               sprintf(buf, "L\r");
+               write(fd, buf, strlen(buf));
+       } else if (send_open) {
                sprintf(buf, "O\r");
                write(fd, buf, strlen(buf));
        }