Index: C:/Program Files/Eclipse Data/workspace/zaptel/fxotune.c =================================================================== --- C:/Program Files/Eclipse Data/workspace/zaptel/fxotune.c (revision 1107) +++ C:/Program Files/Eclipse Data/workspace/zaptel/fxotune.c (working copy) @@ -31,9 +31,9 @@ #include "wctdm.h" #include "fxotune.h" -#define TEST_DURATION 2000 /* 4000 samples (or 500 ms) of test */ -#define BUFFER_LENGTH (2 * TEST_DURATION) /* 4000 sample buffers */ -#define SKIP_SAMPLES 800 /* skip first 100 ms of test when computing echo powers - gives the system time to acquire data */ +#define TEST_DURATION 4000 /* 4000 samples (or 500 ms) of test */ +#define BUFFER_LENGTH (2 * TEST_DURATION) /* 4000 sample buffers */ +#define SKIP_SAMPLES 800 /* skip first 100 ms of test when computing echo powers - gives the system time to acquire data */ static const float loudness = 16384.0; @@ -100,12 +100,24 @@ static int ensure_silence(struct silence_info *info) { struct timeval tv; - long elapsedms; + long int elapsedms; + gettimeofday(&tv, NULL); - elapsedms = ((tv.tv_sec - info->last_reset.tv_sec) * 1000L + (tv.tv_usec - info->last_reset.tv_usec)); + + if (info->last_reset.tv_sec == 0){ + /* this is the first request, we will force it to run */ + elapsedms = -1; + } else { + /* this is not the first request, we will compute elapsed time */ + elapsedms = ((tv.tv_sec - info->last_reset.tv_sec) * 1000L + (tv.tv_usec - info->last_reset.tv_usec) / 1000L); + } - if (elapsedms < info->reset_after * 1000) + if (debug > 4){ + fprintf(stdout, "Reset line request received - elapsed ms = %li / reset after = %ld\n", elapsedms, info->reset_after * 1000L); + } + + if (elapsedms > 0 && elapsedms < info->reset_after * 1000L) return 0; if (debug > 1){