fix an issue of lost inputs in direct control mode
[teensytas.git] / host / main.c
index 434eaa9..73b8a9f 100644 (file)
@@ -661,7 +661,7 @@ int main(int argc, char *argv[])
   struct teensy_dev dev;
   struct usbdevfs_urb urb[URB_CNT];
   struct usbdevfs_urb *reaped_urb;
-  int fixed_input_changed;
+  int fixed_input_changed = 0;
   int evdev_fds[16];
   int evdev_fd_cnt = 0;
   int evdev_support;
@@ -673,6 +673,7 @@ int main(int argc, char *argv[])
   const char *logfn = NULL;
   uint8_t *tas_data = NULL;
   int use_vsync = 0; // frame increment on vsync
+  int no_start_seq = 0;
   int tas_skip = 0;
   int enable_sent = 0;
   int abort_sent = 0;
@@ -718,6 +719,9 @@ int main(int argc, char *argv[])
       case 'v':
         use_vsync = 1;
         continue;
+      case 'n':
+        no_start_seq = 1;
+        continue;
       default:
         fprintf(stderr, "bad arg: %s\n", argv[i]);
         return 1;
@@ -921,7 +925,6 @@ int main(int argc, char *argv[])
     }
 
     /* something from input devices? */
-    fixed_input_changed = 0;
     for (i = 0; i < evdev_fd_cnt; i++) {
       if (FD_ISSET(evdev_fds[i], &rfds)) {
         fixed_input_changed |=
@@ -1043,6 +1046,7 @@ int main(int argc, char *argv[])
       pkt_out.enable.stream_to = (tas_data != NULL);
       pkt_out.enable.stream_from = (outf != NULL);
       pkt_out.enable.use_readinc = !use_vsync;
+      pkt_out.enable.no_start_seq = no_start_seq;
 
       ret = submit_urb(dev.fd, &urb[URB_DATA_OUT], dev.ifaces[0].ep_out,
                        &pkt_out, sizeof(pkt_out));
@@ -1066,6 +1070,7 @@ int main(int argc, char *argv[])
         perror("USBDEVFS_SUBMITURB PKT_FIXED_STATE");
         break;
       }
+      fixed_input_changed = 0;
       pending_urbs |= 1 << URB_DATA_OUT;
       continue;
     }