From e587dc150c41cbd307cee82a2763294640bb4278 Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Fri, 28 Nov 2014 08:16:23 +0100 Subject: [PATCH] to not miss it, always reset vis and bit counters on leader pulse --- app/src/main/rs/decoder.rs | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/app/src/main/rs/decoder.rs b/app/src/main/rs/decoder.rs index 5c5e4f3..5f74076 100644 --- a/app/src/main/rs/decoder.rs +++ b/app/src/main/rs/decoder.rs @@ -530,43 +530,40 @@ static int calibration_detected(float dat_value, int cnt_active, int cnt_quantiz } if (progress == 3) { - static int bit_pos, vis_code; + static int bit_pos, vis_pos, vis_code; static int vis_counter, bit_counter; - if (++vis_counter < (bit_pos + 1) * bit_length) { + if (leader_pulse) { + bit_pos = 0; + vis_pos = bit_length; + bit_counter = 0; + vis_counter = 0; + } + if (++vis_counter < vis_pos) { bit_counter += cnt_quantized; } else { if (bit_pos == 0 && 2 * abs(bit_counter) < bit_length) { vis_code = 0; - ++bit_pos; } else if (0 < bit_pos && bit_pos < 9 && 2 * abs(bit_counter) > bit_length) { int bit_val = bit_counter < 0 ? 1 : 0; vis_code |= bit_val << (bit_pos - 1); // sometimes stop bit is missing, finish up here. if (bit_pos == 8) { - bit_pos = 0; progress = 0; countdown = 0; - bit_counter = 0; - vis_counter = 0; return vis_code; } - ++bit_pos; } else if (bit_pos == 9 && 2 * abs(bit_counter) < bit_length) { - bit_pos = 0; progress = 0; countdown = 0; - bit_counter = 0; - vis_counter = 0; return vis_code; } else { - bit_pos = 0; progress = 0; countdown = 0; - bit_counter = 0; - vis_counter = 0; return -1; } + ++bit_pos; bit_counter = cnt_quantized; + vis_pos += bit_length; } }