From 4e128e89305c22f8a623497ac9ebf40bc48a0f79 Mon Sep 17 00:00:00 2001 From: Mark Thompson <129641948+NotherNgineer@users.noreply.github.com> Date: Sat, 1 Jul 2023 08:36:07 -0500 Subject: [PATCH] Fixed CTCSS tone detection (#1226) * Fixed erroneous rounding code * Fixed CTCSS tone detection * Correct tone index for XZ/WZ and sort table by tone freq --- firmware/application/tone_key.cpp | 11 ++++++----- firmware/baseband/proc_nfm_audio.cpp | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/firmware/application/tone_key.cpp b/firmware/application/tone_key.cpp index 138cd407b..d96559382 100644 --- a/firmware/application/tone_key.cpp +++ b/firmware/application/tone_key.cpp @@ -25,10 +25,11 @@ namespace tonekey { +// Keep list in ascending order by tone frequency const tone_key_t tone_keys = { {"None", 0.0}, - {"0 XZ", 67.000}, - {"1 WZ", 69.400}, + {"1 XZ", 67.000}, + {"39 WZ", 69.300}, {"2 XA", 71.900}, {"3 WA", 74.400}, {"4 XB", 77.000}, @@ -77,11 +78,11 @@ const tone_key_t tone_keys = { {"37 M6", 241.800}, {"38 M7", 250.300}, {"50 0Z", 254.100}, + {"Shure 19kHz", 19000.0}, {"Axient 28kHz", 28000.0}, - {"Senn. 32.768k", 32768.0}, {"Senn. 32.000k", 32000.0}, {"Sony 32.382k", 32382.0}, - {"Shure 19kHz", 19000.0}}; + {"Senn. 32.768k", 32768.0}}; void tone_keys_populate(OptionsField& field) { using option_t = std::pair; @@ -120,7 +121,7 @@ std::string tone_key_string_by_value(uint32_t value) { tone_index tone_key_index_by_value(uint32_t value) { float diff; float min_diff{(float)value}; - float fvalue{(float)((min_diff + 50.0) / 100.0)}; + float fvalue{(float)(min_diff / 100.0)}; tone_index min_idx{-1}; tone_index idx; diff --git a/firmware/baseband/proc_nfm_audio.cpp b/firmware/baseband/proc_nfm_audio.cpp index 85251932c..e3aef78a7 100644 --- a/firmware/baseband/proc_nfm_audio.cpp +++ b/firmware/baseband/proc_nfm_audio.cpp @@ -72,7 +72,7 @@ void NarrowbandFMAudio::execute(const buffer_c8_t& buffer) { cur_sample = audio_f[c]; if (cur_sample * prev_sample < 0.0) { z_acc += z_timer; - z_timer = 0; + z_timer = 1; z_count++; } else z_timer++;