Reorganize analog audio configs structures.

This commit is contained in:
Jared Boone 2016-02-02 11:02:07 -08:00
parent ee67948a63
commit cbaa04ff07
2 changed files with 90 additions and 50 deletions

View File

@ -25,32 +25,30 @@
#include "portapack_shared_memory.hpp" #include "portapack_shared_memory.hpp"
using namespace portapack; using namespace portapack;
#include "dsp_fir_taps.hpp"
#include "dsp_iir_config.hpp"
#include "utility.hpp" #include "utility.hpp"
struct NBFMMode { #include "dsp_iir_config.hpp"
const fir_taps_real<24> decim_0;
const fir_taps_real<32> decim_1;
const fir_taps_real<32> channel;
const size_t deviation;
};
static constexpr std::array<NBFMMode, 3> nbfm_mode_configs { { void AMConfig::apply() const {
{ taps_4k25_decim_0, taps_4k25_decim_1, taps_4k25_channel, 2500 }, const AMConfigureMessage message {
{ taps_11k0_decim_0, taps_11k0_decim_1, taps_11k0_channel, 2500 }, taps_6k0_decim_0,
{ taps_16k0_decim_0, taps_16k0_decim_1, taps_16k0_channel, 5000 }, taps_6k0_decim_1,
} }; taps_6k0_decim_2,
channel,
modulation,
audio_12k_hpf_300hz_config
};
shared_memory.baseband_queue.push(message);
clock_manager.set_base_audio_clock_divider(4);
}
void AnalogAudioModel::configure_nbfm(const size_t index) { void NBFMConfig::apply() const {
const auto config = nbfm_mode_configs[index];
const NBFMConfigureMessage message { const NBFMConfigureMessage message {
config.decim_0, decim_0,
config.decim_1, decim_1,
config.channel, channel,
2, 2,
config.deviation, deviation,
audio_24k_hpf_300hz_config, audio_24k_hpf_300hz_config,
audio_24k_deemph_300_6_config audio_24k_deemph_300_6_config
}; };
@ -58,7 +56,7 @@ void AnalogAudioModel::configure_nbfm(const size_t index) {
clock_manager.set_base_audio_clock_divider(2); clock_manager.set_base_audio_clock_divider(2);
} }
void AnalogAudioModel::configure_wfm() { void WFMConfig::apply() const {
const WFMConfigureMessage message { const WFMConfigureMessage message {
taps_200k_wfm_decim_0, taps_200k_wfm_decim_0,
taps_200k_wfm_decim_1, taps_200k_wfm_decim_1,
@ -71,30 +69,21 @@ void AnalogAudioModel::configure_wfm() {
clock_manager.set_base_audio_clock_divider(1); clock_manager.set_base_audio_clock_divider(1);
} }
struct AMMode { static constexpr std::array<AMConfig, 3> am_configs { {
const fir_taps_complex<64> channel;
const AMConfigureMessage::Modulation modulation;
};
static constexpr std::array<AMMode, 3> am_mode_configs { {
{ taps_6k0_dsb_channel, AMConfigureMessage::Modulation::DSB }, { taps_6k0_dsb_channel, AMConfigureMessage::Modulation::DSB },
{ taps_2k8_usb_channel, AMConfigureMessage::Modulation::SSB }, { taps_2k8_usb_channel, AMConfigureMessage::Modulation::SSB },
{ taps_2k8_lsb_channel, AMConfigureMessage::Modulation::SSB }, { taps_2k8_lsb_channel, AMConfigureMessage::Modulation::SSB },
} }; } };
void AnalogAudioModel::configure_am(const size_t index) { static constexpr std::array<NBFMConfig, 3> nbfm_configs { {
const auto config = am_mode_configs[index]; { taps_4k25_decim_0, taps_4k25_decim_1, taps_4k25_channel, 2500 },
const AMConfigureMessage message { { taps_11k0_decim_0, taps_11k0_decim_1, taps_11k0_channel, 2500 },
taps_6k0_decim_0, { taps_16k0_decim_0, taps_16k0_decim_1, taps_16k0_channel, 5000 },
taps_6k0_decim_1, } };
taps_6k0_decim_2,
config.channel, static constexpr std::array<WFMConfig, 1> wfm_configs { {
config.modulation, { },
audio_12k_hpf_300hz_config } };
};
shared_memory.baseband_queue.push(message);
clock_manager.set_base_audio_clock_divider(4);
}
namespace ui { namespace ui {
@ -239,15 +228,15 @@ void AnalogAudioView::on_modulation_changed(const ReceiverModel::Mode mode) {
switch(mode) { switch(mode) {
default: default:
case ReceiverModel::Mode::AMAudio: case ReceiverModel::Mode::AMAudio:
model.configure_am(0); update_am_config();
break; break;
case ReceiverModel::Mode::NarrowbandFMAudio: case ReceiverModel::Mode::NarrowbandFMAudio:
model.configure_nbfm(0); update_nbfm_config();
break; break;
case ReceiverModel::Mode::WidebandFMAudio: case ReceiverModel::Mode::WidebandFMAudio:
model.configure_wfm(); update_wfm_config();
break; break;
case ReceiverModel::Mode::SpectrumAnalysis: case ReceiverModel::Mode::SpectrumAnalysis:
@ -287,4 +276,30 @@ void AnalogAudioView::on_headphone_volume_changed(int32_t v) {
receiver_model.set_headphone_volume(new_volume); receiver_model.set_headphone_volume(new_volume);
} }
void AnalogAudioView::on_am_config_index_changed(size_t n) {
if( n < am_configs.size() ) {
am_config_index = n;
update_am_config();
}
}
void AnalogAudioView::on_nbfm_config_index_changed(size_t n) {
if( n < nbfm_configs.size() ) {
nbfm_config_index = n;
update_nbfm_config();
}
}
void AnalogAudioView::update_am_config() {
am_configs[am_config_index].apply();
}
void AnalogAudioView::update_nbfm_config() {
nbfm_configs[nbfm_config_index].apply();
}
void AnalogAudioView::update_wfm_config() {
wfm_configs[wfm_config_index].apply();
}
} /* namespace ui */ } /* namespace ui */

View File

@ -29,11 +29,27 @@
#include "ui_font_fixed_8x16.hpp" #include "ui_font_fixed_8x16.hpp"
class AnalogAudioModel { #include "dsp_fir_taps.hpp"
public: #include "dsp_iir.hpp"
void configure_nbfm(const size_t index);
void configure_wfm(); struct AMConfig {
void configure_am(const size_t index); const fir_taps_complex<64> channel;
const AMConfigureMessage::Modulation modulation;
void apply() const;
};
struct NBFMConfig {
const fir_taps_real<24> decim_0;
const fir_taps_real<32> decim_1;
const fir_taps_real<32> channel;
const size_t deviation;
void apply() const;
};
struct WFMConfig {
void apply() const;
}; };
namespace ui { namespace ui {
@ -56,8 +72,6 @@ public:
void focus() override; void focus() override;
private: private:
AnalogAudioModel model;
static constexpr ui::Dim header_height = 2 * 16; static constexpr ui::Dim header_height = 2 * 16;
RSSI rssi { RSSI rssi {
@ -129,6 +143,10 @@ private:
*/ */
spectrum::WaterfallWidget waterfall; spectrum::WaterfallWidget waterfall;
size_t am_config_index = 0;
size_t nbfm_config_index = 0;
static constexpr size_t wfm_config_index = 0;
void on_tuning_frequency_changed(rf::Frequency f); void on_tuning_frequency_changed(rf::Frequency f);
void on_baseband_bandwidth_changed(uint32_t bandwidth_hz); void on_baseband_bandwidth_changed(uint32_t bandwidth_hz);
void on_rf_amp_changed(bool v); void on_rf_amp_changed(bool v);
@ -141,6 +159,13 @@ private:
void on_reference_ppm_correction_changed(int32_t v); void on_reference_ppm_correction_changed(int32_t v);
void on_headphone_volume_changed(int32_t v); void on_headphone_volume_changed(int32_t v);
void on_edit_frequency(); void on_edit_frequency();
void on_am_config_index_changed(size_t n);
void on_nbfm_config_index_changed(size_t n);
void update_am_config();
void update_nbfm_config();
void update_wfm_config();
}; };
} /* namespace ui */ } /* namespace ui */