/* Ring Indicator Logger, Sat Jun 26 22:15:31 CEST 2010, a.leofreddi */ #include #include #include #include #include #include int main(int argc, char *argv[]) { if(argc != 3 && argc != 2) { fprintf(stderr, "Usage: %s port [pid]\n", argv[0]); return 1; } char *port = argv[1]; int l = -1; int fd = open(port, O_RDONLY | O_NONBLOCK | O_NOCTTY); if(fd < 0) { fprintf(stderr, "Unable to open port: %i\n", errno); return 2; } int pid = 0; if(argv[2]) { pid = (int)strtol(argv[2], (char **)NULL, 10); if(pid == 0) { fprintf(stderr, "Invalid pid %s\n", argv[2]); return 3; } } printf("Port opened\n"); for(;;) { int s; /* Read terminal status line: Clear To Send */ ioctl(fd, TIOCMGET, &s); s = !!(s & TIOCM_RI); usleep(100000); if(l != -1 && l != s && s) { printf("Low to high transition\n", s); if(pid > 0) kill(pid, SIGUSR1); } l = s; } }