mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
* make pseudoterm reset terminal on sigint, make it honour ctrl-c
This commit is contained in:
parent
14e2a4718f
commit
e556579282
@ -36,6 +36,12 @@ int init() {
|
||||
return result;
|
||||
}
|
||||
|
||||
struct termios old_term_setting;
|
||||
|
||||
void close_tty() {
|
||||
tcsetattr(tty_fd, TCSANOW, &old_term_setting);
|
||||
}
|
||||
|
||||
void sig_handler(int signal) {
|
||||
if (signal == SIGUSR1) {
|
||||
if (stopped) {
|
||||
@ -43,6 +49,7 @@ void sig_handler(int signal) {
|
||||
printf("\nSignal received, opening port.\r\n");
|
||||
if (init() < 0) {
|
||||
printf("Cannot open port.\r\n");
|
||||
close_tty();
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
@ -53,6 +60,12 @@ void sig_handler(int signal) {
|
||||
pthread_cancel(serial_reader);
|
||||
close_serial_port();
|
||||
}
|
||||
} else if (signal == SIGINT) {
|
||||
printf("SIGINT received, exiting...\n");
|
||||
pthread_cancel(serial_reader);
|
||||
close_serial_port();
|
||||
close_tty();
|
||||
exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,10 +78,14 @@ int open_tty(void)
|
||||
if (fd < 0) return -1;
|
||||
r = tcgetattr(fd, &term_setting);
|
||||
if (r != 0) return -2;
|
||||
|
||||
old_term_setting = term_setting;
|
||||
|
||||
term_setting.c_oflag |= ( ONLRET );
|
||||
term_setting.c_iflag |= (IGNBRK | IGNPAR);
|
||||
term_setting.c_iflag &= ~(ISTRIP | BRKINT);
|
||||
term_setting.c_lflag &= ~(ICANON | ISIG | ECHO);
|
||||
term_setting.c_iflag |= (/*IGNBRK |*/ BRKINT | IGNPAR);
|
||||
term_setting.c_iflag &= ~(ISTRIP);
|
||||
term_setting.c_lflag &= ~(ICANON |/* ISIG |*/ ECHO);
|
||||
term_setting.c_lflag |= ( ISIG );
|
||||
term_setting.c_cflag |= CREAD;
|
||||
term_setting.c_cc[VMIN] = 1;
|
||||
term_setting.c_cc[VTIME] = 1;
|
||||
@ -80,10 +97,12 @@ int open_tty(void)
|
||||
void install_sighandler() {
|
||||
struct sigaction action;
|
||||
sigemptyset (&action.sa_mask);
|
||||
sigaddset( &action.sa_mask, SIGINT );
|
||||
sigaddset( &action.sa_mask, SIGUSR1 );
|
||||
sigaddset( &action.sa_mask, SIGUSR2 );
|
||||
action.sa_flags = 0;
|
||||
action.sa_handler = sig_handler;
|
||||
sigaction(SIGINT, &action, NULL);
|
||||
sigaction(SIGUSR1, &action, NULL);
|
||||
sigaction(SIGUSR2, &action, NULL);
|
||||
}
|
||||
@ -120,6 +139,7 @@ int main(int argc, char** argv) {
|
||||
write_serial_port(ttybuf, i);
|
||||
}
|
||||
close_serial_port();
|
||||
close_tty();
|
||||
system("tset -c");
|
||||
return 0;
|
||||
}
|
||||
@ -128,6 +148,7 @@ int main(int argc, char** argv) {
|
||||
write_serial_port(ttybuf,n);
|
||||
}
|
||||
|
||||
close_tty();
|
||||
close_serial_port();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user