Skip to content

Commit

Permalink
Beep-on-packet support in AIS app (#2064)
Browse files Browse the repository at this point in the history
* Beep-on-packet support in AIS app
  • Loading branch information
NotherNgineer committed Mar 29, 2024
1 parent 76017c9 commit 6e5eadd
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 3 deletions.
14 changes: 14 additions & 0 deletions firmware/application/apps/ais_app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*/

#include "ais_app.hpp"
#include "audio.hpp"

#include "string_format.hpp"
#include "database.hpp"
Expand All @@ -32,6 +33,8 @@ using namespace portapack;

#include <algorithm>

namespace pmem = portapack::persistent_memory;

namespace ais {
namespace format {

Expand Down Expand Up @@ -190,6 +193,10 @@ void AISLogger::on_packet(const ais::Packet& packet) {
}

log_file.write_entry(packet.received_at(), entry);

if (pmem::beep_on_packets()) {
baseband::request_audio_beep(1000, 24000, 60);
}
}

void AISRecentEntry::update(const ais::Packet& packet) {
Expand Down Expand Up @@ -377,6 +384,7 @@ AISAppView::AISAppView(NavigationView& nav)
&field_lna,
&field_vga,
&rssi,
&field_volume,
&channel,
&recent_entries_view,
&recent_entry_detail_view,
Expand All @@ -402,9 +410,15 @@ AISAppView::AISAppView(NavigationView& nav)
if (logger) {
logger->append(logs_dir / u"AIS.TXT");
}

if (pmem::beep_on_packets()) {
audio::set_rate(audio::Rate::Hz_24000);
audio::output::start();
}
}

AISAppView::~AISAppView() {
audio::output::stop();
receiver_model.disable();
baseband::shutdown();
}
Expand Down
3 changes: 3 additions & 0 deletions firmware/application/apps/ais_app.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,9 @@ class AISAppView : public View {
{21 * 8, 0, 6 * 8, 4},
};

AudioVolumeField field_volume{
{28 * 8, 0 * 16}};

Channel channel{
{21 * 8, 5, 6 * 8, 4},
};
Expand Down
11 changes: 11 additions & 0 deletions firmware/baseband/proc_ais.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
*/

#include "proc_ais.hpp"
#include "audio_dma.hpp"

#include "portapack_shared_memory.hpp"

Expand Down Expand Up @@ -64,7 +65,17 @@ void AISProcessor::payload_handler(
shared_memory.application_queue.push(message);
}

void AISProcessor::on_message(const Message* const message) {
if (message->id == Message::ID::AudioBeep)
on_beep_message(*reinterpret_cast<const AudioBeepMessage*>(message));
}

void AISProcessor::on_beep_message(const AudioBeepMessage& message) {
audio::dma::beep_start(message.freq, message.sample_rate, message.duration_ms);
}

int main() {
audio::dma::init_audio_out();
EventDispatcher event_dispatcher{std::make_unique<AISProcessor>()};
event_dispatcher.run();
return 0;
Expand Down
8 changes: 5 additions & 3 deletions firmware/baseband/proc_ais.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -74,13 +74,15 @@ class AISProcessor : public BasebandProcessor {
this->payload_handler(packet);
}};

void consume_symbol(const float symbol);
void payload_handler(const baseband::Packet& packet);
void on_message(const Message* const message);
void on_beep_message(const AudioBeepMessage& message);

/* NB: Threads should be the last members in the class definition. */
BasebandThread baseband_thread{
baseband_fs, this, baseband::Direction::Receive, /*auto_start*/ false};
RSSIThread rssi_thread{};

void consume_symbol(const float symbol);
void payload_handler(const baseband::Packet& packet);
};

#endif /*__PROC_AIS_H__*/

0 comments on commit 6e5eadd

Please sign in to comment.