+/*
+ * TeensyTAS, TAS input player for MegaDrive
+ * Copyright (c) 2014 notaz
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining
+ * a copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sublicense, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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;
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;
case 'v':
use_vsync = 1;
continue;
+ case 'n':
+ no_start_seq = 1;
+ continue;
default:
fprintf(stderr, "bad arg: %s\n", argv[i]);
return 1;
}
/* 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 |=
/* debug text */
buf_dbg[reaped_urb->actual_length] = 0;
printf("%s", buf_dbg);
+
+ // continue receiving debug before sending out stuff
+ tout.tv_sec = 0;
+ tout.tv_usec = 1000;
+ timeout = &tout;
+ continue;
}
else {
fprintf(stderr, "reaped unknown urb? %p #%zu\n",
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));
perror("USBDEVFS_SUBMITURB PKT_FIXED_STATE");
break;
}
+ fixed_input_changed = 0;
pending_urbs |= 1 << URB_DATA_OUT;
continue;
}