From cf7c89e31f453ef0c48967f21375d6a0ae2d1620 Mon Sep 17 00:00:00 2001 From: Christine Dodrill Date: Fri, 8 May 2020 08:47:25 -0400 Subject: [PATCH] let tas playback and input coexist --- src/pc/controller/controller_entry_point.c | 6 +-- src/pc/controller/controller_recorded_tas.c | 47 ++++++++++++--------- src/pc/controller/controller_tas_recorder.c | 3 +- 3 files changed, 33 insertions(+), 23 deletions(-) diff --git a/src/pc/controller/controller_entry_point.c b/src/pc/controller/controller_entry_point.c index a99b5e5..5daed3c 100644 --- a/src/pc/controller/controller_entry_point.c +++ b/src/pc/controller/controller_entry_point.c @@ -8,9 +8,9 @@ static struct ControllerAPI *controller_implementations[] = { &controller_recorded_tas, - /* &controller_sdl, */ - /* &controller_keyboard, */ - /* &controller_tas_recorder, */ + &controller_sdl, + &controller_keyboard, + &controller_tas_recorder, }; s32 osContInit(OSMesgQueue *mq, u8 *controllerBits, OSContStatus *status) { diff --git a/src/pc/controller/controller_recorded_tas.c b/src/pc/controller/controller_recorded_tas.c index 83b982b..af6bf43 100644 --- a/src/pc/controller/controller_recorded_tas.c +++ b/src/pc/controller/controller_recorded_tas.c @@ -5,35 +5,44 @@ #include "controller_api.h" -static int fd; +static FILE *fin; static int counter; #define OFFSET 0x400 +#define fname "cont.m64" static void tas_init(void) { - fd = open("cont.m64", O_RDONLY); - if (fd != 0) { - uint8_t buf[OFFSET]; - read(fd, buf, sizeof(buf)); - counter = 0; + fin = fopen(fname, "rb"); + if (fin == NULL) { + return; } + + printf("[tas_playback] loading %s\n", fname); + uint8_t buf[OFFSET]; + fread(buf, 1, sizeof(buf), fin); + counter = 0; } static void tas_read(OSContPad *pad) { - if (fd != 0) { - uint8_t bytes[4] = {0}; - int result = read(fd, bytes, 4); - if (result < 0) { - return; - } - - pad->button = (bytes[0] << 8) | bytes[1]; - pad->stick_x = bytes[2]; - pad->stick_y = bytes[3]; - counter+=4; - printf("%x called %04x %d %d\n", (counter + OFFSET), pad->button, bytes[2], bytes[3]); - fflush(stdout); + if (fin == NULL) { + return; } + + uint8_t bytes[4] = {0}; + int result = fread(bytes, 1, 4, fin); + if (feof(fin)) { + printf("[tas_playback] end of tas input\n"); + fclose(fin); + fin = NULL; + return; + } + + pad->button = (bytes[0] << 8) | bytes[1]; + pad->stick_x = bytes[2]; + pad->stick_y = bytes[3]; + counter+=4; + printf("[tas_playback] %08x called %04x %02x%02x\n", (counter + OFFSET), pad->button, bytes[2], bytes[3]); + fflush(stdout); } struct ControllerAPI controller_recorded_tas = { diff --git a/src/pc/controller/controller_tas_recorder.c b/src/pc/controller/controller_tas_recorder.c index d1c95a3..6bd1c99 100644 --- a/src/pc/controller/controller_tas_recorder.c +++ b/src/pc/controller/controller_tas_recorder.c @@ -12,7 +12,8 @@ static int counter; #define fname "rec.m64" static void tas_recorder_close(void) { - fclose(fout); + fclose(fout); + printf("[tas_recorder] saving tas data to %s\n", fname); } static void tas_recorder_init(void) {