aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkaf24@localhost.localdomain <kaf24@localhost.localdomain>2006-10-09 23:34:00 +0100
committerkaf24@localhost.localdomain <kaf24@localhost.localdomain>2006-10-09 23:34:00 +0100
commit09635b384899b1b2d1b531c3ac919fce0832a6c2 (patch)
tree15bb3d3a13119552e6987d7058dd304413469fd4
parentd55292850af39832fdbc7540f387e598bd02fc56 (diff)
downloadxen-09635b384899b1b2d1b531c3ac919fce0832a6c2.tar.gz
xen-09635b384899b1b2d1b531c3ac919fce0832a6c2.tar.bz2
xen-09635b384899b1b2d1b531c3ac919fce0832a6c2.zip
[TOOLS] Fixes to miniterm serial terminal utility.
Signed-off-by: Keir Fraser <keir@xensource.com>
-rw-r--r--tools/misc/miniterm/miniterm.c25
1 files changed, 19 insertions, 6 deletions
diff --git a/tools/misc/miniterm/miniterm.c b/tools/misc/miniterm/miniterm.c
index 92f8462781..3f8043da0b 100644
--- a/tools/misc/miniterm/miniterm.c
+++ b/tools/misc/miniterm/miniterm.c
@@ -32,10 +32,11 @@
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
+#include <string.h>
#define DEFAULT_BAUDRATE 115200
#define DEFAULT_SERDEVICE "/dev/ttyS0"
-#define ENDMINITERM 2 /* ctrl-b to quit miniterm */
+#define ENDMINITERM 0x1d
volatile int stop = 0;
@@ -76,7 +77,11 @@ int main(int argc, char **argv)
char *sername = DEFAULT_SERDEVICE;
struct termios oldsertio, newsertio, oldstdtio, newstdtio;
struct sigaction sa;
-
+ static char start_str[] =
+ "************ REMOTE CONSOLE: CTRL-] TO QUIT ********\r\n";
+ static char end_str[] =
+ "\n************ REMOTE CONSOLE EXITED *****************\n";
+
while ( --argc != 0 )
{
char *p = argv[argc];
@@ -121,7 +126,7 @@ int main(int argc, char **argv)
newsertio.c_iflag = IGNBRK | IGNPAR;
/* Raw output. */
- newsertio.c_oflag = 0;
+ newsertio.c_oflag = OPOST;
/* No echo and no signals. */
newsertio.c_lflag = 0;
@@ -137,7 +142,13 @@ int main(int argc, char **argv)
/* next stop echo and buffering for stdin */
tcgetattr(0,&oldstdtio);
tcgetattr(0,&newstdtio); /* get working stdtio */
- newstdtio.c_lflag &= ~(ICANON | ECHO);
+ newstdtio.c_iflag &= ~(BRKINT | ICRNL | INPCK | ISTRIP | IXON);
+ newstdtio.c_oflag &= ~OPOST;
+ newstdtio.c_cflag &= ~(CSIZE | PARENB);
+ newstdtio.c_cflag |= CS8;
+ newstdtio.c_lflag &= ~(ECHO | ICANON | IEXTEN | ISIG);
+ newstdtio.c_cc[VMIN]=1;
+ newstdtio.c_cc[VTIME]=0;
tcsetattr(0,TCSANOW,&newstdtio);
/* Terminal settings done: now enter the main I/O loops. */
@@ -145,7 +156,7 @@ int main(int argc, char **argv)
{
case 0:
close(1); /* stdout not needed */
- for ( c = getchar(); c != ENDMINITERM ; c = getchar() )
+ for ( c = (char)getchar(); c != ENDMINITERM; c = (char)getchar() )
write(fd,&c,1);
tcsetattr(fd,TCSANOW,&oldsertio);
tcsetattr(0,TCSANOW,&oldstdtio);
@@ -158,7 +169,7 @@ int main(int argc, char **argv)
close(fd);
exit(-1);
default:
- printf("** ctrl-b quits miniterm **\n");
+ write(1, start_str, strlen(start_str));
close(0); /* stdin not needed */
sa.sa_handler = child_handler;
sa.sa_flags = 0;
@@ -166,9 +177,11 @@ int main(int argc, char **argv)
while ( !stop )
{
read(fd,&c,1); /* modem */
+ c = (char)c;
write(1,&c,1); /* stdout */
}
wait(NULL); /* wait for child to die or it will become a zombie */
+ write(1, end_str, strlen(end_str));
break;
}