diff --git a/firmware/application/baseband_api.cpp b/firmware/application/baseband_api.cpp index 72d9e2a4..8732eda5 100644 --- a/firmware/application/baseband_api.cpp +++ b/firmware/application/baseband_api.cpp @@ -106,6 +106,13 @@ void set_audiotx_data(const uint32_t bw) { send_message(&message); } +void set_fifo_data(const int8_t * data) { + const FIFODataMessage message { + data + }; + send_message(&message); +} + void set_pwmrssi(int32_t avg, bool enabled) { const PWMRSSIConfigureMessage message { enabled, diff --git a/firmware/application/baseband_api.hpp b/firmware/application/baseband_api.hpp index 9b619065..9b175f6f 100644 --- a/firmware/application/baseband_api.hpp +++ b/firmware/application/baseband_api.hpp @@ -54,6 +54,7 @@ struct WFMConfig { void set_ccir_data( const uint32_t samples_per_tone, const uint16_t tone_count); void set_audiotx_data(const uint32_t bw); +void set_fifo_data(const int8_t * data); void set_pwmrssi(int32_t avg, bool enabled); void set_afsk_data(const uint32_t afsk_samples_per_bit, const uint32_t afsk_phase_inc_mark, const uint32_t afsk_phase_inc_space, const uint8_t afsk_repeat, const uint32_t afsk_bw, const bool afsk_alt_format); diff --git a/firmware/application/ui_about.cpp b/firmware/application/ui_about.cpp index 2dc98d5a..df2a5f49 100644 --- a/firmware/application/ui_about.cpp +++ b/firmware/application/ui_about.cpp @@ -29,7 +29,6 @@ #include "portapack.hpp" #include "audio.hpp" #include "event_m0.hpp" -#include "baseband_api.hpp" #include "ui_about.hpp" #include "touch.hpp" @@ -318,7 +317,7 @@ void AboutView::render_audio() { } } - ym_buffer[ym_render_cnt] = (ym_out * 2) - 93; + ym_buffer[ym_render_cnt] = (ym_out * 2) - 45; if (ym_sample_cnt < 960) { ym_sample_cnt++; diff --git a/firmware/application/ui_about.hpp b/firmware/application/ui_about.hpp index 18f69061..2cca9e73 100644 --- a/firmware/application/ui_about.hpp +++ b/firmware/application/ui_about.hpp @@ -27,6 +27,7 @@ #include "ui_menu.hpp" #include "ui_navigation.hpp" #include "transmitter_model.hpp" +#include "baseband_api.hpp" #include @@ -156,12 +157,10 @@ private: MessageHandlerRegistration message_handler_fifo_signal { Message::ID::FIFOSignal, [this](const Message* const p) { - FIFODataMessage datamessage; const auto message = static_cast(p); if (message->signaltype == 1) { this->render_audio(); - datamessage.data = ym_buffer; - EventDispatcher::send_message(datamessage); + baseband::set_fifo_data(ym_buffer); } } }; diff --git a/firmware/application/ui_lcr.hpp b/firmware/application/ui_lcr.hpp index 7d7ba6c9..a6d69533 100644 --- a/firmware/application/ui_lcr.hpp +++ b/firmware/application/ui_lcr.hpp @@ -46,7 +46,7 @@ private: const scan_list_t scan_list[2] = { { 36, &RGSB_list_Lille[0][0] }, - { 23, &RGSB_list_Reims[0][0] } + { 20, &RGSB_list_Reims[0][0] } }; const char RGSB_list_Lille[36][5] = { @@ -62,7 +62,7 @@ private: "EbS0" }; - const char RGSB_list_Reims[23][5] = { + const char RGSB_list_Reims[20][5] = { "AI10", "AI20", "AI30", "AI40", "AI50", "AI60", "AI70", "AJ10", "AJ20", "AJ30", "AJ40", diff --git a/firmware/baseband/proc_audiotx.cpp b/firmware/baseband/proc_audiotx.cpp index 3b383ab8..a2884b14 100644 --- a/firmware/baseband/proc_audiotx.cpp +++ b/firmware/baseband/proc_audiotx.cpp @@ -22,7 +22,7 @@ #include "proc_audiotx.hpp" #include "portapack_shared_memory.hpp" -#include "sine_table.hpp" +#include "sine_table_int8.hpp" //#include "audio_output.hpp" #include "event_m4.hpp" @@ -37,35 +37,32 @@ void AudioTXProcessor::execute(const buffer_c8_t& buffer){ ai = 0; for (size_t i = 0; i= 31) { as = 0; - //audio_fifo.out(&sample, 1); + audio_fifo.out(sample); //preview_audio_buffer.p[ai++] = sample << 8; - //if ((audio_fifo.len() < 1024) && (asked == false)) { + if ((audio_fifo.len() < 1024) && (asked == false)) { // Ask application to fill up fifo sigmessage.signaltype = 1; shared_memory.application_queue.push(sigmessage); asked = true; - //} + } } else { as++; } - // FM - frq = (int32_t)(sample) * 4 * 2000; + frq = sample * 8000; phase = (phase + frq); - sphase = phase + (256 << 16); + sphase = phase + (64 << 18); - re = (sine_table_f32[(sphase & 0x03FF0000)>>18]*127); - im = (sine_table_f32[(phase & 0x03FF0000)>>18]*127); + re = (sine_table_i8[(sphase & 0x03FC0000) >> 18]); + im = (sine_table_i8[(phase & 0x03FC0000) >> 18]); - buffer.p[i] = { (int8_t)re, (int8_t)im }; + buffer.p[i] = {(int8_t)re, (int8_t)im}; } //AudioOutput::fill_audio_buffer(preview_audio_buffer, true); @@ -79,7 +76,7 @@ void AudioTXProcessor::on_message(const Message* const msg) { break; case Message::ID::FIFOData: - //audio_fifo.in(static_cast(msg)->data, 1024); + audio_fifo.in(static_cast(msg)->data, 1024); asked = false; break; diff --git a/firmware/baseband/proc_audiotx.hpp b/firmware/baseband/proc_audiotx.hpp index 0bc6ea43..6cb6431d 100644 --- a/firmware/baseband/proc_audiotx.hpp +++ b/firmware/baseband/proc_audiotx.hpp @@ -25,6 +25,7 @@ #include "fifo.hpp" #include "baseband_processor.hpp" +#include "baseband_thread.hpp" class AudioTXProcessor : public BasebandProcessor { public: @@ -35,15 +36,15 @@ public: private: bool configured = false; - //std::unique_ptr audio_fifo_data = std::make_unique(1UL << 11); - //FIFO audio_fifo = { audio_fifo_data.get(), 11 }; // 43ms @ 48000Hz + BasebandThread baseband_thread { 1536000, this, NORMALPRIO + 20, baseband::Direction::Transmit }; + + int8_t audio_fifo_data[2048]; + FIFO audio_fifo = { audio_fifo_data, 11 }; // 43ms @ 48000Hz uint8_t as = 0, ai; int8_t re, im; int8_t sample; - int16_t st; - bool asked = false; //int16_t audio_data[64]; diff --git a/firmware/common/message.hpp b/firmware/common/message.hpp index 6d1ca045..6cbdba66 100644 --- a/firmware/common/message.hpp +++ b/firmware/common/message.hpp @@ -616,12 +616,13 @@ public: class FIFODataMessage : public Message { public: constexpr FIFODataMessage( + const int8_t * data ) : Message { ID::FIFOData }, - data ( nullptr ) + data ( data ) { } - int8_t * data; + const int8_t * data; }; class CaptureThreadDoneMessage : public Message { diff --git a/firmware/portapack-h1-firmware.bin b/firmware/portapack-h1-firmware.bin index efa21b33..548ba57c 100644 Binary files a/firmware/portapack-h1-firmware.bin and b/firmware/portapack-h1-firmware.bin differ