Skip to content

Commit

Permalink
Added a beep duration parameter (#2013)
Browse files Browse the repository at this point in the history
  • Loading branch information
NotherNgineer authored Mar 19, 2024
1 parent 74442f1 commit 3085739
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 6 deletions.
12 changes: 11 additions & 1 deletion firmware/baseband/audio_dma.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,14 @@ static volatile const gpdma::channel::LLI* tx_next_lli = nullptr;
static volatile const gpdma::channel::LLI* rx_next_lli = nullptr;

static bool single_tx_buffer = false;
static uint32_t beep_duration_downcounter = 0;

static void tx_transfer_complete() {
tx_next_lli = gpdma_channel_i2s0_tx.next_lli();

if (beep_duration_downcounter != 0)
if (--beep_duration_downcounter == 0)
beep_stop();
}

static void tx_error() {
Expand Down Expand Up @@ -233,11 +238,16 @@ void shrink_tx_buffer(bool shrink) {
lli_tx_loop[0].lli = lli_pointer(&lli_tx_loop[1]);
}

void beep_start(uint32_t freq, uint32_t sample_rate) {
void beep_start(uint32_t freq, uint32_t sample_rate, uint32_t beep_duration_ms) {
tone_gen.configure_beep(freq, sample_rate);

for (size_t i = 0; i < buffer_samples; i++)
buffer_tx[i].left = buffer_tx[i].right = tone_gen.process_beep();

uint32_t beep_interrupt_count = beep_duration_ms * sample_rate / (1000 * transfer_samples);
if ((beep_duration_ms != 0) && (beep_interrupt_count == 0))
beep_interrupt_count = 1;
beep_duration_downcounter = beep_interrupt_count;
}

void beep_stop() {
Expand Down
2 changes: 1 addition & 1 deletion firmware/baseband/audio_dma.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ void init_audio_in();
void init_audio_out();
void disable();
void shrink_tx_buffer(bool shrink);
void beep_start(uint32_t freq, uint32_t sample_rate);
void beep_start(uint32_t freq, uint32_t sample_rate, uint32_t beep_duration_ms);
void beep_stop();

audio::buffer_t tx_empty_buffer();
Expand Down
6 changes: 2 additions & 4 deletions firmware/baseband/proc_sonde.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ void SondeProcessor::on_message(const Message* const msg) {
case Message::ID::RequestSignal:
if ((*reinterpret_cast<const RequestSignalMessage*>(msg)).signal == RequestSignalMessage::Signal::BeepRequest) {
float rssi_ratio = (float)last_rssi / (float)RSSI_CEILING;
int beep_duration = 0;
uint32_t beep_duration = 0;

if (rssi_ratio <= PROPORTIONAL_BEEP_THRES) {
beep_duration = BEEP_MIN_DURATION;
Expand All @@ -69,9 +69,7 @@ void SondeProcessor::on_message(const Message* const msg) {
beep_duration = BEEP_DURATION_RANGE + BEEP_MIN_DURATION;
}

audio::dma::beep_start(beep_freq, AUDIO_SAMPLE_RATE);
chThdSleepMilliseconds(beep_duration);
audio::dma::beep_stop();
audio::dma::beep_start(beep_freq, AUDIO_SAMPLE_RATE, beep_duration);
}
break;

Expand Down

0 comments on commit 3085739

Please sign in to comment.