]> rtime.felk.cvut.cz Git - sojka/sterm.git/commitdiff
Allow sending break signal
authorMichal Sojka <michal.sojka@cvut.cz>
Fri, 15 Dec 2017 11:52:29 +0000 (12:52 +0100)
committerMichal Sojka <michal.sojka@cvut.cz>
Fri, 15 Dec 2017 12:05:42 +0000 (13:05 +0100)
completion.bash
completion.zsh
sterm.c
sterm.man

index eca6d855202df30a3943a3a97f52a2d37c9aaa0c..1b7afe26c4c58ed181078e6ae1d6d3f01dd088dd 100644 (file)
@@ -8,7 +8,7 @@ _sterm() {
        #cur="${COMP_WORDS[COMP_CWORD]}"
        local ops="-h --help -c -d -e -n -r -s -v"
        case "$prev" in
-               -d|-r)
+               -b|-d|-r)
                        # No completion for these
                        ;;
                -s)
index b803ab95edfea8df80c97a951cdb048a3a5e8016..09a6a7e29d4bdaa2eb875f24f6916125c7bc14d9 100644 (file)
@@ -6,6 +6,7 @@ _sterm_defs() {
                "--help[Output help message]" \
                "-h[Print help text]" \
                "-s[Set baudrate]" \
+               "-b[Send break]" \
                "-c[Enter command mode]" \
                "-d[Make pulse on DTR]" \
                "-r[Make pulse on RTS]" \
@@ -19,7 +20,7 @@ _sterm() {
        if (( CURRENT > 2)); then
                local prev=${words[(( CURRENT - 1))]}
                case "${prev}" in
-                       -d|-r)
+                       -b|-d|-r)
                                # No completion for these
                                ;;
                        -s)
diff --git a/sterm.c b/sterm.c
index 6ecb117926ee89dd3e3b4a03ccfb8c315a42b76d..246bf68f3b1d4e93c84ee8eabaf4f999d1d63604 100644 (file)
--- a/sterm.c
+++ b/sterm.c
@@ -133,6 +133,7 @@ void usage(const char* argv0)
        fprintf(stderr, "Usage: %s [options] <device>\n", argv0);
        fprintf(stderr,
                "Options:\n"
+               "  -b <duration> send break signal\n"
                "  -c        enter command mode\n"
                "  -d[PULSE] make pulse on DTR\n"
                "  -e        ignore '~.' escape sequence\n"
@@ -176,6 +177,7 @@ void handle_commands(int fd)
 
        while (!go) {
                char *p1 = NULL;
+               int num;
                if (fgets(command, sizeof(command), stdin) == NULL) {
                        if (!feof(stdin))
                            perror("Command read");
@@ -185,6 +187,8 @@ void handle_commands(int fd)
                        pulse(fd, dtr_rts_arg('d', p1), 0);
                else if (sscanf(command, "rts %ms", &p1) == 1)
                        pulse(fd, 0, dtr_rts_arg('r', p1));
+               else if (sscanf(command, "break %d", &num) == 1)
+                       CHECK(tcsendbreak(fd, num));
                else if (strcmp(command, "go\n") == 0)
                        break;
                else {
@@ -206,14 +210,16 @@ int main(int argc, char *argv[])
        bool stdin_tty;
        bool raw = true;
        bool cmd = false;
+       int break_dur = -1;
 
        if ((stdin_tty = isatty(0))) {
                CHECK(tcgetattr(0, &stdin_tio_backup));
                atexit(restore_stdin_term);
        }
 
-       while ((opt = getopt(argc, argv, "cnd::er::s:v")) != -1) {
+       while ((opt = getopt(argc, argv, "b:cnd::er::s:v")) != -1) {
                switch (opt) {
+               case 'b': break_dur = atoi(optarg); break;
                case 'c': cmd = true; break;
                case 'd': dtr = dtr_rts_arg(opt, optarg); break;
                case 'e': exit_on_escape = false; break;
@@ -314,6 +320,9 @@ int main(int argc, char *argv[])
                if (dtr || rts)
                        pulse(fd, dtr, rts);
 
+               if (break_dur != -1)
+                       CHECK(tcsendbreak(fd, break_dur));
+
                 /* Disable flow control */
                tio.c_cflag &= ~(CRTSCTS);
                tio.c_iflag &= ~(IXON|IXOFF);
index 715faaf50f1fbdf179b41e9bf6bbdda09565d447..ce4ea262fc554dcb6596c3dd69a236425f77a3c6 100644 (file)
--- a/sterm.man
+++ b/sterm.man
@@ -16,6 +16,10 @@ serial connection. To exit the program there is special key
 sequence: '<Enter>~.'
 .SH OPTIONS
 .TP
+\fB\-b <duration>\fR
+Send break signal of given DURATION after opening the DEVICE. See
+tcsendbreak(3) for definition of duration.
+.TP
 \fB\-c\fR
 Enter command mode. See COMMAND MODE section below.
 .TP
@@ -84,6 +88,11 @@ section.
 Generate a pulse on RTS. The PULSE argument is described in PULSE
 section.
 .RE
+.I break DURATION
+.RS
+Send break signal of given duration. See
+.BR tcsendbreak (3).
+.RE
 .I go
 .RS
 Exit command mode and enter normal sterm operation.