/* if dev is given, open device with index <dev>, if not (re)open all */ void CRCInput::open(int dev) { if (dev == -1) close(); for (int i = 0; i < NUMBER_OF_EVENT_DEVICES; i++) { if (dev != -1) { if (i != dev || fd_rc[i] != -1) continue; } if ((fd_rc[i] = ::open(RC_EVENT_DEVICE[i], O_RDWR|O_NONBLOCK|O_CLOEXEC)) == -1) perror(RC_EVENT_DEVICE[i]); printf("CRCInput::open: %s fd %d\n", RC_EVENT_DEVICE[i], fd_rc[i]); } //+++++++++++++++++++++++++++++++++++++++ #ifdef KEYBOARD_INSTEAD_OF_REMOTE_CONTROL fd_keyb = STDIN_FILENO; if (fd_rc[0] < 0) fd_rc[0] = fd_keyb; #else fd_keyb = 0; #endif /* KEYBOARD_INSTEAD_OF_REMOTE_CONTROL */ /* ::open("/dev/dbox/rc0", O_RDONLY); if (fd_keyb<0) { perror("/dev/stdin"); exit(-1); } */ #ifdef KEYBOARD_INSTEAD_OF_REMOTE_CONTROL ::fcntl(fd_keyb, F_SETFL, O_NONBLOCK); struct termio new_termio; ::ioctl(STDIN_FILENO, TCGETA, &orig_termio); saved_orig_termio = true; new_termio = orig_termio; new_termio.c_lflag &= ~ICANON; // new_termio.c_lflag &= ~(ICANON|ECHO); new_termio.c_cc[VMIN ] = 1; new_termio.c_cc[VTIME] = 0; ::ioctl(STDIN_FILENO, TCSETA, &new_termio); #else //fcntl(fd_keyb, F_SETFL, O_NONBLOCK ); //+++++++++++++++++++++++++++++++++++++++ #endif /* KEYBOARD_INSTEAD_OF_REMOTE_CONTROL */ open_click(); calculateMaxFd(); }
void CRCInput::open() { close(); fd_tdt_rc_event_driver = -1; for (int i = 0; i < NUMBER_OF_EVENT_DEVICES; i++) { if ((fd_rc[i] = ::open(RC_EVENT_DEVICE[i], O_RDONLY)) == -1) perror(RC_EVENT_DEVICE[i]); else { char name[80]; ioctl(fd_rc[i], EVIOCGNAME(sizeof(name)), name); if(!strcmp("TDT RC event driver", name)) fd_tdt_rc_event_driver = fd_rc[i]; fcntl(fd_rc[i], F_SETFL, O_NONBLOCK); } } if (fd_tdt_rc_event_driver < 0) fd_tdt_rc_event_driver = fd_rc[0]; //+++++++++++++++++++++++++++++++++++++++ #ifdef KEYBOARD_INSTEAD_OF_REMOTE_CONTROL fd_keyb = STDIN_FILENO; fd_tdt_rc_event_driver = STDIN_FILENO; #else fd_keyb = 0; #endif /* KEYBOARD_INSTEAD_OF_REMOTE_CONTROL */ /* ::open("/dev/dbox/rc0", O_RDONLY); if (fd_keyb<0) { perror("/dev/stdin"); exit(-1); } */ #ifdef KEYBOARD_INSTEAD_OF_REMOTE_CONTROL ::fcntl(fd_keyb, F_SETFL, O_NONBLOCK); struct termio new_termio; ::ioctl(STDIN_FILENO, TCGETA, &orig_termio); saved_orig_termio = true; new_termio = orig_termio; new_termio.c_lflag &= ~ICANON; // new_termio.c_lflag &= ~(ICANON|ECHO); new_termio.c_cc[VMIN ] = 1; new_termio.c_cc[VTIME] = 0; ::ioctl(STDIN_FILENO, TCSETA, &new_termio); #else //fcntl(fd_keyb, F_SETFL, O_NONBLOCK ); //+++++++++++++++++++++++++++++++++++++++ #endif /* KEYBOARD_INSTEAD_OF_REMOTE_CONTROL */ open_click(); calculateMaxFd(); }