-
- fd_set readset;
- struct timeval timeout;
-
- int num_warnings = 0;
- int result, iof = -1;
-
- /* enter thread loop */
- while (!stop_me) {
- /* reset the read set */
- FD_ZERO(&readset);
- FD_SET(fd, &readset);
-
- /* reinit the timeout structure */
- timeout.tv_sec = 0;
- timeout.tv_usec = 300000; /* 300 ms */
-
- /* do the select */
- result = select(fd+1, &readset, NULL, NULL, &timeout);
-
- /* see if there was an error or timeout */
- if (result < 0) {
-// perror("select failed");
- } else if (result == 0) {
-// puts("TIMEOUT");
- } else {
- /* we have input */
- if (FD_ISSET(fd, &readset)) {
- /* get fd settings */
- if ((iof = fcntl(fd, F_GETFL, 0)) != -1) {
- /* set fd non blocking */
- fcntl(fd, F_SETFL, iof | O_NONBLOCK);
- /* read input */
- if (read(fd, &ev, sizeof(ev)) < 0) {
- if (num_warnings % 10000 == 0)
- /* should not happen cause select called before */
- fprintf(stderr, "Failed to read event from Jog Shuttle FILE DESCRIPTOR (repeated %d times)\n", num_warnings + 1);
- num_warnings++;
+#endif
+ struct media_ctrl_event mev;
+
+ /* enter thread loop */
+ while (!stop_me) {
+ /* reset the read set */
+ FD_ZERO(&readset);
+ FD_SET(mc.fd, &readset);
+
+ /* reinit the timeout structure */
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 400000; /* 400 ms */
+
+ /* do select in blocked mode and wake up after timeout for eval stop_me */
+ result = select(mc.fd+1, &readset, NULL, NULL, &timeout);
+
+ /* see if there was an error or timeout else process event */
+ if (result < 0 && errno == EINTR) {
+ /* EINTR event catched. This is not a problem - continue processing */
+ kDebug() << strerror(errno) << "\n";
+ /* continue processing */
+ continue;
+ } else if (result < 0) {
+ /* stop thread */
+ stop_me = true;
+ kDebug() << strerror(errno) << "\n";
+ } else if (result == 0) {
+ /* do nothing. reserved for future purposes */
+ } else {
+ /* we have input */
+ if (FD_ISSET(mc.fd, &readset)) {
+ /* read input */
+ mev.type = MEDIA_CTRL_EVENT_NONE;
+ //readResult = read(fd, ev, sizeof(EV) * 64);
+ media_ctrl_read_event(&mc, &mev);
+ /* process event */
+ handle_event(mev);
+#if 0
+ if (readResult < 0) {
+ if (num_warnings % 10000 == 0) {
+ /* if device is not available anymore - dead or disconnected */
+ fprintf(stderr, "Failed to read event from Jog Shuttle FILE DESCRIPTOR (repeated %d times)\n", num_warnings + 1);