aboutsummaryrefslogtreecommitdiff
path: root/toys
diff options
context:
space:
mode:
Diffstat (limited to 'toys')
-rw-r--r--toys/net/microcom.c30
1 files changed, 12 insertions, 18 deletions
diff --git a/toys/net/microcom.c b/toys/net/microcom.c
index 6f88ad4f..62b020f2 100644
--- a/toys/net/microcom.c
+++ b/toys/net/microcom.c
@@ -2,7 +2,7 @@
*
* Copyright 2017 The Android Open Source Project.
-USE_MICROCOM(NEWTOY(microcom, "<1>1s:X", TOYFLAG_USR|TOYFLAG_BIN))
+USE_MICROCOM(NEWTOY(microcom, "<1>1s#=115200X", TOYFLAG_USR|TOYFLAG_BIN))
config MICROCOM
bool "microcom"
@@ -12,7 +12,7 @@ config MICROCOM
Simple serial console.
- -s Set baud rate to SPEED
+ -s Set baud rate to SPEED (default 115200)
-X Ignore ^@ (send break) and ^] (exit)
*/
@@ -20,7 +20,7 @@ config MICROCOM
#include "toys.h"
GLOBALS(
- char *s;
+ long s;
int fd;
struct termios original_stdin_state, original_fd_state;
@@ -36,10 +36,7 @@ static void restore_states(int i)
void microcom_main(void)
{
struct pollfd fds[2];
- int i, speed;
-
- if (!TT.s) speed = 115200;
- else speed = atoi(TT.s);
+ int i;
// Open with O_NDELAY, but switch back to blocking for reads.
TT.fd = xopen(*toys.optargs, O_RDWR | O_NOCTTY | O_NDELAY);
@@ -47,36 +44,33 @@ void microcom_main(void)
perror_exit_raw(*toys.optargs);
// Set both input and output to raw mode.
- xset_terminal(TT.fd, 1, speed, &TT.original_fd_state);
+ xset_terminal(TT.fd, 1, TT.s, &TT.original_fd_state);
set_terminal(0, 1, 0, &TT.original_stdin_state);
// ...and arrange to restore things, however we may exit.
sigatexit(restore_states);
fds[0].fd = TT.fd;
- fds[0].events = POLLIN;
fds[1].fd = 0;
- fds[1].events = POLLIN;
+ fds[0].events = fds[1].events = POLLIN;
while (poll(fds, 2, -1) > 0) {
- char buf[BUFSIZ];
// Read from connection, write to stdout.
if (fds[0].revents) {
- ssize_t n = read(TT.fd, buf, sizeof(buf));
- if (n > 0) xwrite(0, buf, n);
+ if (0 < (i = read(TT.fd, toybuf, sizeof(toybuf)))) xwrite(0, toybuf, i);
else break;
}
// Read from stdin, write to connection.
if (fds[1].revents) {
- if (read(0, buf, 1) != 1) break;
- if (!(toys.optflags & FLAG_X)) {
- if (!*buf) {
+ if (read(0, toybuf, 1) != 1) break;
+ if (!FLAG(X)) {
+ if (!*toybuf) {
tcsendbreak(TT.fd, 0);
continue;
- } else if (*buf == (']'-'@')) break;
+ } else if (*toybuf == (']'-'@')) break;
}
- xwrite(TT.fd, buf, 1);
+ xwrite(TT.fd, toybuf, 1);
}
}
}