From 0d323e4a42bcfa70150c77f45f6f465f84666e31 Mon Sep 17 00:00:00 2001 From: Justin Berger Date: Sat, 24 Mar 2018 09:50:40 -0600 Subject: Made playback / record process raw light data --- src/survive_playback.c | 55 ++++++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 6 deletions(-) (limited to 'src/survive_playback.c') diff --git a/src/survive_playback.c b/src/survive_playback.c index 9261bb5..172614b 100644 --- a/src/survive_playback.c +++ b/src/survive_playback.c @@ -16,6 +16,7 @@ typedef struct SurviveRecordingData { bool alwaysWriteStdOut; + bool writeRawLight; FILE *output_file; } SurviveRecordingData; @@ -96,6 +97,16 @@ void survive_recording_angle_process(struct SurviveObject *so, int sensor_id, in angle, lh); } +void survive_recording_lightcap(SurviveObject *so, LightcapElement *le) { + SurviveRecordingData *recordingData = so->ctx->recptr; + if (recordingData == 0) + return; + + if (recordingData->writeRawLight) { + write_to_output(recordingData, "%s C %d %u %u\n", so->codename, le->sensor_id, le->timestamp, le->length); + } +} + void survive_recording_light_process(struct SurviveObject *so, int sensor_id, int acode, int timeinsweep, uint32_t timecode, uint32_t length, uint32_t lh) { SurviveRecordingData *recordingData = so->ctx->recptr; @@ -133,6 +144,7 @@ void survive_recording_light_process(struct SurviveObject *so, int sensor_id, in LH_Axis = "Y"; break; } + write_to_output(recordingData, "%s %s %s %d %d %d %u %u %u\n", so->codename, LH_ID, LH_Axis, sensor_id, acode, timeinsweep, timecode, length, lh); } @@ -154,6 +166,7 @@ struct SurvivePlaybackData { FLT time_factor; double next_time_us; + bool hasRawLight; }; typedef struct SurvivePlaybackData SurvivePlaybackData; @@ -190,8 +203,31 @@ static int parse_and_run_imu(const char *line, SurvivePlaybackData *driver) { return 0; } -static int parse_and_run_lightcode(const char *line, - SurvivePlaybackData *driver) { +static int parse_and_run_rawlight(const char *line, SurvivePlaybackData *driver) { + driver->hasRawLight = 1; + + char dev[10]; + char op[10]; + LightcapElement le; + int rr = sscanf(line, "%s %s %hhu %u %hu\n", dev, op, &le.sensor_id, &le.timestamp, &le.length); + + SurviveObject *so = survive_get_so_by_name(driver->ctx, dev); + if (!so) { + static bool display_once = false; + SurviveContext *ctx = driver->ctx; + if (display_once == false) { + SV_ERROR("Could not find device named %s from lineno %d\n", dev, driver->lineno); + } + display_once = true; + + return -1; + } + + handle_lightcap(so, &le); + return 0; +} + +static int parse_and_run_lightcode(const char *line, SurvivePlaybackData *driver) { char lhn[10]; char axn[10]; char dev[10]; @@ -206,8 +242,7 @@ static int parse_and_run_lightcode(const char *line, &length, &lh); if (rr != 9) { - fprintf(stderr, "Warning: On line %d, only %d values read: '%s'\n", - driver->lineno, rr, line); + fprintf(stderr, "Warning: On line %d, only %d values read: '%s'\n", driver->lineno, rr, line); return -1; } @@ -263,13 +298,19 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) { char dev[10]; char op[10]; - if (sscanf(line, "%8s %8s", dev, op) < 2) + if (sscanf(line, "%8s %8s", dev, op) < 2) { + free(line); return 0; + } - if ((op[0] != 'R' && op[0] != 'L' && op[0] != 'I') || op[1] != 0) + if (op[1] != 0) { return 0; + } switch (op[0]) { + case 'C': + parse_and_run_rawlight(line, driver); + break; case 'L': case 'R': parse_and_run_lightcode(line, driver); @@ -319,6 +360,8 @@ void survive_install_recording(SurviveContext *ctx) { if (record_to_stdout) { SV_INFO("Recording to stdout"); } + + ctx->recptr->writeRawLight = survive_configi(ctx, "record-rawlight", SC_GET, 1); } } -- cgit v1.2.3 From b45e58d9f75747e8727ac6cd0594a921e945c7e2 Mon Sep 17 00:00:00 2001 From: Justin Berger Date: Sat, 24 Mar 2018 10:03:43 -0600 Subject: Fixed issue(s) which would write to the config file when it wasn't needed --- src/survive_playback.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/survive_playback.c') diff --git a/src/survive_playback.c b/src/survive_playback.c index 172614b..e4321bc 100644 --- a/src/survive_playback.c +++ b/src/survive_playback.c @@ -342,8 +342,8 @@ static int playback_close(struct SurviveContext *ctx, void *_driver) { } void survive_install_recording(SurviveContext *ctx) { - const char *dataout_file = survive_configs(ctx, "record", SC_SETCONFIG, ""); - int record_to_stdout = survive_configi(ctx, "record-stdout", SC_SETCONFIG, 0); + const char *dataout_file = survive_configs(ctx, "record", SC_GET, ""); + int record_to_stdout = survive_configi(ctx, "record-stdout", SC_GET, 0); if (strlen(dataout_file) > 0 || record_to_stdout) { ctx->recptr = calloc(1, sizeof(struct SurviveRecordingData)); @@ -366,7 +366,7 @@ void survive_install_recording(SurviveContext *ctx) { } int DriverRegPlayback(SurviveContext *ctx) { - const char *playback_file = survive_configs(ctx, "playback", SC_SETCONFIG, ""); + const char *playback_file = survive_configs(ctx, "playback", SC_GET, ""); if (strlen(playback_file) == 0) { return 0; @@ -375,7 +375,7 @@ int DriverRegPlayback(SurviveContext *ctx) { SurvivePlaybackData *sp = calloc(1, sizeof(SurvivePlaybackData)); sp->ctx = ctx; sp->playback_dir = playback_file; - sp->time_factor = survive_configf(ctx, "playback-factor", SC_SETCONFIG, 1.f); + sp->time_factor = survive_configf(ctx, "playback-factor", SC_GET, 1.f); printf("%s\n", playback_file); -- cgit v1.2.3 From c17ac29dcdb617f5d9d960e432a628747e0e63df Mon Sep 17 00:00:00 2001 From: Justin Berger Date: Sat, 24 Mar 2018 10:26:53 -0600 Subject: Added support for flags on command-line --- src/survive_playback.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/survive_playback.c') diff --git a/src/survive_playback.c b/src/survive_playback.c index e4321bc..dc9a330 100644 --- a/src/survive_playback.c +++ b/src/survive_playback.c @@ -350,7 +350,7 @@ void survive_install_recording(SurviveContext *ctx) { ctx->recptr->output_file = fopen(dataout_file, "w"); if (ctx->recptr->output_file == 0 && !record_to_stdout) { - SV_INFO("Could not open %s for writing\n", dataout_file); + SV_INFO("Could not open %s for writing", dataout_file); free(ctx->recptr); ctx->recptr = 0; return; @@ -377,8 +377,6 @@ int DriverRegPlayback(SurviveContext *ctx) { sp->playback_dir = playback_file; sp->time_factor = survive_configf(ctx, "playback-factor", SC_GET, 1.f); - printf("%s\n", playback_file); - sp->playback_file = fopen(playback_file, "r"); if (sp->playback_file == 0) { fprintf(stderr, "Could not open playback events file %s", -- cgit v1.2.3 From c47826bb1171083377309e356168b46cb3621df7 Mon Sep 17 00:00:00 2001 From: dpeter99 Date: Sun, 25 Mar 2018 21:06:27 +0200 Subject: Started the VS project update --- src/survive_playback.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'src/survive_playback.c') diff --git a/src/survive_playback.c b/src/survive_playback.c index dc9a330..de26f73 100644 --- a/src/survive_playback.c +++ b/src/survive_playback.c @@ -6,7 +6,7 @@ #include #include -#include +//#include #include "survive_config.h" #include "survive_default_devices.h" @@ -274,7 +274,7 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) { if (driver->next_time_us == 0) { char *buffer; size_t n = 0; - ssize_t r = getdelim(&line, &n, ' ', f); + int r = getdelim(&line, &n, ' ', f); if (r <= 0) return 0; @@ -292,7 +292,7 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) { char *buffer; size_t n = 0; - ssize_t r = getline(&line, &n, f); + int r = getline(&line, &n, f); if (r <= 0) return 0; @@ -397,7 +397,7 @@ int DriverRegPlayback(SurviveContext *ctx) { while (!feof(sp->playback_file) && !ferror(sp->playback_file)) { char *line = 0; size_t n; - ssize_t r = getline(&line, &n, sp->playback_file); + int r = getline(&line, &n, sp->playback_file); if (r <= 0) continue; -- cgit v1.2.3 From 7b6361a55e47dace4b1cfe36d8dba00a96424ad5 Mon Sep 17 00:00:00 2001 From: Justin Berger Date: Sun, 25 Mar 2018 13:15:59 -0600 Subject: Made playback work --- src/survive_playback.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/survive_playback.c') diff --git a/src/survive_playback.c b/src/survive_playback.c index de26f73..43a3c0b 100644 --- a/src/survive_playback.c +++ b/src/survive_playback.c @@ -6,7 +6,6 @@ #include #include -//#include #include "survive_config.h" #include "survive_default_devices.h" @@ -14,6 +13,14 @@ #include "os_generic.h" #include "stdarg.h" +#ifdef _WIN32 +typedef long ssize_t; +#define SSIZE_MAX LONG_MAX + +ssize_t getdelim(char ** lineptr, size_t * n, int delimiter, FILE *stream); +ssize_t getline(char **lineptr, size_t * n, FILE *stream); +#endif + typedef struct SurviveRecordingData { bool alwaysWriteStdOut; bool writeRawLight; @@ -267,14 +274,12 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) { FILE *f = driver->playback_file; if (f && !feof(f) && !ferror(f)) { - int i; driver->lineno++; char *line; if (driver->next_time_us == 0) { - char *buffer; size_t n = 0; - int r = getdelim(&line, &n, ' ', f); + ssize_t r = getdelim(&line, &n, ' ', f); if (r <= 0) return 0; @@ -290,9 +295,8 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) { return 0; driver->next_time_us = 0; - char *buffer; size_t n = 0; - int r = getline(&line, &n, f); + ssize_t r = getline(&line, &n, f); if (r <= 0) return 0; -- cgit v1.2.3 From 91f0cab811e983da63ea49f6e24afae283138a1c Mon Sep 17 00:00:00 2001 From: Justin Berger Date: Wed, 28 Mar 2018 20:36:05 -0600 Subject: Functional C# in windows --- src/survive_playback.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/survive_playback.c') diff --git a/src/survive_playback.c b/src/survive_playback.c index 43a3c0b..c73dd2f 100644 --- a/src/survive_playback.c +++ b/src/survive_playback.c @@ -275,7 +275,7 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) { if (f && !feof(f) && !ferror(f)) { driver->lineno++; - char *line; + char *line = 0; if (driver->next_time_us == 0) { size_t n = 0; -- cgit v1.2.3 From 443af4e8fb770d074f1ce729a40687f79d548a50 Mon Sep 17 00:00:00 2001 From: Justin Berger Date: Fri, 30 Mar 2018 09:43:20 -0600 Subject: Made is so that if rawlight data was available, angles don't playback --- src/survive_playback.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/survive_playback.c') diff --git a/src/survive_playback.c b/src/survive_playback.c index c73dd2f..6789a66 100644 --- a/src/survive_playback.c +++ b/src/survive_playback.c @@ -317,7 +317,8 @@ static int playback_poll(struct SurviveContext *ctx, void *_driver) { break; case 'L': case 'R': - parse_and_run_lightcode(line, driver); + if (driver->hasRawLight == false) + parse_and_run_lightcode(line, driver); break; case 'I': parse_and_run_imu(line, driver); -- cgit v1.2.3