Fixed Sonde RSSI "Beep" (#2012)

This commit is contained in:
Mark Thompson
2024-03-19 04:53:55 -05:00
committed by GitHub
parent b53c8e1f80
commit 74442f197d
7 changed files with 40 additions and 164 deletions

View File

@@ -1,6 +1,7 @@
/*
* Copyright (C) 2015 Jared Boone, ShareBrained Technology, Inc.
* Copyright (C) 2017 Furrtek
* Copyright (C) 2024 Mark Thompson
*
* This file is part of PortaPack.
*
@@ -26,16 +27,12 @@
#include "event_m4.hpp"
#include "audio_output.hpp"
#include "audio_dma.hpp"
SondeProcessor::SondeProcessor() {
decim_0.configure(taps_11k0_decim_0.taps);
decim_1.configure(taps_11k0_decim_1.taps);
audio_output.configure(false);
tone_gen.configure(BEEP_BASE_FREQ, 1.0, ToneGen::tone_type::sine, AUDIO_SAMPLE_RATE);
baseband_thread.start();
}
@@ -55,23 +52,6 @@ void SondeProcessor::execute(const buffer_c8_t& buffer) {
clock_recovery_fsk_4800(mf.get_output());
}
}
if (pitch_rssi_enabled) {
if (beep_play) {
// if we let the buffer underrun, for some reason
// once it starts looping it ignores zero (silence)
// samples, so we need to keep feeding the buffer
// and not be able to take advantage of the circular
// buffer loop:
// beep_play = false;
generate_beep();
}
if (silence_play) {
// silence_play = false;
generate_silence();
}
}
}
void SondeProcessor::on_message(const Message* const msg) {
@@ -89,9 +69,9 @@ void SondeProcessor::on_message(const Message* const msg) {
beep_duration = BEEP_DURATION_RANGE + BEEP_MIN_DURATION;
}
play_beep();
audio::dma::beep_start(beep_freq, AUDIO_SAMPLE_RATE);
chThdSleepMilliseconds(beep_duration);
stop_beep();
audio::dma::beep_stop();
}
break;
@@ -104,41 +84,11 @@ void SondeProcessor::on_message(const Message* const msg) {
}
}
void SondeProcessor::play_beep() {
beep_play = true;
silence_play = false;
}
void SondeProcessor::stop_beep() {
beep_play = false;
silence_play = true;
}
void SondeProcessor::generate_beep() {
// here we let the samples be created using the ToneGen class:
for (uint8_t i = 0; i < sizeof(audio_buffer.p); i++) {
audio_buffer.p[i] = (int16_t)((tone_gen.process(0) >> 16) & 0x0000FFFF);
}
audio_output.write(audio_buffer);
}
void SondeProcessor::generate_silence() {
for (uint8_t i = 0; i < sizeof(audio_buffer.p); i++) {
audio_buffer.p[i] = 0;
}
audio_output.write(audio_buffer);
}
void SondeProcessor::pitch_rssi_config(const PitchRSSIConfigureMessage& message) {
pitch_rssi_enabled = message.enabled;
uint32_t freq = (int)((float)message.rssi * (float)RSSI_PITCH_WEIGHT + (float)BEEP_BASE_FREQ);
beep_freq = (int)((float)message.rssi * (float)RSSI_PITCH_WEIGHT + (float)BEEP_BASE_FREQ);
last_rssi = message.rssi;
tone_gen.configure(freq, 1.0, ToneGen::tone_type::sine, AUDIO_SAMPLE_RATE);
}
int main() {